For developers | Spacefast
Publishes like a toy. Operates like a host.
One command, or one POST, puts your build folder live on Automattic’s edge. Underneath: immutable versions, one-command rollback, included cached delivery, and a real way out.
The whole product fits in one session
Publish, inspect the history, roll back, leave. This is the shipped CLI.
$ sf publish ./dist
✓ 128 files · live in 8s → https://quiet-sun.view.fast
this version → https://v7--quiet-sun.view.fast
$ sf versions
v7 ready live just now
v6 ready 2 days ago
v5 ready last week
$ sf rollback v6
✓ v6 promoted to live — a pointer flip, no rebuild, no redeploy
$ sf spaces download --output ./quiet-sun
✓ every file written to ./quiet-sun — ready to serve anywhere
CLI
sf publish ./dist and the folder is live. Later runs re-upload only what changed, and publishing identical content is a recognized no-op, not a wasted version.
HTTP API
One POST /v1/publish with a file or zip returns a JSON receipt: the live URL, an immutable version URL and a claim link. No SDK to adopt, no account before your first publish.curl -F archive=@site.zip https://api.spacefast.com/v1/publish works right now.
CI
Run the CLI or curl from any pipeline step with a scoped key.sf api-keys create --preset ci_deploy mints a least-privilege key, shown once. Every command takes --jsonand exits with a stable code (0 ok, 2 validation, 10 auth, 20 not found, 30 conflict, 40 network), so scripts branch on numbers, not prose.
Agents
The same CLI, API and typed errors work when an agent is at the keyboard. Every docs page is fetchable as Markdown, and a hosted MCP server gives agents typed tools to publish, check status, diff and roll back.
No terminal at all
Drop a folder, a zip or a single index.html into the dashboard.
The CLI reference covers every command and flag. The API guide covers auth, the response envelope and idempotency.
Everything is a version
One idea does most of the work here: rollback is re-pointing, preview is visiting an old version’s URL, and “what changed?” is a diff between two.
A version for each change
A publish that changes files freezes an immutable version with its own URL. Republishing identical files creates nothing new. Free spaces keep 200 versions, then expire the oldest ones nothing serves. The live URL flips atomically, so visitors never see a half-published space.
Rollback is a pointer flip
sf rollback v6 promotes an earlier version to live. No rebuild, no redeploy. Static files are prepared at publish; dynamic requests use the selected runtime and may read app data. Your live version is never auto-deleted.
Leaving is one command
sf spaces download writes files from a retained version to a folder. Static sites can move with those files. Apps using Spacefast runtimes need code changes and a separate data export.
Your Netlify config already works
_redirects and _headers are a Netlify-compatible subset, compiled once at publish. They ship inside the version, so routing rolls back with your space and there’s no routing dashboard to drift out of sync.
_redirects. A redirect, a proxy to a real backend, an SPA fallback:
/old-post /new-post 301
/api/* https://api.acme.com/:splat 200
/* /index.html 200
_headers. Response and cache rules:
/assets/*
Cache-Control: public, max-age=31536000, immutable
A 404.html at the root handles misses, the SPA fallback is auto-detected for built apps, and a 200 rule to an absolute URL proxies a path under your own domain. Browser-ready output publishes as-is. No adapter, no framework preset to pick:
- A Next.js export
- Vite
- Astro
- SvelteKit
- Hugo
- Plain HTML
The full rules live in the docs: redirects & rewrites and response headers.