A starter Dynamic Application (Area 21) for SharpMUSH. An application is two packages working together:
routes/(kind: softcode) — the HTTP-handler attributes that serve the form schema (GET) and handle the submit (POST). These attach as backtick children of the bundledhttp-handlerverb routers.app/(kind: application) — the portal registration that turns those routes into a live page at/apps/example. It owns no objects; itdepends:onroutes/and carries only theapplication:block.
This mirrors the engine's chargen / chargen-app example pair. See the
extensibility overview
and the package manifest reference.
example/
├── index.yaml # repo index: both packages, for fast discovery
├── routes/
│ └── package.yaml # kind: softcode — schema (GET) + submit (POST) routes
├── app/
│ └── package.yaml # kind: application — portal registration, depends on routes
├── README.md
├── CHANGELOG.md
├── LICENSE
└── .github/workflows/
└── validate.yml # CI: validates both package.yaml files
Add this repo as a remote (/admin/packages) and install example-app. The
manager:
- resolves the
example-routesdependency (the plan is blocked until the routes package is installed — install it first, or let the resolver fetch it), - prompts for
access(the minimum portal role — a{{?configure}}ref), and - registers the application, so
/apps/examplerenders the schema and the nav gains an entry for the chosen role and up.
Uninstalling example-app removes the portal registration; the routes stay
until you uninstall them too (and the manager blocks uninstalling routes while the
app is present).
- Set the package ids,
authors:,description:,homepage:, theLICENSEcopyright line, and theyour-github-userinsource:repo URLs. - Replace the sample
subject/bodyform fields inroutes/package.yamlwith your real schema, and the submit validation with your real rules. - The route attribute paths are UPPERCASE backtick segments
(
GETexample_UPPERSCHEMA); keep them in sync withschema_url/submit_routeinapp/package.yaml.
Each package is released independently as a git tag <package-dir>/v<semver>:
routes/v0.1.0
app/v0.1.0
Release tags are immutable — never move or delete one; republish a fix as a
new version. Bump each version: to match its tag before tagging.