Soulcraft Platform

Kits, delivered
instantly.

The Kit Registry for the Soulcraft platform. Publish once, available everywhere — Venue, Workshop, and Academy load kits over HTTP. No npm publish, no redeployment.

Browse Kits
How it works
Three steps. Zero downtime.
1

Build your kit locally

A kit is a kit.json manifest plus template files, skills, and optional station bundles. Develop and test with Forge's dev server.

2

Publish to the registry

Run forge publish ./my-kit. The CLI validates your manifest, packs a .sck archive, and uploads it to the registry.

3

Products load over HTTP

Venue, Workshop, and Academy call sdk.kits.load(). The SDK fetches the archive, unpacks it locally, and caches with ETags.

Why not npm packages?
An honest comparison.
npm packageGit submoduleForge Registry
New kit availablenpm publish + redeploygit pull + redeployInstant (HTTP)
Version rollbacknpm install@versiongit checkout?version=1.0.0 query
Cache validationlockfile hashcommit SHAETag / If-None-Match
File accessrequire.resolve()fs.readFile()/files/* endpoint
Auth for writesnpm tokenSSH keyBearer token
Auth for readsnpm token / publicSSH keyOpen (no auth)
Cross-productInstall in eachClone in eachOne registry, all products
Kit count62 in one package62 files in one repo62 independent kits
Downtime on publishYes (redeploy)Yes (redeploy)Zero
What's in a kit
Everything a product needs to configure and customize itself.
📄

Manifest

kit.json defines identity, variables, features, experience types, terminology, and theme.

💡

Skills

SKILL.md prompt files that give AI domain expertise, persona, and workflow knowledge.

🎨

Template Files

Starter content seeded into new workspaces — entities, VFS files, relationships.

🛠

Station Bundles

Compiled Svelte 5 components that extend the manage shell with custom UI.

🏷

Feature Flags

34+ flags that control which platform stations appear: POS, CMS, loyalty, bookings, and more.

🗣

Terminology

Customizable vocabulary — rename "guest" to "patient", "booking" to "appointment".

Architecture principles

  • Zero-copy file serving — Bun.file() uses sendfile/mmap for static kit files. No buffering.
  • ETag caching — clients send If-None-Match, registry returns 304 when the kit hasn't changed.
  • Versioned snapshots — every publish stores a .sck archive. Roll back to any previous version instantly.
  • SDK-nativesdk.kits.load() handles download, cache, and path resolution transparently.
  • Git backup — every publish auto-commits to a Git repository for disaster recovery.
- published kits
- downloads
- uptime