SMALL DOCUMENTATION

From an empty VPS
to a healthy app.

Small gives humans and coding agents one narrow deployment contract. Connect capacity once, keep intent in your repository, and make every release observable and reversible.

Ubuntu 22.04 / 24.04 Debian 12 / 13 AMD64 / ARM64 No inbound VPS ports

QUICK START

Three boundaries, one deployment.

The dashboard pairs a runtime, the repository declares the app, and the CLI or MCP interface asks Small to reconcile the two.

01

Connect capacity

Create a runtime in the dashboard and run its generated, signed installer block on your VPS.

02

Declare the app

Add a reviewable small.yaml beside your source or container configuration.

03

Deploy

Run small deploy yourself or let an MCP-compatible coding agent do it.

RUNTIME

Connect a customer-owned VPS.

  1. Open Dashboard → Runtimes → Connect your VPS.
  2. Copy the signed installation block.
  3. SSH to a fresh supported VPS as a user with sudo access and run the generated installation block.
  4. The installer displays a short setup code. Enter it with a stable server name and region in the dashboard, then approve the connection.
  5. Wait for the installer and dashboard to report both heartbeat and managed ingress ready.

The installer reuses Docker Engine 24 or newer when healthy. Otherwise it installs Docker from its official signed APT repository. Small Node, its private Node.js runtime, and FRPC are pinned inside an Ed25519-verified release.

AGENT ACCESS

Use the same contract from any harness.

Open Dashboard → Agent setup for a guided flow that installs the CLI, creates a scoped token, registers the MCP server, and adds the portable deployment skill to a project. The stdio MCP server exposes validation, deployment, status, logs, secrets, domain, and rollback operations.

terminalagent setup
curl --proto '=https' --tlsv1.2 -fsSL https://small.zerotoagentic.com/cli/install.sh | sh
printf '%s' "$SMALL_TOKEN" | small login --url https://small.zerotoagentic.com --token-stdin
codex mcp add small -- small mcp
claude mcp add --transport stdio --scope user small -- small mcp
curl --proto '=https' --tlsv1.2 -fsSL https://small.zerotoagentic.com/skills/deploy-with-small/install.sh | sh

DEPLOYMENT CONTRACT

Keep intent in small.yaml.

An application must listen on 0.0.0.0 at the declared service port. Health endpoints should be fast and unauthenticated. Pin production images to a version or digest; Small records and runs the resolved immutable digest.

small.yamlimage deployment
version: 1
name: hello-small
source:
  type: image
  image: nginx:alpine
service:
  port: 80
  healthcheck:
    path: /
resources:
  memoryMb: 128
  cpus: 0.25
storage: []
access:
  mode: public
env: {}
secrets: []
target:
  server: production-vps-1
small initsmall validatesmall deploy

OPERATIONS

Observe, replace, and recover.

Deployments progress through bounded milestones: source fetch, image pull or build, container start, health, ingress, and activation. A new release becomes active only after health and routing succeed.

terminalcommon operations
small deploy --server production-vps-1
small status
small logs hello-small
small rollback <deployment-id>
small stop hello-small --yes

Replacement cleanup is deterministic. Rollback uses the historical image digest rather than resolving an old mutable tag again.

SECRETS

Declare names, supply values out of band.

List required names under secrets, then read values from the environment of the trusted CLI or MCP process. Secret values are encrypted and are never returned by list operations.

terminalsecret input
export DATABASE_URL='postgres://…'
small secrets set --app hello-small --from-env DATABASE_URL DATABASE_URL
unset DATABASE_URL
small secrets list --app hello-small

REQUEST PATH

Know where application traffic goes.

Small edge

TLS and hostname policy

Managed relay

Authorized FRP connection

Your VPS

Loopback container target

Application

Declared service port

In the current managed-relay mode, public application requests cross Small's edge and relay, but never the dashboard HTTP process. Small does not receive SSH access or a remote Docker socket. The constrained node leases only commands assigned to its runtime identity.

TROUBLESHOOTING

Start with evidence, then repair.

VPSnode health
sudo small-node-installer check
sudo systemctl status small-node --no-pager
sudo journalctl -u small-node -n 200 --no-pager
sudo small-node-installer repair

Credential rotation

Issue a replacement enrollment in the dashboard, then run the displayed small-node-installer reenroll command.

Node update

Run small-node-installer update --version …. A failed readiness check restores the prior release.

Safe uninstall

small-node-installer uninstall --yes revokes the node and preserves application containers and volumes.

PRIVATE ALPHA

Current limits are part of the contract.

  • Managed relay is the supported customer-VPS ingress mode today. Direct-edge Caddy mode is roadmap work.
  • Small does not purchase or provision a VPS for you yet.
  • Persistent volumes remain single-node data. Back up stateful application data independently.
  • Small is not Kubernetes, a remote shell, or a general server administration control plane.

READY TO SHIP?

Connect a runtime in the dashboard.

Open Small