The Best Tech Newsletter Anywhere

Join 350,000 subscribers and get a daily digest of news, geek trivia, and our feature articles.

Text-Based VR: Explore the Pioneering World of MUSHes

A VT-100 terminal on a blue background covered in text.
Digital Equipment Corporation

Can you create virtual reality (VR) with nothing but text? People who MUSH think so! The MUSH game format (which is now 30-years-old) allows online players to collaboratively build text-based online worlds where their imaginations can run wild.

Let’s look at how you MUSH!

The Origins of MUDs and MUSHes

Before graphics ruled the internet, and bandwidth was low and modems screeched loudly, people played text-based online games called “multi-user dungeons,” or “MUDs.”

A MUD is a networked multiplayer game that typically focuses on RPG-style fantasy combat. MUDs later gave birth to “massively multiplayer online role-playing games” (MMORPGs), like Ultima Online and World of Warcraft.

Unlike those games, though, MUDs used only text descriptions of players, enemies, actions, and their environments.

In the late 1970s, fans of the original mainframe version of the text adventure game Zork (called “Dungeon” back then) wanted to create a game multiple people could play simultaneously over a network. The first MUD was launched in 1978. It ran on a DEC PDP-10 mainframe at the University of Essex.

A MUD1 Welcome screen in terminal window.

As MUDs grew in popularity throughout the 1980s, several variations emerged in terms of game styles and codebases (the server software that hosts a MUD). Soon, a few MUDs distanced themselves from combat and became purely social platforms for chatting and experimentation.

In 1989, Jim Aspnes created one of the first socially-focused MUDs called TinyMUD. The following year, developer Larry Foard used TinyMUD’s code as the basis of his own server. He added an in-world programming language and called it “TinyMUSH,” and, thus, MUSHes were born.

The term MUSH is a pun with no fixed meaning beyond wordplay on the term “MUD.” Some people later coined the backronym “Multiuser Shared Hallucination,” but it wasn’t universally accepted.

The Basics: What’s a MUSH Like?

Hands typing on the keyboard of a vintage computer, with a MUSH on the screen.
A MUSH circa 1995.

Like a MUD, a MUSH is entirely text-based. The defining characteristic of a MUSH, though, is someone can extend and program it from within the environment. Prior to this, the room structure of a MUD was either hard-coded in a compiled language (such as C), or by editing configuration files and restarting the server.

On a MUSH, players can build rooms and link them together. One way they can do this is by using in-world commands (such as “@dig” to build a room). Another is via program interactive environments that use an internal scripting language called “MUSHcode,” which runs within the game environment in real-time.

Structurally, MUSHes are divided into rooms, objects, players, and exits. Rooms are basic locations with their own descriptions. Objects move around within rooms and other objects. Players are the people connected to the game (basically, live objects). Exits are the links that connect everything.

When you first connect to a MUSH, you see a description of your environment and a list of objects or players in that location. You can use built-in commands, such as “look” or “say,” or custom commands programmed by other players, to interact.

Why MUSH Today?

A CaveMUSH room in a terminal window.

The administrators who run MUSHes are known as wizards. Each MUSH server (or game) is a virtual playground for your imagination. They usually have a specific theme, such as Transformers, Tolkien books, or vampires. Some players roleplay a character within the setting and live out a fantasy life of their choice.

Other games are more open and experimental. On a social/coding MUSH (like mine), you’re free to build whatever you want. The community values creativity and good conversation.

I MUSH (the term is used as a verb, too) because it’s the ultimate form of linguistic creative expression. It’s a programmable text environment in which I can build any location I’d like to visit—and my imagination is the rendering engine, just like when I read a book.

It’s also a deeply social experience. I first connected to a MUSH in the fall of 1994. I made friends back then that I still have today. We check in with each other almost daily on CaveMUSH, the MUSH I started in March 2000. These days, we use it the same way others use Slack or Discord.

You’re invited to visit CaveMUSH—let’s walk through how to do it.

How to Use a Web Client to MUSH

MUSHes traditionally use the telnet protocol for communication. You can connect to just about every MUSH via the telnet client of your choice. If you’re more advanced, you can visit my CaveMUSH here: cavemush.com port 6116.

However, for most people, finding and setting up an ideal telnet client can be a lot of work. Telnet is generally deprecated in favor of SSH, so it can be hard to find a client that supports a good MUSHing experience.

Instead, we’ll use a handy telnet client called MudPortal to connect to CaveMUSH. It works in any web browser, including Safari, Firefox, Edge, or Chrome.

First, connect automatically to CaveMUSH via MudPortal; you’ll see the screen shown below.

The CaveMUSH First Connect Screen on MudPortal.

Before you can use a MUSH, you have to create a player account. Most MUSHes are completely free to play, and you can do so anonymously with no strings attached—quite a contrast to the modern era.

Think about what you want your username to be. On CaveMUSH, people tend to choose short, whimsical handles, like Dream or Mad (mine is RedWolf).

Once you decide on a name, click “Type a Command” near the bottom of the page.

Type the following, where [username] is the name you want, and [password] is your chosen password, and then press Enter:

create [username] [password]

A "create Geekman geeky" command to create a player account on CaveMUSH.

Be sure to write down your password so you won’t forget it. The text box is how you’ll interact with the MUSH from now on. You just type commands and then press Enter.

Next, a bunch of text rapidly scrolls on the screen. The most recent output will be at the bottom of the screen, while the older information scrolls upward and off-screen.

The CaveMUSH first-connect instructions.

At first, you see the description of a room called “Old Well” in gray text.

To see the MUSH in color, type @set me=ansi , and then hit Enter. You see the message “Set,” which confirms the command was successful.

Now, you can type look (or the shortcut l) and press enter to look at the room.

The CaveMUSH "Old Well" room with the descriptive text in color.

Like Dorothy opening her eyes in the land of Oz, the MUSH is now in technicolor. Congratulations—you’re in!

In a basic room layout, you see the name of the room at the top, the room’s description, the list of the room’s contents (all objects and players in the room), and a list of exits that lead to other rooms.

The next time you connect to the MUSH, type the following using the username and password you created above:

connect [username] [password]

This way, everything you do or build on the MUSH will be saved to your account.

First Steps in a MUSHy World

Now that you’ve seen your first room, let’s try saying hello. Type say hello in the text box and hit Enter.

The "say hello" in the text box on CaveMUSH.

You see the result onscreen. If there are any active players in the room, they might reply. Generally, only players in the same room will see the results of your say command.

However, you can also talk on the MUSH-wide chat called the Public Channel. To do so, type the following, where [message] is what you want to say:

pub [message]

Players in every room will see this message.

You can also use the look command to see a description of objects in the room. To do so, type the following:

look [object name]

A "look ivos" command to look at a player on CaveMUSH.

To move around the MUSH, you use exits. On CaveMUSH, almost every exit has a shortcut behind its name in angle brackets (<>). When you type the shortcut and press Enter, you move through the exit into another location.

To go through the “Hole <H>” exit and enter another room, type “h” and press Enter.

The "h" command to climb into a hole in CaveMUSH.

You move into the Cave Nexus (#3), which is the basic hub of the entire MUSH.

From here, you’re free to explore the MUSH, talk to other people (type WHO to see a list of connected players), and use exits to explore what other people have built. Don’t forget to use the pub command to say “Hello” to RedWolf on the Public Channel.

CaveMUSH has players from all over the world. While they might not all be active at the same time, they tend to stay connected 24 hours a day, if possible. That way, they can catch up on messages they might have missed.

The following are a few other basic commands you can use:

  • Type i to see your inventory.
  • Type get [object] to pick up an item in your location if it isn’t locked.
  • Type drop [object] to drop an item in your location if it isn’t locked.

General MUSH Command Cheat Sheet

We can’t cover every MUSH command here, but we’ve compiled a list of some of the most important ones. Again, to send any of the commands below, just type them and press Enter:

  • See colors: @set me=ansi. You only have to do this once after you create your character.
  • Access the Help menu: help or help [subject]. You can request help on just about any command or topic.
  • Look at your surroundings: look
  • Look at a particular object or player: look [object]
  • Pick up an unlocked object: get [object]
  • Drop an unlocked object: drop [object]
  • See what you are carrying: i or inventory
  • See a list of online players: WHO
  • Talk to people in the same room: say or a double quotation mark ("), followed by what you want to say.
  • Send a private message to another player: page [player]=[message]
  • Teleport home if you get stuck: home. (On CaveMUSH, you can also type @home to teleport back to the main hub room, the Nexus.)
  • Teleport to a specific room or object: @tel [number]. The destination must be owned by you or set to JUMP_OK.
  • Set your player description: @desc me=[description]. This is what others see when they look at you.
  • Travel through exits: You can either type the full exit name or its shortcut (located after its name) between the angled brackets (< >).
  • Disconnect: Type QUIT to gracefully exit MUSH.

A Few MUSH Building Tips

The "@dig" command on CaveMUSH.

Every object, room, player, or exit on a MUSH has a unique database reference number called a “dbref.” This allows you to reference any of these from anywhere on the MUSH—even if you’re not in the same room. After the name of any objects you own, you’ll see its number.

You use this information when it’s time to build. Each room or object you build costs 10 gems of in-game currency, and exits cost one. The costs were meant to curb excessive building. In the ’90s, computer memory was limited and MUSHes actually taxed their host machines. Now, if you need more money to build, just ask on the Public Channel.

Again, a complete guide to building on a MUSH is beyond the scope of this basic article. Remember, you can also type help [subject] for a more detailed explanation of how each of these commands work.

Type any of the following basic commands, and then press Enter:

  • Create an object: @create [object name]. Each object costs 10 gems to build.
  • Create a room: @dig [room name]. Write down the room number (dbref) the MUSH gives you so you can go there. Initially, it will be unlinked and floating in the middle of nowhere. Each room costs 10 gems.
  • Visit a room you just created: @tel [room number], using the number you wrote down after you built it.
  • Describe a room: @desc here=[description]. On CaveMUSH, we use @ldesc here=[description] , which matches our custom room formatting.
  • Open a one-way exit to a room from your current location: @open Exit Name <EN>;en=[room number]. You must either own the room you’re making the exit to, or the room must be set to LINK_OK. Exits are slightly complex, so type help @open to get more details on how they work.
  • Set the description of an object: @desc [object]=[description]. This is what players see when they look at your object.
  • Learn about flags: help flags. These control how players interact with objects, rooms, exits, and each other.
  • Set flags: @set. Type help @set for more information on this.
  • Learn how to lock objects and exits: help locks. These prevent people from taking objects or using exits if you don’t want them to.

A Word about MUSH Programming

An example of MUSHcode.

Programming on a MUSH is optional. Many people avoid it, and with good reason. Modern MUSHcode programming somewhat resembles LISP in syntax. People who are familiar with programming languages like C or JavaScript generally find MUSHcode obtuse to work with. It can be daunting to learn and maddening to read, but it suits the real-time environment well once you get used to it.

MUSHcode uses nested functions to evaluate lists. Players typically store the code in custom attributes on objects and use custom commands to trigger it. Code can also be baked into descriptions to generate dynamic results when players look at objects.

So you can see what it looks like, the following short line of code uses functions to generate a list of every object in the current room and displays their names. The @emit command evaluates it and shows the results to everyone in the room.

It looks like this:

@emit [iter([lcon(here)],[name(##)]%r)]

If you’re interested in learning more about programming, type help functions, help user commands, and help &.

To see a larger example of what MUSHcode looks like in a functional program, just type examine #9802 when you’re logged in to CaveMUSH. You’ll see the code of an object that allows a two-player game of Checkers.

More MUSHes Are Out There

Mud Connector currently lists almost 100 MUSHes online and ready for exploration. Every listing has a link, so you can connect and play via your web browser, just as you did above. Most of the commands you’ve learned here will work in other MUSHes.

However, as you visit other servers, keep in mind each system is an independently-operated playground with its own culture and customs. You’re there at the whim of the wizards (administrators) who run it. So, until you settle in, consider yourself a tourist in a foreign country—step lightly, and always be kind to the locals.

Happy MUSHing!

Benj Edwards Benj Edwards
Benj Edwards is a Staff Writer for How-To Geek. For over 14 years, he has written about technology and tech history for sites such as The Atlantic, Fast Company, PCMag, PCWorld, Macworld, Ars Technica, and Wired. In 2005, he created Vintage Computing and Gaming, a blog devoted to tech history. He also created The Culture of Tech podcast and regularly contributes to the Retronauts retrogaming podcast.
Read Full Bio »

The above article may contain affiliate links, which help support How-To Geek.
How-To Geek is where you turn when you want experts to explain technology. Since we launched in 2006, our articles have been read more than 1 billion times. Want to know more?


The Best Tech Newsletter Anywhere

Join 350,000 subscribers and get a daily digest of news, comics, trivia, reviews, and more.