Node.js 22 LTS
The whole system is one Node process. Corepack ships with Node and manages pnpm.
This guide gets a local Subspace running with a seeded demo graph so you can click around real pages, mail, and agents. Everything runs on your machine; no external account is required for the fake-provider path.
Node.js 22 LTS
The whole system is one Node process. Corepack ships with Node and manages pnpm.
pnpm 9
Enable it with corepack enable. The repo is a pnpm workspace.
Install dependencies
corepack pnpm installHost-filtered optional packages pull in the right PostgreSQL + pgvector binaries for your platform.
Build the web SPA
corepack pnpm --filter @subspace/web buildThe server serves the built SPA statically, so a production-style run needs the build
once. For live reload during development, use pnpm dev instead (below).
Start the server
corepack pnpm --filter @subspace/server startFirst boot runs initdb for an embedded Postgres under $SUBSPACE_HOME (default
~/Subspace) and applies migrations transactionally. The server listens on
127.0.0.1:4780.
Open the app
open http://127.0.0.1:4780You now have an empty graph. To explore a populated one, seed the demo (next).
The fastest way to see what Subspace does is the mock world: a self-consistent seed with a user (Jan Novak), CRM contacts (Rachel Kim / Acme, Marcus Feld / Vertex), projects, a pipeline table with formulas, mail threads, a meeting, and agents.
# throwaway home in /tmp, fake providers, mock-world seed, web HMRpnpm dev:sandboxSUBSPACE_SEED=mock-world PROVIDERS=fake \ corepack pnpm --filter @subspace/server start# server (tsx watch, :4780) + web (vite HMR, :5180), one Ctrl-Cpnpm dev# same, throwaway /tmp home + fake providers + mock-world seedpnpm dev:sandbox# typecheck + lint + unit testspnpm checkType an instruction on a bullet
On any page, type a plain instruction on a bullet, for example
Summarize the Project X page and list open questions.
Send it to the default agent
Press ⌘↵. The bullet’s text is handed to the default agent as an instruction; a
violet run chip appears under the bullet.
Watch the run tree
Each step (LLM calls, tool calls, output nodes) streams into a run tree beneath the bullet. Any outbound or irreversible action pauses with an approval card in the task queue.
Approve or steer
Approve to let a gated tool run, or inject a steering message mid-run. When the run finishes, its output nodes are ordinary bullets you can edit and link.
By default PROVIDERS=fake uses deterministic stand-ins for the Jupyter kernel and the
search embedder, and the mock connectors for mail and IM. To connect real services: