Repository navigation
docs: the documentation of spawner.run, and Traefik 3.7 - #22
Merged
Merged
Conversation
- Traefik 3.5 no longer gets security fixes: TRAEFIK_IMAGE moves to traefik:v3.7, pinned by the digest of its index (3.7.14). Its entry points drop the request headers whose name holds a character other than a letter, a digit or a dash (aliasheadersstrategy=delete): PHP or CGI read X_Spawner_Preview or X.Forwarded.For as the dashed name, which Traefik's middlewares remove or set. The development stack runs the same option. - Below 4 GiB of memory, the default settings fit no environment: the installer says so, at the check and in its summary, and names SPAWNER_ENV_MEMORY and MIN_REQUIRED_FREE_MEMORY_GB. - An /opt/spawner holding only .env and dns.env is an installation of this installer, as on a new server restored from a backup: the marker is read from .env, and --upgrade stops when compose.yaml is missing. - Messages: links go to spawner.run; the Let's Encrypt e-mail is the account's contact (no expiry e-mails since 2025); the missing Compose hint names docker-compose-v2 for Ubuntu's Docker; --purge says it deletes the secrets too.
… code 6 - The spawner.yaml that init writes links to https://spawner.run/docs/manifest/ instead of the v1 branch of the repository; init ends with the address of the quickstart, and --help with the CLI reference. - The instructions init writes for coding agents say what to do on exit code 6, and call what `url --with-token` gives the preview token header, as the docs do. The help says 6 is quota or capacity. - spawner_up's path says it defaults to the first root the client shares. - A 90-day token expires "in 90d", not "in 89d 24h": rounded hours carry into a day.
It opened the docs/ directory of the running version's tag on GitHub; it opens https://spawner.run/docs/, which describes the latest release.
…Spawner is - The published package.json: homepage https://spawner.run, the description of Spawner, the keywords people search with, and mcpName io.github.Flosk6/spawner. - A last job publishes server.json to the official MCP Registry through GitHub OIDC, for stable releases, once npm has the version: it cannot undo or block the publish. - The notes open with what Spawner is and links to the docs and the changelog, give the install and upgrade commands apart, list the files, and show how to verify them, with the attestations or SHA256SUMS. - Image labels carry the same description, and the url and documentation of spawner.run, in the Dockerfile as in the workflow. - The Documentation link of the issue chooser opens the site.
…bleshooting - quickstart.md: from a fresh server to a first environment, with the steps no page gave: an admin registers the project (each field of the dialog, deploy keys for private repositories, source repositories), then spawner init and spawner up. - ci.md: a preview per pull request from GitHub Actions and per merge request from GitLab CI, with a CI account and a token restricted to the project, the quota, forks, and pull_request_target never. - examples.md: what the two example projects run and show, and how to try one. - troubleshooting.md: the message of each usual failure and what to do.
- install: 4 GiB of memory at least, not 2; uninstall and the local install download the installer from the release, as upgrades do, and the local install needs Linux; --purge also deletes /opt/spawner, its backups and the master secret; the ports, the outbound connections and no telemetry; answers given through the environment. - operations: a restore on a new server that the installer accepts; GitHub login set up step by step; admin.js invite links last 24 hours. - manifest: every key of spawner.yaml with its type, default, rules and refusal; the codes of a refused .spawner/; what an application needs behind Spawner; the Dockerfile example builds again; services without mem_limit share what is left; public URLs never wake an environment. - security: the compose policy lists what it allows, refuses and sets, with its limits (build platform is refused); accounts also come from GitHub login for members of its organization. - concepts: what Spawner is, the words readers search with, and what Spawner does not do, moved from the README. - cli and agents: every command and option, the environment variables and files, the error codes, the nine MCP tools; VS Code, Gemini CLI and Devin Desktop; Codex's tool timeout; permission rules for Claude Code. - "capacity" instead of "room", named table headers, and the dashboard's names since 2.1.0.
The README opens with the mark, what Spawner is, links to the site, the dashboard in both themes and the terminal; its quick start registers the project; its documentation links go to the site, and "What Spawner does not do" to the page of concepts that now holds it. Both pages give the nine MCP tools and the line that adds the server to Claude Code.
The repository tests with Vitest.
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why
The website (spawner.run, a separate repository) builds its documentation from
docs/*.mdandCHANGELOG.md. An adversarial review of that site found what this pull request fixes: pages that were false or missing, a quick start that cannot work (it never registers the project), no guide for previews of pull requests, and links that lead to a stale branch. It also found that the installer pins Traefik 3.5, which no longer gets security fixes.Traefik 3.7
TRAEFIK_IMAGEmoves totraefik:v3.7@sha256:575fa15b…(3.7.14, the digest of the index fromdocker buildx imagetools inspect). The advisories published since 3.5's end of support are fixed in 3.6 and 3.7 only, among them a bypass of path-scoped routing and middlewares, request smuggling and a header sanitization bypass.aliasheadersstrategy=delete, from 3.7.12): PHP or CGI readX_Spawner_PrevieworX.Forwarded.Foras the dashed name, which the middlewares remove or set. Spawner's own headers are dashed. An application that relies on a header with an underscore would stop receiving it (nginx drops them by default too). The development stack runs the same option.trustForwardHeaderandmaxResponseBodySizeare unset (router.service.ts).Installer
SPAWNER_ENV_MEMORYandMIN_REQUIRED_FREE_MEMORY_GB./opt/spawnerholding only.envanddns.envis accepted, as on a new server restored from a backup (the marker is read from.env);--upgradestops whencompose.yamlis missing.--purgesays it deletes the secrets.CLI, dashboard, release
spawner initlinksspawner.yamlto https://spawner.run/docs/manifest/ instead of thev1branch; the agent instructions say what to do on exit code 6; a 90-day token no longer expires "in 89d 24h".mcpName. A last release job publishesserver.jsonto the official MCP Registry (GitHub OIDC, stable releases, after npm, unable to block it); 2.1.0 on npm has nomcpName, so the first listing comes with the next release.SHA256SUMS. Image labels point to the site.Documentation
quickstart.md,ci.md(GitHub Actions and GitLab CI),examples.md,troubleshooting.md.build.platformis refused); memory shared between services; public URLs never wake an environment; GitHub login creates accounts for members of its organization; every key ofspawner.yaml; every CLI option, variable and error code; the nine MCP tools; more agents; "capacity" instead of "room"; the dashboard's names since 2.1.0.NET_RAW, the firewall, no bootstrap token by default, attestations, the local secrets that stay home, the 5 queued uploads.configuration.mdno longer says the Settings page overridesSPAWNER_ENV_CPUSandSPAWNER_ENV_PIDS: only the environment sets them.Before merging
spawner initand the Docs button point to https://spawner.run, which is not online yet: the site goes live right after this merges, then follows each release..github/assets/dashboard-*.pngare the site's current screenshots, whose sidebar still says v2.0.0: to retake on a 2.1 stack.Checks
Tests next to the code (
format.spec.ts,init.spec.ts), and the end-to-end check below still to runDocumentation and
CHANGELOG.mdupdated when the behaviour changespnpm lint,pnpm typecheckandpnpm testpass: 578 tests (core 231, api 219, utils 24, cli 104).install.sh:bash -nafter the merge with master; shellcheck 0.11.0 was clean on the version before it. The secret prompts were checked through a pty and the non-interactive paths in a Debian container; the installer'scompose.yamlrenders and parses in the three TLS modes.release.ymlis valid YAML and its 12runblocks passbash -n.The site builds from these docs with no broken link or anchor.
Not run:
scripts/e2e-engine.shwith Traefik 3.7 (docker compose pull traefik && scripts/e2e-engine.sh), needed before merging; the workflows ofci.mdwere checked statically, never run on GitHub or GitLab.