A starter softcode package (kind: softcode) for SharpMUSH.
A softcode package is a declarative YAML description of game objects + attributes
(and, via @function, global softcode functions) that the package manager
installs, upgrades, and uninstalls at runtime — no C#, no recompile. This is the
home for game policy: permissions, formatting, content.
See the extensibility overview
for where this layer sits, and the
package manifest reference
for the full package.yaml format.
example-package/
├── package.yaml # the manifest: one object, a $command, a global function, AINSTALL/STARTUP
├── README.md # this file
├── CHANGELOG.md
├── LICENSE # MIT placeholder — replace the copyright line
└── .github/workflows/
└── validate.yml # CI: validates package.yaml on every push/PR
- Rename the package directory and set
package:to your slug (lowercase, digits, hyphens, ≤64 chars). - Set
authors:,description:,homepage:, and theLICENSEcopyright line. - Replace the
starter_objectwith your real objects/attributes. Write every MUSHcode value as a block scalar (|-) indented with spaces. - Use the
AINSTALL/STARTUPconvention for any global@functionregistrations (register once at install, re-register on every boot — the registry is in-memory).
Add this repo as a remote in the admin panel (/admin/packages), then install
example-package. The server computes a changeset against the live DB, a wizard
reviews it, and only then is anything written. Upgrades use three-way merge; every
apply is a revision you can roll back.
Releases are git tags named <package-dir>/v<semver> (the Go-modules monorepo
convention), so one repo can hold many independently-versioned packages:
example-package/v0.1.0
example-package/v0.2.0
The version list a game sees is the tag list; installing a version checks out its
tag; HEAD is the development channel. Release tags are immutable — never move
or delete one; republish a fix as a new version. Bump version: in package.yaml
to match the tag before you cut it.
git tag example-package/v0.1.0
git push origin example-package/v0.1.0