mcc

glitch girl

Avatar by @girlfiend

Also on Mastodon.


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

  1. Geocities was a formative website for the older millennials who are just barely old enough to remember when the "web browser" was introduced, but not old enough to be adults when it happened. It wasn't a very good site.

    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

  1. Geocities HTML Chat was the only "community" feature I remember Geocities ever attempting other than the mere fact of the "city" names. Most Geocities users didn't seem to know the chat was there. The concept was simplicity 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.

  2. Think like a Cohost user. Imagine the most extreme way you could use, or abuse, a chat room in which anything you say may contain unsanitized HTML.

    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.

  3. goodmorning.gifI had a particular trick I liked. I'd figured out I could align=right an <img> and it would "float" right and text would flow around it. So I had a little html block I'd occasionally begin my chats with that would float right a GIF I liked (hosted, of course, off my personal website; it was the System 7 "Finder icon" of a one-piece Macintosh, on a green hill, with a mushroom cloud erupting behind it) and that GIF would link to my personal webpage. It was normal (and acceptable) for people to post recurring, banner-like HTML adverts of their announcements and websites; Geocities HTML Chat had no history, there were no logs, so repetition was the only way to make something seen. This was my version of that, but it was subtle, and could fit right into whatever else I was saying at the time. I could have put the float-right GIF in my nickname, of course, if I'd wanted, but that would be overbearing.
  4. Because inputs were unsanitized and HTML was allowed, a semi-common problem was that people would open HTML tags and forget to close them. A stray < would be no problem, that would only result in the rest of that person's chat being deleted up to the next <br>, but if someone said <i> but forgot to (or typoed) their </i> then the chat would simply be in italics, everyone's chats, until someone posted a </i>. Flubbing tag closure was seen as an embarrassing faux pas, no worse, and moderators and experienced users simply saw it as one of their community duties to notice left-open tags and post a corresponding close tag.

    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.

  5. I was a regular on the chat for what I remember being years, and I made any number of friends there, but I actually only remember one specific user from that entire time, and that was "MC Skat Kat". MC Skat Kat, as you may know, was Paula Abdul's cartoon boyfriend from the music video for "Opposites Attract", not one of my favorite Paula Abdul songs.

    Animated GIF
    MC Skat Kat (left) and Paula Abdul (right).
    Note that this animated GIF is modern, and could never possibly have existed in the Geocities HTML Chat era; it's simply too large. At 280 pixels tall it is over half the height of a 640x480 monitor, and the file itself clocks in at a simply unmanageable 995 kilobytes(!).

    MC Skat Kat is a literal cat, and also a rapper. Our MC Skat Kat posted from the persona of this fictional MC Skat Kat, regularly referring to Paula Abdul as his girlfriend. Everyone simply accepted this. I don't think this was a furry thing, or rather, the human behind MC Skat Kat probably didn't at that time have the language of "furry" or the "furry community" available to him. He had simply decided that he was MC Skat Kat, and everyone went along with it. His nickname contained, if my memory can be trusted, two images of MC Skat Kat, to the left and right of his specially-formatted name, taking up maybe a third of an average screen.

    MC Skat Kat was a community pillar, and the most active among the volunteer moderators.

  6. I'm only just remembering this as I'm typing, and the memory is so vague I'm not entirely certain this part is real, but this is what my neurons are telling me: When a moderator kicked someone from the room I remember there being a big <h3>

    User "nickname" has been kicked from the chat.

    announcement.

    There was of course nothing stopping you from simply, at any point, saying "User 'nickname' has been kicked from the chat." in h3 text. It wouldn't have any effect, but you could do it. I don't even think the mods cared.
  7. Geocities HTML Chat puttered along in its gleeful, endless, rainbow-colored utter chaos until one day, all at once, the end came for it, without warning and very rapidly over a 48-hour period. You've probably already guessed the reason why. JavaScript. When Geocities HTML Chat was created, JavaScript did not exist. But then there came a time JavaScript existed, and then inevitably, there came a day that for the first time someone thought to use JavaScript in the chat room.

    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.

  8. What, if anything, to take away from this?

    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.


You must log in to comment.

in reply to @mcc's post:

I miss this shit. I understand why no one would risk running something like that these days; imagine someone installing a Bitcoin miner of the computers of an army of kids who don't know why their computer runs like absolute dogshit every time @MelonHusk logs in. But I miss it. I miss when posting "+++ATH0" in IRC still had a non-zero chance of making someone log off; roll the dice if you're on dialup, maybe you log off depending on how your PPP frames line up, maybe Grognard from Finland who comes in from a dialup shell account and doesn't even have the thin protection of PPP framing does instead. It was all in good fun.

I understand why we can't have nice things. But I miss it.

Actually! It happened in a community I'm a part of, someone made a joke chat that happened to be pretty much unsanitized html. I can't remember if it's still online (It was sometime last year) but it was etiquette to mess with it constantly, within limits. It being unsanitized was entirely by accident and stayed there because it was funny.

Damn, now I'm trying to remember whether I just barely missed this or whether I saw it but never explored it while I had the chance.

(Also definitely gonna imagine a "what have you done to me / I am a hideousness" from you every time I see you on a new website, thanks.)

This is an amazing write up. My own trajectory went from AOL chats to IRC pretty fast, but I think we can all relate to the sudden loss of community. No matter what chat you were apart of, it happened and it probably happened suddenly. Thank you for posting this.

I don't have anything as amazing as this story, but there was a time where I knew how to do the IRC handshake protocol by heart so that I could log into IRC through a bare telnet client. LAN shops were big at that time and they didn't always have an IRC client installed when my social circle was in IRC. It was a neat way to quickly check in with internet friends while I was playing CounterStrike with real life friends.

Yeah, I did exactly this for years with POP3. This was great because when you connect a normal email client it downloads all emails and deletes them from the server, but if you're typing in POP3 commands by hand you can decide to selectively delete spam but leave the "real" emails up for your home email to download later. (Theoretically I could have also sent emails with SMTP but that was a more complicated protocol and I never got the hang of it.)

So, this made me think about something silly. These days you could totally write a (comparatively) simple HTML renderer in something that compiles to wasm. You could then plug a network connection into that html renderer to receive stuff, and probably the sending bit could just be handled by your normal web browser.

You'd lose out on a lot of the features of a normal web browser (I imagine there would be some way to get clicked links out of this wasm application, but I have no idea how) but like. You could simulate something like this.

imagining a Silmarillion-esque cosmology wherein the Age of Gods, the Age of Legends, the Age of Heroes, and the present age were all just different levels of user privileges and sandboxing.

(disclaimer: i've never read homestuck and don't know anything about it, so if it already did this idea then i plead ignorance.)

I spent a lot of my time growing up online and until maybe 2008 on a small forum/communal weblog I will not name out of shame. It was not real time, but it also didn't do any HTML validation on comments - but it did hide downvoted comments by default. It turns out that, in this community, that was enough? A few times people did something devious, like post an img posting to a URL that would downvote someone else's comment, but even that got spotted and collectively downvoted into invisibility.

(I just realised it's a little broken that that isn't a POST only endpoint, but the whole backend was very jankily written, and spent long periods of time effectively abandoned by the owner/admin, so)

Anyway, I also miss people closing other people's tags for them.

I either forgot or never knew Geocities did this. For me, it was Xoom/Beseen webchat. I guess it was probably kind of like Geocities, because I remember instead of neighborhoods, it was planets. The chat I frequented the most was on Jupiter, I think. The Beseen chat was a normal webpage with a refresh command that would trigger every 5 seconds, and there was a button to manually refresh it in order to check for new chat messages. It WAS very proto-social-media, in retrospect.

I spent a ton of time on geocities chat as a young teen. Met a couple lifelong friends there, in fact.

They actually did try to sanitize the html a bit. If you inspected the source, you’d see every post start with </i></color></b> and so on. They also added an option to put an <hr> tag between posts so you could tell when someone was trying to impersonate someone else with <br>. You had to opt in to this, though.

I remember when the teardrop vulnerability came out, I would post an href to an image hosted on my Linux box. The Apache logs would show me the referrer url of everyone in the chat room, along with their ip. Then I could crash the computer of whichever chatters I didn’t like. They eventually put a stop to this by blocking hrefs to ip addresses.

There was another website that used the same software—it was called L’Hotel. They seemed to have slightly more sophisticated sanitization than geocities, thus it was a lot more boring.

I love how the "infinitely long http response" trick still works extremely well for sending real-time messages from server -> client (in the form of "long polling")
(except now you'll usually close and reopen the request after a message is recieved)

I would have loved this! The earliest chat room I remember was probably using javascript, since I don't remember it being an applet. For some reason I think this was on foxtrot.com (the website for the comic strip), but I could be misremembering. It was associated with the comic, anyway. There was no user authentication, so you could take any name not in use, but it was a faux pas to take someone else's username. When it grew large enough I could no longer reliably get my desired name, and it had mostly devolved to a never ending "a/s/l?" I left. I wasn't smart enough to figure out IRC by myself at the time.

A look back onto times wonderous and awesome. These early communities had a sort of purity in their chaos.

A publicly accessible space where people were able to truly test the limits of what they were capable of in the medium. Which is admittedly kind of terrifying in retrospect, but you certainly give the impression that the harm that could be caused WAS limited, relatively speaking, due to the tech of the time.

Well, until someone figured out how to break the whole thing wide open, I guess. But even then, I have to wonder if it was done with understanding of the gravity of the action.

thank you for sharing this. i never got to experience those days but i love learning about one

(though i did experience the joy of unsanitized html chats when my friend built a chatroom back in high school, and there really was something beautiful about it)

I was on the early Internet at way too young an age. My mom was in some of the very first Internet chat rooms, and I found them through her. They were the kind you manually had to refresh to get new messages from, though! But this sounds WAY more like the wild wild west the rest of the Internet was... absolutely fascinating! Thank you so much for sharing.

If anyone wants to replicate this, I have some good news.

If you don't know, matrix is an open source chat app that's very similar to discord in functionality, but it's federated like mastodon. So anyone can make a client, and implement it however they want, as long as they follow the standard. And anyone with a matrix account anywhere can log onto any matrix client.

A friend of mine made their own matrix client: https://horrible.site/matrix/login.html

Log into this, and you can chat with anyone on matrix. But it will insert all text directly into the page as html, allowing similar shenanigans to geocities chat. It's all sandboxed in an iframe, and JavaScript is off so it's complete safe.

This isn't exactly like geocities chat, but I hope it gives some people a similar feeling.

That's amazing. Unfortunate it takes l/p directly and you can't use something like an OAuth token to sign in. Do you know if this happens to be open source? Maybe I could write a OAuth PR, lol

I have seen another chat that was technically similar - attached to furry pornographer Mama Bliss's website, of all things - but nobody there ever did anything with HTML. We were there to horn on one another, not to hack a website.

I didn't use this, but it is reminding me of when I was a kid and using AIM groups which let everyone customize their text (a feature that is basically nonexistent in any chat these days without a bunch of extra work - fair, I guess, to not torment people with vision problems who can't read your damn bright yellow font, but I feel like that's a self-correcting problem, since if the guy with the bright yellow font refuses to change it he's not staying in that group long these days) and learned basic HTML when designing my pet pages on Neopets, which was the first time I had access to something that I could modify all I wanted. That was fun and made me feel Cool and like I had Learned A Skill. It's kind of sad I never pursued coding.