TLS 256 Colours Unicode / UTF-8 Multiplex Context Language tags Proportional text

Cryosphere/MusicMUD Protocol stuff

Cryosphere/MusicMUD is a pioneer of the use of new technology in the traditional MUD ecosystem.

Our 2003 source release (caution: please use the modern version on GitHub instead for anything other than reference) already included Unicode support with UTF-8 and transcoding to multiple codepages; and support for the xterm-style 256 colour modes, TLS connections (telnet-over-TLS) followed later in 2003.

We are the first known MUD (to us) to support any of these. If you know otherwise, tell us and I'll edit this!

In addition to boasting, we've also got a bunch of new tricks to show you! This page acts as a central clearing-point for documentation regarding them.

TLS

TLS (Transport Layer Security) is an essential part of the modern internet. Appropriate use of TLS guarantees that the contents of connections can not be intercepted by third parties, either for reading (snooping/sniffing) or altering (spoofing-man in the middle attacks).

The traditional MUD protocol, telnet, does not have any facility to avoid this. We agree that MUD use is niche enough that the likelihood of being specifically targetted is low compared to many parts of the internet; but we think TLS is important for several reasons: the principle of good practice, reputation; but additionally the fact that packet sniffers on public wifi networks DO exist, and DO look for unencrypted passwords in plaintext in any protocol.

Internal commit history dates our TLS (then known as SSL) support to May 2003. It did not make the public source release of that year, but external evidence on the wayback machine demonstrates it was documented by December 2003.

At the time we adopted telnet-over-TLS on the basis that it was more suited to MUDs than ssh; we see the line-based default of telnet alongside the large array of conventions and protocols around it in MUDs as a positive.

We also added support for it to our in-house client crystal, also in May 2003, which in turn may be the first MUD client to support TLS. IP information is provided to the server by use of the PROXY protocol.

We continue to support TLS, but now have removed direct support from the codebase and instead use stunnel to provide a wrapper on our deployment machines. This is relatively easy for a sysadmin to set up, and you already need to automate key renewal to have your website continue to display in Chrome going into the future.

256 colours

This can be observed in our 2003 source release.

Internal commit history shows that we added this in 2002.

We cannot claim to be an early-adopter of the later "TrueColor" standard, but we did add it in 2025.

Early example of 256 colours in Crystal, the so-called "rainbow vomit" represents a psychdelic effect active on the player.

Unicode/UTF-8

One of our developers was involved in initial efforts to port the GNU/Linux/X/Gnome environment to be able to use UTF-8 in the late 90s.

Internal commit history shows a player mode to select Unicode output was first added in early 2001.

Originally this was solely a player option, with some automatic overrides for certain clients based on detected terminal type. The CHARSET telnet option was investigated but at the time no client support for it existed, even in standard linux telnet.

By the time of the source release in 2003 this had grown to support for several then-common codepages (latin1, cp850, cp437, koi8r, macroman, windows-1252), and decoding and encoding them for players, along with a wcwidth() implementation. current versions have many more encodings, a large table of fallback characters for Unicode characters; and have moved to UTF-8 as the source and execution character set.

In our 2025 update we support the CHARSET option for negotiating UTF-8, along with the MTTS terminal-type convention, which provides a bit for the client to tell the server that the client is expecting and providing UTF-8.

telnet 'multiplex' extension

Baby's first telnet option dates to 2002 - and is analagous to MXP <frame>, but terminals. I don't know if I'd actually do this as a telnet extension these days. Crystal is probably the only client to support this.

Example of the use of MPLEX in crystal, providing an in-client overlay for a board game being played.

telnet 'context' extension

In 2025 as part of improving our CI system we had the problem of reliably determining which commands corresponded to which responses, to increase the speed at which tests could be run without causing unacceptable test flake.

In order to do this we invented a new telnet extension extension for commands and responses to be tagged with an unique ID.

We have a little writeup of the exact mechanism.

OSC639 language tags

MusicMUD/Cryosphere can use OSC 639 to tag language codes

for example,

As this is an experimental feature, it will only do this if it detects Chrysalis web client, or if OSC639_LANGUAGE is set to 1 via the NEW_ENV telnet option.

These codes could be full IETF language tags

The OSC639 language property is supposed to survive a reset of general ANSI state such as by ESC[0m

Proportional Text

MusicMUD/Cryosphere is prototyping a system for the use of natural, flowable, proportional text in MUDs without breaking the existence of tabular data. This is mostly done in an experimental branch of Chrysalis, our web client, and consists of a proportional on/off toggle, and an experimental structured table format.

In this branch we have assigned two new SGR codes to "proportional" and "nonproportional" text - This allows the server to mark text that must be displayed in monospace - such as ASCII art or non-converted tables appropriately.

Early experiments suggest that perhaps these should not be SGR codes and should be something else, which would survive an SGR reset. We have also subsequentently discovered that these particular SGR codes already clash with existing private uses, and are likely to move them anyway. Any precedent we can find in other existing terminals or terminal emulators would be wonderful although unlikely.

We have also developed a system allow tables to be sent for client-side layout of tabulated data with proportional text into, for example a <table> element in a HTML DOM, or other client-specific mechanism.

This was originally delivered by GMCP but now on the branch delivered using a new OSC code - 7500.

Colour information within this is sent as simple ANSI codes on the basis that a mud client likely aleady has an ANSI parser. This is tenative but we would be very interested in your thoughts on the overall approach and how it might better suit other needs.

Cryosphere has another, less obvious requirement for proportional text and layout, in that we use nested margins for text. In normal terminals we do this simply by padding the output with enough spaces, but in a reflowable context, let alone a proportional one this does not work. We use a private SGR code emitted at the point at which indentation should return (the opening of the quote, the start of the text after a bullet point, etc), to mark the indentation level.

Examples: ASCII arttable