Est. 1996 Beginner

DragonSpeak

The plain-English trigger language of Furcadia, where every script line is a numbered sentence in the form (0:#) cause, (1:#) condition, (5:#) effect - a scripting language built so that children could program a virtual world.

Created by David "Dr. Cat" Shapiro (Felorin), at Dragon's Eye Productions

Paradigm Scripting; declarative event-driven rules built from cause / condition / area / filter / effect lines
Typing Untyped source text with distinct runtime storage classes - 16-bit signed integer variables, message strings, arrays, and a persistent PhoenixSpeak store
First Appeared 1996 - shipped as part of Furcadia, which opened to the public on December 16, 1996
Latest Version Script files carry the header DSPK V04.00; new DS lines continue to arrive with Furcadia client updates, most substantially the DragonSpeak expansion shipped with Update 31a on August 3, 2016

DragonSpeak is the scripting language of Furcadia, the free-to-play online social world that opened on December 16, 1996 and has been running ever since. It exists to answer a narrow question - how do you let a player who has never programmed anything make their own map do things? - and the answer it settled on is unusual enough to be worth studying on its own terms. A DragonSpeak program is a list of numbered English sentences. Each sentence is drawn from a fixed catalog, each carries a code like (0:7) or (5:200), and the parser reads only the digits. The English is for the human.

The result reads less like code than like a set of house rules:

(0:9) When a furre arrives in the dream,
     (5:200) emit message {Welcome, [FURRE]!} to the triggering furre.

That is a complete, working DragonSpeak program.

History and Origins

DragonSpeak comes out of Dragon’s Eye Productions, the studio founded in 1991 by David Shapiro - Dr. Cat to the industry, Felorin in-game - a former Origin Systems developer, with artist ‘Manda, known online as Talzhemir. The studio’s first title was DragonSpires, a DOS-based graphical MUD limited to the 16 EGA colors and one of the first graphical MUDs on the internet, launched in the mid-1990s; published sources give the date as either 1994 or 1995, and it went offline around 1996. Furcadia was its remake, rebuilt on a 256-color VGA palette, and the design bet that distinguished it was that the players, not the studio, would build the world.

That bet needed a scripting language, and the constraint on the language was social rather than technical. Furcadia’s audience was not developers. It was a general-audience social world with a young player base, and any scripting system that required learning a conventional syntax would have limited world-building to the small fraction of players who already programmed. Shapiro’s answer was to remove syntax from the problem entirely. Community documentation makes the target explicit, describing DragonSpeak as deliberately aimed at a very young audience and noting reports of children as young as five successfully writing DS for their Dreams.

The name is a nod to the studio and to DragonSpires; the language itself is universally called DS by the people who write it.

Design Philosophy

Three commitments shape everything about the language.

A script is a set of triggers, not a program. There is no main routine, no call stack in the conventional sense, and nothing resembling a top-level flow of control. A DS file is a flat pile of independent rules. The engine watches the world, and when something happens that matches a rule’s cause, the rest of that rule fires. Authors think in terms of “when this happens, do this,” which is a model that transfers directly from how people describe games to each other out loud.

Every statement comes from a catalog. You do not compose expressions; you pick a line. The bundled DragonSpeak Editor ships a searchable list of every available line organized by category, so writing DS is closer to selecting from a menu and filling in blanks than to writing free-form text. This eliminates the entire class of errors that stops beginners cold - misplaced punctuation, unbalanced brackets, misspelled keywords - because there is nothing to misspell that matters.

The numbers are the language; the words are documentation. The engine parses only the numeric characters 09, ignoring everything else unless a parameter explicitly takes a text string. (5:8) play sound 32 to whoever set off the trigger. and a bare 5 8 32 mean the same thing to the interpreter. The English prose exists so that a script stays readable to the person who wrote it six months earlier, and so that a beginner can read someone else’s Dream and understand it without a reference manual. It is an unusual inversion: most languages make the human-readable form authoritative and generate the machine form; DragonSpeak makes the machine form authoritative and treats the readable form as a comment that happens to surround it.

Key Features

The five categories

Every DS line belongs to one of five numbered categories, and the category number is the first half of the line code.

CodeCategoryRole
(0:#)CausesWhat sets a trigger off - moving, turning, speaking, emoting, entering the Dream, a timer expiring
(1:#)Additional conditionsNarrows the cause - the player’s gender, species, held items, position, variable values
(3:#)AreasRestricts where on the map the effects apply
(4:#)FiltersFurther restricts an area by floor type, item type, or walkability
(5:#)EffectsWhat actually happens

A trigger must begin with a cause. Conditions, if any, come next, then any number of areas, filters, and effects. Only a cause and at least one effect are required.

Areas and filters compose differently, and the official reference draws the distinction carefully: declaring a new area replaces the previous one, while filters stack cumulatively, like laying transparency sheets on top of one another. Effects execute in sequence, and the screen is normally redrawn only once the whole sequence completes - unless the script explicitly interrupts with a (5:1000) redraw.

File format

A DragonSpeak file begins with the line DSPK V04.00 Furcadia and ends with *Endtriggers* 8888 *Endtriggers*. Both are generated by the editor. Comments start with an asterisk. The script lives in a .ds file alongside the map’s .map file and travels with the Dream when it is uploaded.

Script size is capped, and the cap is part of Furcadia’s freemium model: the official reference limits free Dreams to 8,000 DragonSpeak lines, while purchased group packages raise that to 20,000. Blank lines and comments do not count against the limit.

Worked examples

The official beginner tutorial builds up from the simplest possible trigger:

(0:1) Whenever somebody moves,
     (5:8) play sound 32 to whoever set off the trigger.

Narrowing the cause to a specific tile:

(0:2) When somebody moves into floor type 146,
     (5:8) play sound 45 to whoever set off the trigger.

Multiple effects under one cause:

(0:7) When somebody moves into position (20,10),
     (5:4) place Item type 31.
     (5:8) play sound 32 to whoever set off the trigger.

A door - which is to say, the single most common thing anyone builds in DS:

(0:7) When someone moves into position (22,30),
     (5:15) move the triggering furre to (30,35), or to someplace nearby if it's occupied.

And a trigger combining a cause with two conditions, from the reference:

When someone turns, and they are male, and they are a Squirrel,
     emit message {Show me your nuts!} to the triggering furre

All conditions on a trigger must hold simultaneously for the effects to fire.

Variables, strings, and arrays

Underneath the plain-English surface is a small but real runtime. Variables carry a % prefix and hold signed integers in the range -32768 to +32767 - a 16-bit range, and an authentic constraint rather than a stylistic one; the documentation warns that operations pushing a value out of that range give unexpected results. The reference documents a limit of 500 variables per Dream, each capable of holding two integers accessed through .x and .y modifiers, which makes coordinate handling natural. Variable names may contain letters, digits, and underscores.

Strings, called messages, carry a ~ prefix and, according to the reference documentation, hold up to 4,096 characters each within a total budget of roughly 32,000 characters per Dream. Arrays are built on either variables or messages and must be initialized before use.

(5:300) set variable %playerScore to the value 100.
(5:384) set variable %location to the x,y position (5,10).
(5:270) set message ~playerName to {Alice}.
(5:276) use message ~songList[5] as an array, and set entry 0 of it to {song_m4}.

Even here, the shape of a statement never changes: a line number, a sentence, and the values filled into its blanks.

PhoenixSpeak

Variables vanish when the Dream shuts down. PhoenixSpeak, addressed through ordinary (5:#) effect lines, is the persistence layer that does not - a database of entries attached either to the Dream itself or to individual characters.

(5:605) memorize that the PhoenixSpeak info {playerStats} about this Dream will now be {50}.
(5:612) remember the PhoenixSpeak info {playerStats} about this Dream, and put it in variable %result.

The official documentation describes stored player data surviving not only a player leaving and returning, but the Dream being taken down and re-uploaded days or weeks later. That single capability is what separates a Furcadia Dream from a chat room with scenery: it is what lets a Dream run a persistent RPG with character stats or a leaderboard that means something.

Interface and timing

The language reaches further into the client than a first look suggests. DragonSpeak Buttons can be shown, hidden, and repositioned per player, giving Dreams custom UI. Timers come in several forms - a recurring (0:100) When # seconds have passed, offset by #, a wall-clock (0:101) When the time is #:# FST keyed to Furcadia Standard Time, and countdown timers via (0:50) When countdown timer # goes off, which the reference numbers from 1 to 999 while advising authors to stay within 1–99. Messaging distinguishes emits scoped to the triggering player, to everyone in an area, and to everyone on the map. Entry codes let a link into the game carry a parameter, as in furc://FurreName:DreamName/42, which a Dream can read and act on.

Tooling

DragonSpeak can be written in any text editor, and experienced DreamWeavers often do. But most DS is written in the DragonSpeak Editor, which ships with the Furcadia client and can be launched standalone from the Furcadia folder or from the Dream Editor’s DragonSpeak menu. Its central feature is the DS Line List: a searchable, categorized catalog of every available line, so authorship is a matter of finding the sentence you want rather than recalling it. It also provides a sidebar for organizing sections and storing templates, standard editing operations, and a DragonSpeak Wizard that customizes prewritten templates with your own values.

Around that, the community built more. IceRealm’s Dream Runtime Analyzer profiles a live Dream by capturing the server traffic a logged-in character receives, then reporting how much of that bandwidth is DragonSpeak versus avatar movement and ranking DS lines and server instructions by how often they fire - a profiler, in other words, for a language whose users are frequently not programmers.

Evolution

DragonSpeak has never had a version 2. Its file header has read DSPK V04.00 for many years, and the language evolves by accretion: new numbered lines are added to the catalog as the game gains features, and existing scripts keep working because nothing is taken away.

The 2012 Second Dreaming Kickstarter, which raised $106,835 from 877 backers against a $55,000 goal, was the largest single push. Among its promises were capabilities that DS authors had wanted for years - areas of arbitrary shape rather than rectangles, and indoor and outdoor regions that could be hidden from each other, appearing when a player enters and vanishing when they leave. Update 31a, which went live on August 3, 2016, and the DragonSpeak documentation that accompanied it added the largest batch of new lines in recent memory: triggers and conditions for lighting and ambience, dream portal events, random placement filtered by lighting or region, animated lighting and ambience cycles with configurable timing, string length and number-extraction functions, and movement rules that require flying or swimming in a region or permit passage through normally impassable terrain.

What the language has never gained is the thing a programmer would ask for first: user-defined abstractions. There are no functions, no user-defined line types, no modules. Reuse happens by copying a block of triggers, or by pulling a template out of the editor’s sidebar. For a language whose entire premise is that the vocabulary is a fixed, human-readable, browsable catalog, adding user-defined vocabulary would undermine the design - and that tension is the clearest limit on how far DS can be pushed.

Current Relevance

Furcadia is still running. It is credited with the Guinness World Record for the longest continually running social MMORPG - Dragon’s Eye Productions dates the award to 2010, though some secondary accounts place the certification later - and its official documentation lists Windows as the primary platform, with Mac and Linux supported through Wine. Its annual festivals still run, and DragonSpeak is still how the Dreams for them get built.

But the language is dormant in the sense that matters for a language rather than for a game. There is no ecosystem outside Furcadia, no standalone implementation, no way to run DS anywhere but inside a Furcadia Dream, no package manager, and no Docker image. The reference documentation is complete and well-organized but has not changed shape in years. New DreamWeavers still learn it; nobody is extending it.

Why It Matters

DragonSpeak deserves attention for a design decision most languages never seriously attempt: it made the syntax un-writable on purpose.

Almost every effort at “programming for non-programmers” attacks the problem by making the syntax gentler - fewer punctuation marks, English-like keywords, forgiving parsers. All of these still require the learner to produce well-formed text from memory, which is the actual barrier. DragonSpeak removes production entirely. The vocabulary is finite, browsable, and searchable; you select a sentence, fill in its blanks, and it is correct by construction. Block-based environments like Scratch would later reach a strikingly similar conclusion through a completely different route - snap-together blocks that cannot be assembled into invalid programs - and DragonSpeak had been running that experiment on a live public audience since 1996.

The trade-off is equally instructive. A fixed catalog means the language grows only when its maintainers add lines, and a 16-bit integer range and hard line caps put a ceiling on ambition. Yet Furcadia’s documentation and community point to chess games, laser tag, shops, and persistent roleplay systems built inside those limits, which says something durable about how much constraint a well-chosen abstraction can absorb.

There is also the plain matter of longevity. DragonSpeak has been in continuous production use, by non-professional programmers, in a live commercial service, for roughly three decades - a record very few scripting languages of any kind can claim. Most languages designed for a single application die with the application. This one outlasted the era that produced it, and it is still the reason a Furcadia door opens.

Timeline

1991
Dragon's Eye Productions is founded by David Shapiro, known online as Dr. Cat or Felorin, together with artist 'Manda, known online as Talzhemir
1994
DragonSpires, the DOS-based, 16-color graphical MUD that served as the direct precursor to Furcadia, is launched by Shapiro. Sources differ on the exact year, giving 1994 or 1995; the game went offline around 1996
1996
Furcadia opens to the public on December 16, 1996, carrying DragonSpeak as the scripting language players use to add behaviour to their user-built maps, which the game calls Dreams
2003
Furcadia is named an Independent Games Festival finalist, according to Dragon's Eye Productions' own facts page. Player-authored content - the maps, patches, and DragonSpeak that players write themselves - had been the game's defining feature since launch
2010
Furcadia is credited with the Guinness World Record for the longest continually running social MMORPG - the year given on Dragon's Eye Productions' own facts page, though some secondary sources date the certification later. Either way, DragonSpeak has been in continuous service as a live scripting language since 1996
2012
The Second Dreaming Kickstarter, running November 14 to December 14, 2012, raises $106,835 from 877 backers against a $55,000 goal to fund a staged renovation of the game. Its stated stretch goals include DragonSpeak-facing features such as arbitrarily shaped areas and separate indoor and outdoor regions that hide each other from view
2016
Update 31a, billed by Dragon's Eye Productions as the biggest Furcadia update ever, goes live on August 3, 2016. Its accompanying DragonSpeak documentation adds large batches of new lines covering lighting and ambience triggers and effects, dream portal events, string length and number extraction, animated lighting cycles, and movement rules requiring flying or swimming in a region
2026
Furcadia remains online and DragonSpeak remains the scripting layer for player-built Dreams, but the language is effectively in maintenance mode - the official references still describe the DSPK V04.00 file format, and change now arrives as occasional new DS lines rather than as new versions of the language

Notable Uses & Legacy

Furcadia Dreams

Every interactive element of a player-built Furcadia map is DragonSpeak. Doors that teleport, floor tiles that play sounds, greeting messages that address arriving players by name, private rooms, shops, and staff-only areas are all DS triggers stored in a .ds file that travels with the map when the Dream is uploaded. Furcadia has run on player-authored content for its entire history, and DS is the mechanism that makes that content do anything.

In-world games

Furcadia's own documentation cites complete games of chess and laser tag as examples of what DreamWeavers build in DragonSpeak, alongside simpler mechanics like opening a door. Because effects can move furres, place and remove items, run countdown timers, and emit messages, a Dream can implement turn-based and real-time game rules entirely in trigger lines.

Persistent RPG systems via PhoenixSpeak

PhoenixSpeak, the database extension addressed through ordinary DS effect lines such as (5:605) memorize and (5:612) remember, lets a Dream store information about individual players that survives leaving the Dream and even the Dream being taken offline and re-uploaded. The official documentation names RPG stats and high-score tables as its intended uses, which is what allows long-running roleplay Dreams to keep character progression between sessions.

A first programming language

DragonSpeak is repeatedly described in Furcadia community documentation as a language a young child can learn, and it is regularly the first thing a Furcadia player ever programs. Because each line reads as an English sentence chosen from a searchable catalog in the bundled editor, learners start by assembling working triggers rather than by learning syntax.

Third-party DreamWeaver tooling

The community has built its own supporting tools around the language. IceRealm's Dream Runtime Analyzer, for example, captures traffic from the Furcadia server through a logged-in character and reports how much of a Dream's bandwidth is DragonSpeak versus avatar movement, alongside frequency tables ranking which DS lines and server instructions fire most often - a profiler, in effect, for authors trying to find the triggers slowing their Dream down.

Running Today

Run examples using the official Docker image:

docker pull
Last updated: