A node.js based MUD engine
JavaScript Shell
Latest commit 572c45e Jan 16, 2017 @seanohue seanohue committed with Scrap invalid tests and replace with a tiny example test so that npm …
…test does not explode. (#88)



NodeJS based MUD engine

See the staging branch for the latest features.

Ranvier is not a websocket MUD. It does not have a web client. It is a plain ol' fashioned telnet MUD. Any client you use to connect to the MUD you played 15 years ago will work with Ranvier.


  • Robust bundle system: Nearly every aspect of the game can be modified without changing the core and allows for easy packaging and sharing of commands/areas/items/npcs/channels/behaviors.
  • Scripting support: It's in Javascript! No need for a shitty DSL. The codebase is javascript, the scripting is javascript.
  • Scripting is event-based. Put a listener in the script attached to your mob and it'll automagically happen when the event is emitted. Adding new events is easy as npc.emit('eventName'); See documentation on node event emitters for more.
  • Pfile saving in JSON, easy to parse for external usage.
  • Rooms, items, and npcs are easily described in yaml. No weird bullshit ~~~~ and byte-specific parsing that requires a GUI editor to build.
  • Arbitrary room exits custom to each room not locked into n/s/e/w and it's not a pain in the ass to add them.
  • Did I mention it's in blasting Javascript? No compiling, no C, no cygwin, no 15 year old spaghetti code.
  • Leveling, passive/active skills, effects.
  • Flexible channel system.
  • Incredibly simple-to-add commands.


  • NodeJS >= v7.1.0

Up and running

git clone git://github.com/shawncplus/ranviermud
cd ranviermud
npm install
sudo ./ranvier -v --save=10 --respawn=10

Connect to the server using telnet localhost 23



  • Respawn
  • "Hotboot" - Reload anything from a bundle. Changing core will require a restart
  • Rewrite script attachment to entities with the new bundle loader
  • Implement containers
  • Implement equipping (allow configuration of valid slots)
  • Implement some kind of helper for time-based events
  • Refactor/rewrite entity loading

    • Completely new bundle system in place
  • Clean up object handling code (item_util, get, put, containers, equipment, inventory, etc)

    • Object handling rewritten from scratch
  • Revisit localization

    Localization removed

  • Implement global config file to allow sweeping changes without changing code

  • Completely rewrite helpfiles
  • Refactor channels to have types that will allow things like yell vs chat

    • Channels were completely rewritten


  • Add and emit server events that bundles can bind to in server-events/ that will effectly relace the old plugin/ infrastructure
  • Using the new server events create a core-api bundle that provides a web api with authentication against player accounts and allows access to game data based on account privileges. To be used with Sheath
  • Remove/refactor doors
  • Remove sean's skills
  • Remove examine
  • Fix effects to only serialize options, not the entire effects array
  • Remove/move/refactor combat_util/rtcombat

Nice to have

  • Update help to autogenerate usage for channels
  • Update help to allow data like skill cost as tokens