Skip to content
Docs menu

Quickstart

Four steps from nothing to a live full-stack app with its own Postgres database. You need a GitHub account and a project folder; no card, no config file.

Sign in

Go to rivtor.com/login and sign in with GitHub. New accounts start on Pro for 14 days, then move to Free unless you upgrade. Nothing you deploy has to move either way.

Create a token

Open /dashboard/tokens and create an API token. It looks like rvt_ followed by 40 characters and is shown once, so copy it now. Agents and the CLI send it as Authorization: Bearer rvt_….

Connect your agent, or use the CLI

Option A: your agent

For Claude Code, run this once, replacing rvt_... with your token. Cursor, Codex and other clients are on Connect an agent.

claude mcp add --transport http rivtor https://api.rivtor.com/mcp --header "Authorization: Bearer rvt_..."

Then, inside your project, ask:

prompt
Deploy this app to Rivtor.

The agent calls the deploy tool. For a folder on your disk the local server uploads it directly; the remote server can deploy a Git URL, a starter, or up to 2 MB of files passed inline.

Option B: the CLI

From the root of your project:

npx rivtor login
npx rivtor deploy

login asks for your token and stores it in ~/.config/rivtor/config.json. In CI, set RIVTOR_TOKEN instead.

What you get back

About two minutes later for a typical Next.js + FastAPI + Postgres app (static sites in under 30 seconds), one response with every URL, the status of every service and data service, the database connection string and a dashboard link. The password in databaseUrl is masked unless you ask for it.

DeployResult
{
  "status": "live",
  "deploymentId": "dpl_7h2k9x",
  "project": "my-app",
  "urls": {
    "web": "https://my-app.rivtor.com",
    "api": "https://my-app-api.rivtor.com"
  },
  "services": [
    { "name": "web", "kind": "web", "runtime": "container",
      "status": "live", "framework": "nextjs",
      "url": "https://my-app.rivtor.com" },
    { "name": "api", "kind": "api", "runtime": "container",
      "status": "live", "framework": "fastapi",
      "url": "https://my-app-api.rivtor.com" }
  ],
  "data": [
    { "kind": "postgres", "status": "ready",
      "sizeBytes": 8388608, "limitBytes": 1073741824 },
    { "kind": "redis", "status": "ready",
      "sizeBytes": 0, "limitBytes": 52428800 }
  ],
  "databaseUrl": "postgresql://p_my_app:••••@host.docker.internal:6432/p_my_app",
  "dashboardUrl": "https://rivtor.com/dashboard/projects/my-app",
  "durationMs": 118400
}

Your app already has DATABASE_URL, REDIS_URL and any S3_* variables it needs, and the frontend's NEXT_PUBLIC_API_URL points at the API. See Data services.

If a secret is missing

When your code reads a variable such as STRIPE_SECRET_KEY that has no value, deploy stops before building and returns needs_input with each name and the line that reads it:

deploy → needs_input
{
  "status": "needs_input",
  "stage": "plan",
  "code": "missing_secrets",
  "cause": "The app reads a secret that is not set: STRIPE_SECRET_KEY",
  "fix": "Ask the user for STRIPE_SECRET_KEY, call env_set with them, then call deploy again.",
  "retryable": true,
  "missing": [
    { "name": "STRIPE_SECRET_KEY", "service": "api",
      "usedIn": ["api/payments.py:3"] }
  ]
}

Your agent asks you once, calls env_set, and deploys again. From the CLI:

npx rivtor env set STRIPE_SECRET_KEY=sk_live_...

Secret values are encrypted at rest, injected only at runtime and never echoed back in tool results.

Redeploy

Change code and call deploy again, or run npx rivtor deploy. Each service is fingerprinted by a hash of its files, and only services whose files changed are rebuilt, so redeploys take under a minute. The previous release keeps serving until the new one passes its health check.

No code yet?

Deploy a starter app: a Next.js frontend, a FastAPI backend and Postgres, wired together. Ask your agent for the Rivtor starter, or call the remote deploy tool with:

deploy arguments
{ "project": "my-first-app", "starter": "nextjs-fastapi-postgres" }
Free is for personal and non-commercial projects. Container apps on Free sleep after an hour without traffic and wake in under 3 seconds. See Limits.

Next