It takes its basis and functionality heavily from PennMUSH and its brethren with the intent of a compatibility layer.
SharpMUSH is a modern iteration of the time-tested MUSH frameworks. It provides a layer of compatibility for PennMUSH for transferability, and builds a modern tech landscape around it that does away with many of the limitations that have made MUSHes harder to use, without losing what makes them great.
You can find our documentation here: SharpMUSH Documentation. This features such elements as our Compatibility, Installation, and API documentation, and how to download SharpMUSH and get up and running!
Currently, there is no Release Candidate for SharpMUSH. We are still in the early stages of development, and are working on getting a stable release out.
SharpMUSH is available as Docker images on DockerHub:
sharpmush/sharpmush-server- Main serversharpmush/sharpmush-socketserver- Stable telnet/WebSocket socket ownersharpmush/sharpmush-connectionserver- Replaceable rendering worker
For information on setting up automatic DockerHub publishing when new versions are released, see DockerHub Setup Guide.
- Install .NET 11 — SDK 11.0.100-rc.1 or newer, as pinned in
global.json - Install Docker Desktop
Build with:
dotnet buildRun the tests with:
dotnet testNote: Test telemetry output is disabled by default to reduce console noise. To enable telemetry metrics during test runs, set the environment variable:
export SHARPMUSH_ENABLE_TEST_TELEMETRY=true dotnet test
The main entrypoint to set as a Startup Project is SharpMUSH.Server.
For full integration, run SharpMUSH.SocketServer, which owns client sockets, and SharpMUSH.ConnectionServer, which renders output over a shared Unix socket. The local Compose stack wires all three processes and persistent NATS storage:
docker compose up --buildWhen launching projects separately on Linux, set Rendering__SocketPath to the same writable path (for example /tmp/sharpmush-render.sock) for both SocketServer and ConnectionServer, and provide NATS_URL to SocketServer and the main server. For quick images from Release binaries, use Dockerfile.socketserver.local for SocketServer and Dockerfile.connectionserver.local for the renderer; mount their shared socket directory.
See connection updates and recovery for migration and restart behavior. The development Kubernetes manifest keeps SocketServer and renderer in one Pod: updating either image replaces that Pod and drops sockets. Use the single-host Compose deployment for independent renderer updates that retain client sockets.
Additionally, a Blazor web client is available at SharpMUSH.Client.