Geocities HTML Chat has been forgotten by the world. It is possible I am the only one who remembers it. I only half remember it. It was my first Internet community.
Here is what I remember.
Background
Geocities was the first, or at least biggest, of the "free web hosts" of the early Internet. Anyone could sign up for a pittance-small (5 megabytes? 10 megabytes?) web directory, and FTP up their HTML and GIF files and Geocities would host it raw and unaltered. Geocities sites had the ugliest URLs on the Internet. Each URL consisted of the user's "city", followed by a four-digit number Geocities assigned. The "cities" were broad categories indicating the type of content your site would contain, like "SiliconValley" for computers, "WestHollywood" for LGBT topics, or… "Tokyo"¹. The categories seemed ill-thought-out and lumpy. The existence of "NapaValley" seemed to indicate they believed there would be roughly as many sites about wine as about all computer-related subjects combined.
These "cities" seem to have been part of a very vague desire to conceptualize Geocities' very basic service (HTTP file hosting) as in fact a collection of communities. The people who made Geocities had some kind of sense the social web would, or could, someday exist. They could smell it, they could feel the heat of the thing in the room with them. They just had no idea what it would look like. Leaping from flat file hosting to something that looks like "social" "media" requires interactivity, and that was just not really available in webtech at that early point. Cross-page communities were things stitched in by hand (like the "webrings" the Mastodon crowd loves so much; these littered Geocities and invariably consisted of 50% dead links). "CGI-BIN" existed, on some sites (not Geocities), but all it could do was generate new flat files, so people largely only used CGI for the most basic purposes: "Guestbooks" where you could leave your name and a bit of text which would be appended to the HTML of the guestbook page; mindlessly simple "counters" which would generate on each load a GIF containing a number one higher than the last one loaded, showing how many people had visited that page.
If you're old enough to remember this time, you're kind of nodding off at this point in the post. You know all this. But you probably did not know about Geocities HTML Chat, and if you knew it existed and what it was you probably would be actually shocked. I'm not sure you're even going to believe me this was a real thing that existed.
The thing itself
Geocities HTML Chat was, from a technical perspective, a guestbook with a small twist. There was a chat for each of the "cities" (my home was SiliconValley, I think?). Each chat used (of course) frames to display two smaller webpages. One frame above (I don't actually remember, but let's say it was above) was a thin band containing a CGI input form. The lower frame was larger, and scrolled freely. This frame used a server-side trick; the server would tell your web browser it was sending it an infinitely long web page (or maybe it just claimed it was some impossibly large size, a gigabyte or something). It would send it the opening <html>, and then it would hang. It would keep the socket open. When a user in the chat room submitted a line to their CGI box, every user would simultaneously receive a new line on the bottom-frame open socket (which their web browser sincerely believed an ordinary webpage was actually really loading into, just very slowly):
<br><br>Nickname: Chat Text
And so, a chat room. Any user hits "submit", what they submitted appears on all our screens at once. Cute trick, you're thinking. They've just faked a dynamically loading chatroom without using any dynamic HTML features at all. But you've missed the important part.
When a user submits text, it is forwarded to everyone's chatscroll frame unchanged.
There was no input sanitization at all.
Whatever you're thinking, we did it.
On GeoCities HTML chat you could use raw HTML in your chat posts. You could use raw HTML in your nickname. Most people did. Most users' nicknames contained images.
You could do anything.
This did, obviously, leave room for griefing, but less than you'd think, because this was the HTML 2.0 era and there simply wasn't enough in the HTML standard yet to allow for truly major abuses. CSS didn't exist yet. About the worst someone could do would be to use an "obscure" tag, <abbr> or something, which would result in a visible formatting difference but leave the high level users confused as they spammed various close tags without guessing the right one. I think occasionally it would occur to someone to post a <!-- comment open, which would entirely silence the chat until someone figured out what had happened. But such abuses were always easily identified and quickly dealt with, the user would be banned and that would be that. In a worst case scenario you could always just reload the page, erasing the history and any stray formatting, and in the normal case, you just got used to the idea that sometimes, the chat would simply be purple for a bit.
MC Skat Kat was a community pillar, and the most active among the volunteer moderators.
My memories get a little fuzzy about exactly when this happened. What I think I remember was that there was a period that JavaScript had been introduced but lay dormant, and people only started to pay attention and learn it once Netscape 4 landed and "Dynamic HTML" got introduced. DHTML is now such a basic concept of the Internet you have to specifically explain there was a time it didn't exist; the concept of the DOM, and JavaScript being able to alter and rearrange a document structure after it has already been rendered as opposed to appending all at once as brutal one-off document.write()s. What I think I remember was that when the event happened I had some awareness I was partially immune to the consequences due to me staying for a time on Netscape 3 (due to Netscape 4 being slow and me liking a particular 3.0-exclusive mod I'd installed that transformed the browser into "Xena Navigator" and replaced the "loading" icon with a spinning Chakram). (I was literally twelve). DHTML, despite being practically useless in its early incarnation due to Netscape and IE offering mutually incompatible implementations, would have been really dangerous, not just because of its intended capabilities but because in those early DHTML browsers it was incredibly, unbelievably easy to find ways to use DHTML to make the browser crash. And as any modern programmer knows, if you can find a way to remotely crash a program, the chances are good you have a handle on a way to remotely execute code. I'm not sure though if Netscape 4 actually had been released when the event happened; that would have dated the event I'm about to describe to 1997, whereas honestly it might have been closer to 1995. But whether this was 1995 or 1997, and whether I was using Netscape Communicator 4 or Xena Navigator 3 at the time, doesn't really matter to the story. Even Netscape 3.0 supported alert(). And in those days, there was no way to escape a while (1) { alert() } loop except to force quit the browser.
What I definitely remember is that one day, sitting in the chat, somebody posted a JavaScript alert(). This appeared once or twice more over the course of an evening. I don't specifically remember if I myself encountered someone putting alert() in a loop, but sometime that evening in one of the "cities" someone must have tried it. Within 24 hours of that first alert() being posted, Geocities HTML Chat was gone. Geocities simply removed it from the Internet. We had no indication what was happening, nowhere to go for news, it wasn't like there was a forum somewhere we could switch over to. The chat was our one way of reaching each other, and it was gone. About 48 hours after the takedown, the Geocities chat URL suddenly went back up, this time hosting a completely different, Java-based chat app that had clearly been set up in an incredible hurry.
We were devastated. The Java applet was just not the same. It not only lacked the Godmode formatting capabilities of the old HTML Chat, it had no formatting at all. And it was slow, and clunky, and flickered constantly, because it was a Java applet. But Geocities was indifferent to our complaints. What is clear in retrospect is that Geocities probably literally did not have the ability to fix the HTML chat. Easy as it is to forget today, "internet companies" and websites in 1995-1997 were not by nature software developers. Many companies that ran websites probably had no software developers on staff at all. Whoever originally wrote the obviously tiny UNIX C program that must have powered the HTML chat— take in HTTP POST on socket A, push received bytes directly to sockets B through Q, do nothing else— probably no longer even worked at the company, and if they did, they probably lacked the technical skill to make the program any smarter than it was. Sanitizing HTML input is not trivial, and the best practices for it weren't developed yet then. Geocities did not actively maintain, and probably at an executive level did not even understand, this thing that they were hosting, until one day they suddenly discovered they were hosting a chat app where any griefer could at any time irrecoverably lock up every user's web browser. So they did the only thing they could do, which was to download or license as quickly as possible an off-the-shelf chat solution, which of course was not going to be anything like Geocities HTML Chat because nothing, before or since, has ever been like Geocities HTML Chat. No one would ever create something like Geocities HTML Chat on purpose. It's simply too bad an idea.
I don't know how long the Java-based Geocities Chat endured, or what if any community it formed. My community was dead. The very few of us who could get the Java chat to run at all met up in the new SiliconValley room over the day or so after the relaunch, said our tearful goodbyes to each other, and departed. It was over.
I took up IRC.
Geocities HTML Chat changed my life. I'd used BBS-like communities with message boards before, I had a web page (not on Geocities) before I found the chat. But this was the community I imprinted on. It was my first experience with the Web as something immediate, realtime, where a web page meant being in a place, with other people. It got me used to a mode of being online as an ever-flowing stream you dip in and out of, where you simply lay back and let a world wash over you.
But more than that. As a community chat app, it gave me an entirely unrealistic expectation of user freedom that nothing that followed has ever lived up to. On Geocities HTML Chat, every user was a god. The powers an individual user had there were not verbs granted by the app, the power was ours, inherent, we could reach out and reshape the matter of the place itself without limitation. Other than kicking (terminating a connection) there was nothing the site administrators could do that we could not, in that place.
There is some very small way that every website, or online community I've used since has been, a little bit, a disappointment. I tasted true freedom, once, and BBCode or even Cohost's security-boxed HTML passthrough, however generous, cannot live up to it. Someone once taught me that the proper form of the Internet is a thing where each individual person can do anything, up to and including eventually destroying the space itself. When I use, or design, online applications, I am dissatisfied with anything other than total scriptability. I dream of Twitter clones with LocalStorage-sandboxed user JavaScript and arbitrary server-side metadata storage that would let you design secondary apps attached to profiles, embed Twine games in individual posts. I look at VRChat or Second Life and all I see is the limitations in the sandboxed scripting, the points where a VRChat employee could write a tiny AI chatbot to follow you around but the end user with their tinkertoy primitives cannot. I develop anything at all for the modern Web and all I can think about is the variety of things a native application can do with ease but Apple denies me in my web-sandboxed jail.
Within me rages a tiny, twelve-year-old god, now squashed into human shape, unable to comprehend where its powers have gone, and nothing less than everything is satisfying.
¹ "Tokyo" was the only Asia-related category; either they thought no one would be talking about Asia unless it was to talk about anime, or they assumed everyone talking about Asia-related subjects would be happy condensing under "Tokyo". Note of course there would be absolutely zero websites by actual Japanese users in the Tokyo community, since those users would be using geocities.jp, which had its own twenty "cities" and managed to survive a good nine years longer than geocities dot com, sunsetting in 2018 to .com's 2009.