PennMUSH is a C-based MUD-like server, first released in 1992 and still actively maintained.
C Makefile Perl C++ Perl 6 Shell Other
Failed to load latest commit information.
game Allow fraction() to return the whole number portion of its arg separa… Sep 18, 2017
hdrs Make log rotation more robust. Sep 10, 2017
hints Issue 1135 - update the OS X hints file. Sep 10, 2017
po #994 Add git revision info to @version and version(). May 7, 2015
src Allow fraction() to return the whole number portion of its arg separa… Sep 18, 2017
test Add '.' back into @INC for the test harness script. Jul 30, 2017
utils Improve temp file names. Sep 10, 2017
win32 Update Windows 10 readme. Jul 30, 2017
.gitignore Also add *.plist to .gitignore Dec 8, 2016
.travis.yml CI: Use cpanm, and don't break on Perl <5.18. Apr 4, 2016
BUGS Remove Google Code references Mar 19, 2015
CHANGES.174 Tweak changelog. Fixes issue 929. Mar 15, 2014
CHANGES.175 Tweak changelog. Fixes issue 929. Mar 15, 2014
CHANGES.176 Initial google code commit. Jun 2, 2009
CHANGES.177 Tweak changelog. Fixes issue 929. Mar 15, 2014
CHANGES.180 Initial google code commit. Jun 2, 2009
CHANGES.181 Initial google code commit. Jun 2, 2009
CHANGES.182 Create changelog file for 1.8.4. Feb 26, 2010
CHANGES.183 Tweak changelog. Fixes issue 929. Mar 15, 2014
CHANGES.184 Remove hard linewrapping from CHANGES.184 file. Dec 7, 2015
CHANGES.185 Remove hardwrapping from CHANGES.186 and .185. Oct 24, 2015
CHANGES.186 Allow fraction() to return the whole number portion of its arg separa… Sep 18, 2017
CHANGES.OLD Tweak changelog. Fixes issue 929. Mar 15, 2014
COPYRITE Upgrade SFMT to 1.5.1 May 30, 2017
Doxyfile More Doxyfile tweaks. May 23, 2015
FAQ More minor README tweaks. Aug 21, 2015
HACKING.184 Prep work for p9: make indent, bump versions, etc. Feb 3, 2012
HACKING.185 Allow @mail/review to show all sent messages. Fixes issue 935. Mar 25, 2014
HACKING.PE_REGS Fix a typo in HACKING.PE_REGS reported by Qon. Aug 21, 2015
I18N More minor README tweaks. Aug 21, 2015
INSTALL Improve listing specific dependencies for Linux distributions. Feb 26, 2016 Bump version in preperation for 1.8.6p1 release. Nov 30, 2016
Patchlevel Bump version in preperation for 1.8.6p1 release. Nov 30, 2016
README More minor README tweaks. Aug 21, 2015
README.SQL More minor README tweaks. Aug 21, 2015
README.SSL More minor README tweaks. Aug 21, 2015
UPGRADING The 'unescaped comma' error was shown once per unescaped comma, rathe… Sep 13, 2015
aclocal.m4 Update Postgresql config checks. Apr 8, 2015
config.guess Update config.guess and config.sub to Automake 1.15 versions. Feb 28, 2016 Issue 1118: Add configure check for EVP_MD_do_all instead of relying … Jul 30, 2017
config.sub Update config.guess and config.sub to Automake 1.15 versions. Feb 28, 2016
configure Issue 1118: Add configure check for EVP_MD_do_all instead of relying … Jul 30, 2017 Issue 1118: Add configure check for EVP_MD_do_all instead of relying … Jul 30, 2017
confmagic.h Remove some things from confmagic.h Sep 13, 2016
install-sh Also update install-sh to Automake 1.15 Feb 28, 2016
options.h Re-add a blank options.h. Happy, Mike? Sep 13, 2016


                   User's Guide to PennMUSH 1.8.x

Some of this Guide was written by Amberyl, and is used with permission.
Most of it is by Paul/Javelin.  This most recent version has been
updated by Alex/Talek, Javelin and Raevnos.

Installation information can be found in the files INSTALL or
UPGRADING, depending on whether it's a new install or an upgrade.
The file I18N discusses internationalization.

I.    Introduction and history
II.   Getting Help, Reporting Bugs
III.  Getting a hostname and mailing lists
IV.   Miscellaneous
V.    Comments

You may also want to take a look at Javelin's Guide for PennMUSH Gods,

I. Introduction and history

PennMUSH uses a version-numbering system that includes version
numbers (like 1.7.2) and patchlevels (like p32), usually written
together (1.7.2p32).

PennMUSH is a TinyMUD derivative, and one of the branches along the MUSH
line. "Vanilla" TinyMUSH, which added the "v" registers and functions to
the basic TinyMUD building commands, was written by Larry Foard. The code
was later expanded by Jin, of MicroMUSH. In January of 1991, MicroMUSH
changed its name to MicroMUSE, and the code there continued to develop
under the MUSE name. At that same point in time, Moonchilde took the
last public release of that code and began a series of improvements
and extensions.

That code was released as PernMUSH, named for the MUSH that Moonchilde
was running. The last released version of that code was version 1.15,
at the end of November 1991. PernMUSH itself had switched over to
TinyMUSH 2.0, which Moonchilde had co-written with Glenn Crocker
(Wizard of TinyCWRU); there was no longer a reason for Moonchilde to
maintain this code.

In January of 1992, Amberyl began working on the PernMUSH 1.15 code
release, for TinyKrynn. She took over the code, which no one was
supporting, and worked on extending this code, as well as improving its 
compatibility with TinyMUSH 2.0.  She changed the name to PennMUSH (named for 
her school, the University of Pennsylvania), to avoid the confusion that 
resulted from PernMUSH actually running TinyMUSH 2.0.

In January of 1995, Amberyl passed on her mantle to Javelin (aka
Paul@Dune, Alan Schwartz), who continuted as the maintainer of the
primary public distribution in development. He released two patchlevels
numbered "dune-1" and "dune-2" before releasing PennMUSH 1.50 pl11 and
later distributions. The numbering scheme changed again with PennMUSH
1.6.0 (see CHANGES.OLD).

Gradually during the early part of 1995, Alan formed the PennMUSH
development team with T. Alexander Popiel (Talek) and Ralph Melton.
The development process became more formalized, with official patches,
a dedicated bug reporting email address, and better tracking of
outstanding issues and history.

In August of 1997, Ralph Melton left the PennMUSH development team,
and Thorvald Natvig joined as a new member.  Many thanks go to Ralph
who contributed much time, code, and good cheer to PennMUSH.
Since that time, the development team has gained and lost members.
The current membership is usually listed at the top of the
latest CHANGES.<version> file.

In November 2002, with the release of PennMUSH 1.7.6, PennMUSH
began using the Artistic License (see the COPYRITE file),
an open source/free software license. This license was
simultaneously adopted by TinyMUSH (2.2.5, 3.x) and TinyMUX to
facilitate code sharing and widen use.

In July 2006, Javelin retired from the role of Maintainer, passing the
mantle of lead developer to Raevnos and that of release management to
Ervin Hearn (Noltar). Many thanks go to Javelin whose contributions and
guidance of PennMUSH have shaped it into the codebase that it is today.

A MUSH manual should be available at,,, or from wherever you got this code from. The manual
should be numbered version 2.007 or higher.

If you are planning on modifying the source code to PennMUSH, you'll
probably want Javelin's Guide for PennMUSH Gods, which should be
available where you got this code, or, in hypertext, as More recent versions
may be available at



II.  Getting Help, Reporting Bugs

Here are some guidelines about where and how to report bugs or
problems or generally look for help.

There are three places one could get help with a problem:

1. The PennMUSH bug-tracking site is To file a new report,
   click on the 'New issue' link. If you want to get emails about
   updates to the bug report, put your email address in the
   appropriate field. For 'type', please select the most appropriate
   category: Bug, suggested feature, documentation issue,
   build/compliation problems, etc. Be sure to include what version of
   PennMUSH you found the problem on.

   If the problem resulted in a crash and a core dump, a stack trace
   of the core dump should also be included.

   If we need additional stuff (like a log of the configure or make),
   we'll ask for it, but if you know that it's relevant, you can send
   it along, too.

   You can also search to see if anyone else has already reported the
   issue, see what issues have been fixed for upcoming releases, and
   much more at the site.

2. The PennMUSH community portal is at

   There is documentation there about many aspects of working with
   mushes, and after you create an account, you can make blog posts
   asking for help.

3. M*U*S*H, at 4201 is where the devs and many other
   talented folk hang out.


III. Getting a hostname and mailing lists

Thanks to donations from the PennMUSH community, Javelin was able to
register the domain name, and, if you're running a
PennMUSH, you can have assigned as a hostname
for your MUSH, so players don't need to telnet to!

NOTE: A hostname is not the same thing as a site. We don't have
accounts for you to run your MUSH from. You must already have your
MUSH running at or whatever -- we just provide a nice
hostname that will resolve into your current site's IP address.

How do you get a hostname? Go to, and follow the instructions.  It may
take a day or two before the hostname will work.


IV. Miscellaneous

IV.a Announcing when a mush is down

If your mush is no longer running on a given port or server and you
want to and are able to leave a programming running listening on that
port, you can tell people about a new location or other news.


% make portmsg

Then start the port announcer with:

% ./src/portmsg message.txt port#

Any connections to the given port will see the contents of the message
file and then be disconnected after a few seconds.

IV.b Running under gdb

If you start the game through gdb (As opposed to attaching to a
running process) pass the --no-session argument to netmush/netmud to
avoid detaching from the controlling terminal (Done via fork() and
setsid()). If you don't know what gdb is, don't worry about this.

V. Comments

V.a. Amberyl's Comments

These are in the first person.  :)

I've been working with this code for a year and a quarter now.  I can't
claim that it's particularly elegant or inspired; all I can say is that
it works (most of the time), and that I've had fun writing it.  I'm
also hoping that it's quite readable; the sections I've added or
revised tend to be quite heavily commented.

A number of people have been contributed a lot, directly and
indirectly, to PennMUSH; many of them are credited in copyright.h.
Read the file and embarrass them the next time you see them.  ;)

PennMUSH 1.50 patchlevel 3 contains the promised parser rewrite.  A
great deal of the code is derived or directly taken from the TinyMUSH
2.0 parser; credit goes to JT Traub (Moonchilde) and Glenn Crocker
(Wizard) for writing the thing in the first place. In most cases, the
1.50 parser should now be functionally identical to the parser in
TinyMUSH 2.0.9; see the news file for a brief summary of the changes.
Major differences between the 1.50 and 2.0 parsers are almost certainly
bugs, and should be reported to me.

I do have a life, though, and academics/job/social stuff take priority.
Thus, don't get too upset if it takes me a while to add your pet hack.
:)  I'm generally happy to discuss code and life in general, though, so
if you see me on a MUSH, feel free to say hi.

	Enjoy your MUSH.

	      --  Lydia Leong  (
		  "Amberyl" just about everywhere

V.b. Paul/Javelin's Comments

And let me recognize T. Alexander Popiel, Shawn Wagner, Nick Gammon,
Dan Williams, Ervin Hearn III, Ralph Melton, David Cheatham, and Thorvald
Natvig, other past and present members of the PennMUSH development or
porting team.  Working with them is a real pleasure.

I am trying to keep extending the functionality of the server, while
optimizing and rewriting things wherever possible. I'm always
interested in improvements or ideas for the code, as well as anything
you might have done to get it to compile and run on unusual systems.

		-- Alan Schwartz (
		   Javelin at most places

V.c. Alex/Talek's Comments

I would like to thank Ralph, Amberyl, Moonchilde, and all the others
who went either with us or before us.

PennMUSH is the embodiment of many years of hard work by many people.
May it never stagnate.

		-- Alex (