Projects

Projects define the development environment — image, features, extensions, repos, and lifecycle commands.

A project is a template for development environments. It defines everything that should be in a worker: the base Docker image, devcontainer features, VS Code extensions, repositories to clone, and lifecycle commands to run.

Every worker is spawned from a project. Multiple workers can share the same project — each user gets their own isolated container.

FieldDescription
imageBase Docker image (e.g. mcr.microsoft.com/devcontainers/base:ubuntu-22.04)
featuresdevcontainer features to install (Node.js, Docker-in-Docker, Python, etc.)
vscodeExtensionsVS Code extension IDs to pre-install
repositoriesGitHub repos to clone into /workspace/ at first start
postCreateCommandShell command run once after the container is created
postStartCommandShell command run on every container start
forwardPortsPorts to expose (optional — on-demand port tunneling also works)

Projects are compatible with the devcontainer spec. If your project already has a .devcontainer/devcontainer.json, you can import those settings directly into Spunto's project config.

Features are installed using the official OCI feature install scripts — the same mechanism used by VS Code Dev Containers and GitHub Codespaces.

Every change to a project creates an immutable version snapshot. The current version number is displayed in the sidebar as v{n}.

If a worker was spawned on an older project version, its card shows an amber "Rebuild now" banner. Rebuilding re-spawns the container using the latest project config.

You can view the full version history and restore any previous version from the project page. Restoring creates a new version — nothing is mutated in place.

Note

SSH deploy keys and infrastructure details are not versioned — only the environment configuration (image, features, extensions, repos, lifecycle commands) is snapshotted.

If you connect a GitHub App, Spunto can:

  • Clone private repositories into workers using per-project SSH deploy keys (read-only by default)
  • Inject GITHUB_TOKEN and configure ~/.git-credentials for HTTPS remotes
  • Write personal git credentials (SSH key registered on your GitHub account) for git push

Tip

Deploy keys are automatically created on the GitHub repo and stored encrypted in the database. They are deleted when the project is deleted.