Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.deep.space/llms.txt

Use this file to discover all available pages before exploring further.

This page documents every CLI command. For an overview and the dev loop, see CLI overview.
npx deepspace <command> [options]
All commands support --help (or -h). The top-level deepspace command also accepts --version.

create

Shortcut for npm create deepspace@latest. Useful when you already have deepspace on your PATH (or as an npx target) and don’t want to switch CLIs to scaffold a new app.
npx deepspace create                  # interactive scaffold
npx deepspace create my-app           # named app
Internally this just runs npm create deepspace@latest [name] with stdio inherited.

dev

Run the app locally with Vite + worker in-process. HMR on localhost:5173.
npx deepspace dev
npx deepspace dev ./my-app            # run from a specific app directory
npx deepspace dev --port 5180         # parallel apps
npx deepspace dev --prod              # workers point at production (real auth, real API)
Arg / FlagDefaultDescription
[dir].App directory (positional).
--port <n>5173 (or $DEEPSPACE_PORT)Listening port. Vite uses --strictPort - fails loudly if held.
--prodoffUse production workers (real auth, real API calls).
dev rewrites the SDK-managed keys in .dev.vars on every run. User-added secrets (below the divider) are preserved.

deploy

Deploy to Workers for Platforms.
npx deepspace deploy                  # live at <wrangler.name>.app.space
npx deepspace deploy ./my-app         # deploy from a specific directory
ArgDefaultDescription
[dir].App directory (positional).
The subdomain comes from the name field in wrangler.toml. To change it, edit wrangler.toml before deploying - deploy doesn’t accept a name override. User secrets below the .dev.vars divider are uploaded as secret_text bindings. Custom bindings declared in wrangler.toml are validated and auto-provisioned if id = "auto".

undeploy

Tear down a deployed app and its subdomain.
npx deepspace undeploy                # reads name from ./wrangler.toml
npx deepspace undeploy my-app         # explicit app name
ArgDefaultDescription
[name]wrangler.toml name fieldApp name to undeploy (positional).
R2 buckets with files are not auto-deleted (preserves user uploads). Hyperdrive is never auto-provisioned and never auto-deleted.

login

Authenticate via GitHub or Google OAuth. Opens a browser tab and polls up to 10 minutes. For CI/agent contexts, an email + password mode is also supported.
npx deepspace login                                  # browser-based OAuth
npx deepspace login --email me@x.test --password ******  # non-interactive
FlagDescription
--email <addr>Email address (non-interactive mode). Requires --password.
--password <pw>Password (non-interactive mode). Requires --email.
The session is stored at ~/.deepspace/session and is shared across all DeepSpace apps on the machine.
Don’t wrap in timeout N or sleep N && kill. OAuth needs the full polling window. Ctrl-C is safe - server-side state is preserved. Re-login only when whoami reports not signed in or the session has expired.

logout

Clear the local session.
npx deepspace logout

whoami

Print the current login state. The canonical login-state probe - it refreshes the JWT in the same call path that dev / test / deploy use.
npx deepspace whoami
npx deepspace whoami --json
FlagDescription
--jsonEmit a single-line JSON object instead of human output.
Human output shows Name, Email, UserID, Type (developer / test-account), Issuer, and Dashboard URL. The JSON variant also includes expiresAt. On not-signed-in: prints an error to stderr (typically Not signed in. Run \deepspace login`.`) and exits 1.

add

Install a scaffold feature into the current app.
npx deepspace add --list                  # discover available features
npx deepspace add --info <name>           # inspect what a feature installs
npx deepspace add <feature>               # install into current dir
npx deepspace add <feature> ./my-app      # install into specific dir
Arg / FlagDescription
[feature]Feature to install (positional).
[dir]App directory (positional, default .).
--list, -lList available features and exit.
--info <name>Show details about a feature and exit.
Available features (subject to change - run --list for the current set): admin-page, ai-chat, canvas, cron, docs, file-attachments, file-manager, integration-test, items, kanban, landing, leaderboard, messaging, presence-test, sidebar, tasks, testing, topbar, tree Each feature installs source files, registers schemas, and runs npm install for any new dependencies. The command runs .deepspace/scripts/add-feature.cjs from the target directory, so it must be a scaffolded DeepSpace app.

test

Run tests against the dev workers. Auto-installs Playwright + Chromium on first run.
npx deepspace test                    # default = smoke + api
npx deepspace test smoke              # smoke only
npx deepspace test api                # api only
npx deepspace test e2e                # all Playwright specs
npx deepspace test unit               # vitest
npx deepspace test all                # vitest + Playwright
npx deepspace test tests/foo.spec.ts  # one file
npx deepspace test --port 5180        # match a parallel `dev`
Arg / FlagDefaultDescription
[suite]smoke + apiSuite name (smoke, api, e2e, unit, all) or a *.spec.ts file path.
--port <n>5173 (or $DEEPSPACE_PORT)Port for Vite / Playwright’s webServer.
test requires a logged-in user (to mint APP_OWNER_JWT for .dev.vars). It regenerates .dev.vars against dev workers and forwards $DEEPSPACE_PORT to the Playwright child.

screenshot

Capture a Playwright screenshot of any URL. Shares the same Chromium install as test.
npx deepspace screenshot http://localhost:5173/ out.png
npx deepspace screenshot http://localhost:5173/ out.png --full-page
npx deepspace screenshot http://localhost:5173/ out.png --wait-for-timeout 500
Arg / FlagDescription
<url>URL to capture (positional, required).
<output>Output image path (positional, required).
--full-pageCapture the full scrollable page.
--wait-for-timeout <ms>Milliseconds to wait before capture.

kill

Stop leaked workerd / wrangler / vite processes from prior dev runs.
npx deepspace kill                    # default port 5173
npx deepspace kill --port 5180
npx deepspace kill --all              # sweep every workerd/wrangler/vite
FlagDefaultDescription
--port <n>5173 (or $DEEPSPACE_PORT)Port whose listener (and its workerd children) to kill.
--alloffAlso sweep stray workerd / wrangler / vite processes anywhere on the machine.
Don’t kill a parallel session’s processes. If a sibling session is on 5173, run yours on --port 5174 instead.

integrations and invoke

Discover and call third-party integration endpoints. deepspace invoke ... is a top-level alias for deepspace integrations invoke ..., and invoke --list / invoke --info <target> are shortcuts for integrations list / integrations info <target>.

Discovery

npx deepspace integrations list                                  # full catalog
npx deepspace integrations list --json
npx deepspace integrations info openai/chat-completion           # schema + example body
npx deepspace integrations info openai/chat-completion --json

npx deepspace invoke --list                                      # same as `integrations list`
npx deepspace invoke openai/chat-completion --info               # same as `integrations info ...`

Calling endpoints (billed to the logged-in user)

npx deepspace integrations invoke openai/chat-completion --body '{"messages":[...]}'
npx deepspace invoke openai/chat-completion --body '{"messages":[...]}'
npx deepspace invoke openai/chat-completion --body-file req.json
cat req.json | npx deepspace invoke openai/chat-completion --body-file -
FlagAliasDescription
--body '<json>'-dJSON request body inline
--body-file <path>-fRead body from file (or - for stdin)
--jsonPrint only the response JSON (machine-readable)
--timeout <ms>Request timeout in milliseconds (default 120000)
--info(top-level invoke only) Print schema + example body for the target, then exit
--list(top-level invoke only) Print all available integrations, then exit

domain

Buy, attach, and manage custom domains.
# Search and buy
npx deepspace domain search <query>
npx deepspace domain buy <domain>
npx deepspace domain buy <domain> --app <name> --yes
npx deepspace domain buy <domain> --no-open    # print URL instead of opening
npx deepspace domain buy <domain> --no-wait    # exit after Checkout session

# List and inspect
npx deepspace domain list
npx deepspace domain status <domain>

# Manage
npx deepspace domain attach <domain> --app <new-app-name>
npx deepspace domain detach <domain> --yes
npx deepspace domain renew <domain> --auto on|off
SubcommandArgs / Flags
search<query> (required), --limit <n> (default 10), --json
buy<domain> (required), --app <name>, --yes, --no-open, --no-wait, --json
list--json
status<domain> (required), --json
attach<domain> (required), --app <name>, --json
detach<domain> (required), --yes
renew<domain> (required), --auto on|off (required)
--app defaults to the name field in ./wrangler.toml. buy and detach require --yes in non-TTY contexts (otherwise they refuse rather than hang). Provisioning time varies by TLD: Cloudflare Registrar TLDs (.com, .dev, .app) take ~60–90 seconds; Porkbun / NameSilo TLDs (.ai, .io, .me) take 15–60 minutes.

test-accounts

Manage @deepspace.test accounts for Playwright multi-user tests. The pool is global per developer, hard cap of 10.
# List
npx deepspace test-accounts list

# Create
npx deepspace test-accounts create --email alice-1@deepspace.test --password Pass123! --name "Alice"

# Delete
npx deepspace test-accounts delete --email alice-1@deepspace.test
npx deepspace test-accounts delete --id <id>
npx deepspace test-accounts clear                # delete all (with confirm)
npx deepspace test-accounts clear --label e2e    # delete labeled subset
npx deepspace test-accounts clear --yes          # skip confirmation
SubcommandFlags
create--email (required, must end @deepspace.test), --password (required, min 8 chars), --name, --label
list-
delete--email or --id (exactly one)
clear--label <tag>, --yes
Credentials are stored locally at ~/.deepspace/test-accounts.json (mode 0600). Public sign-up is intentionally disabled; these accounts are the only way to obtain signed-in browser contexts for tests.

library

Publish (or unpublish) your deployed app in the DeepSpace community library at deepdotspace-site.app.space.
# Publish the current app (reads name from ./wrangler.toml)
npx deepspace library publish

# Override metadata
npx deepspace library publish --app my-cool-app --name "My Cool App" \
  --description "A short tagline" --category Productivity \
  --tags utility,ai --visibility unlisted

# Remove an entry
npx deepspace library unpublish <handle>
SubcommandArgs / Flags
publish--dir <path> (default .), --app <name> (default: wrangler.toml name), --name <display>, --description <text>, --category <cat> (default General), --tags <a,b,c>, --visibility public|unlisted|private (default public), --screenshot <url>, --library-app <subdomain>, --json
unpublish<handle> (positional, required), --library-app <subdomain>, --json
library publish requires a logged-in session (deepspace login) and that the app is already deployed - the library server verifies you own the deployed app via the deploy worker’s registry before writing the entry. Publishing another user’s app is rejected server-side. <handle> for unpublish is the templateHandle returned by publish (usually the same as your app name). Only the owner (or an admin) can unpublish.
Deploy first. library publish registers the deployed app and its preview - run npx deepspace deploy before publishing, otherwise the ownership check fails.

managed-repos

Create and manage DeepSpace-owned private GitHub repositories. Intended for users who do not have or do not want to connect their own GitHub account; subject to per-developer quotas.
npx deepspace managed-repos list
npx deepspace managed-repos list --json

npx deepspace managed-repos create my-app
npx deepspace managed-repos create my-app --appId cli-my-app --nameHint my-repo

npx deepspace managed-repos token <repo-id>           # short-lived GitHub token
npx deepspace managed-repos delete <repo-id>
npx deepspace managed-repos delete <repo-id> --yes    # skip confirmation
SubcommandArgs / Flags
list--json
create<appName> (positional, required), --appId, --nameHint, --json
token<repoId> (positional, required), --json
delete<repoId> (positional, required), --yes, --json
token mints a short-lived GitHub access token scoped to the repo and prints a ready-to-use git clone command. delete removes the GitHub repository and counts against your daily delete quota.

Global flags

FlagAvailable onPurpose
--help, -hevery commandPrint help (ANSI-free)
--versiontop-level deepspacePrint CLI version
--jsondiscovery + status commandsMachine-readable output
--yesdomain buy, domain detach, test-accounts clear, managed-repos deleteSkip confirmation prompt

Environment

The CLI reads a small set of environment variables:
VariableUsed byPurpose
DEEPSPACE_PORTdev, test, killDefault port when --port is not passed
DEEPSPACE_AUTH_URLlogin, logout, test-accountsOverride auth-worker URL (advanced/testing)
DEEPSPACE_API_URLdomain, invoke, integrations, managed-repos, deployOverride api-worker URL (advanced/testing)
DEEPSPACE_DEPLOY_URLdeploy, undeployOverride deploy-worker URL (advanced/testing)
DEEPSPACE_LIBRARY_HOSTlibraryOverride library host URL (advanced/testing)

See also