A small, self-hostable proxy that turns a Git host reference into an installable
Roblox model — with no central registry. Packages aren't published or
namespaced here; they live in whatever GitHub or Codeberg repo their author
chose, and the proxy resolves owner:repo[@version] on demand. Point the
Cealshell CLI at the official instance or run your own.
It is stateless apart from a tiny version cache: it resolves
owner:repo[@version] against a source provider (GitHub or Codeberg), fetches
the release's .rbxm asset (or one committed via cealshell.toml), parses it
into the instance tree the plugin consumes, and returns it. No accounts, no
uploads, no download tracking.
This is the open-source proxy slice of Cealshell. User accounts, OAuth, admin and moderation tooling live in the private backend and are intentionally not included here.
| Route | Description |
|---|---|
GET /github/:ref |
Resolve :ref through GitHub |
GET /codeberg/:ref |
Resolve :ref through Codeberg (Forgejo/Gitea) |
GET /:ref |
Default — resolves owner:repo[@version] through GitHub |
GET /health |
Liveness check |
:ref is owner:repo[@version], e.g. janisfox:marble or
janisfox:marble@1.2.0. Omitting the version resolves to the newest published
one. (owner/repo is also accepted.)
The response envelope is:
{
"ok": true,
"data": {
"package": { "provider": "github", "owner": "...", "repo": "...", "slug": "...", "version": "1.2.0" },
"instances": [ /* parsed .rbxm instance tree */ ],
"release_notes": "..."
}
}To use your instance from the CLI, set it as the remote:
cshl remote set https://proxy.example.com
…or use a one-off override on a single reference, e.g.
proxy.example.com/janisfox:marble.
Either of:
- Release asset — attach a
.rbxmto a GitHub/Codeberg release. The proxy serves the newest release that ships one. cealshell.toml— commit a manifest pointing at a.rbxmin the repo, no release needed. See docs/manifest.md. When present it takes precedence over releases.
Requires Node 18+ and PostgreSQL.
cp .env.example .env # fill in DB_* (and optionally GITHUB_TOKEN)
npm install
npm run migrate # create the cache tables
npm run dev # or: npm run build && npm startA GITHUB_TOKEN / CODEBERG_TOKEN is optional but recommended — without one
you share the host's low unauthenticated API rate limit.
Source providers live in src/providers/source/. Implement the SourceProvider
interface (types.ts) — fetchVersions and fetchManifest — and register it in
index.ts. It auto-mounts at /<id>/:ref. GitHub and Codeberg are the built-in
examples; the contract assumes a release-with-attached-asset model.
src/
index.ts Express app — health + proxy routes only
routes/registry.ts The proxy HTTP handlers
services/
registry.ts Ref parsing, package upsert, version sync
rbxm.ts Fetch + parse a .rbxm into the instance tree
manifest.ts cealshell.toml reader
providers/source/ GitHub + Codeberg source providers
db/ pg connection, schema, migrate runner