Repository avatar
Databases
v1.2.1
active

rivtor

com.rivtor/rivtor

Deploy full-stack apps (frontend, backend, Postgres, Redis) from your agent and get live URLs.

Documentation

rivtor

Deploy any app (frontend, backend, workers, Postgres, Redis and object storage) with one command, from your terminal or from an AI agent.

npx rivtor login
npx rivtor deploy

Rivtor detects every service in the folder (Next.js, Vite, Astro, Express, Fastify, NestJS, FastAPI, Flask, Django, Go, Rust, Dockerfile and more), provisions the databases your code needs, wires service URLs together and returns live URLs, usually in about two minutes.

Install

npm i -g rivtor     # or run it with npx: npx rivtor <command>

You need Node.js 20 or newer.

Log in

Create a token at https://rivtor.com/dashboard/tokens, then run:

rivtor login                    # paste the token when asked (input is hidden)
rivtor login --token rvt_...    # non-interactive

The token is saved to ~/.config/rivtor/config.json with mode 0600 (or $XDG_CONFIG_HOME/rivtor). In CI, set RIVTOR_TOKEN instead. RIVTOR_API_URL changes the API endpoint (default https://api.rivtor.com).

Deploy

rivtor deploy                   # deploy the current folder
rivtor deploy ./my-app          # deploy another folder
rivtor deploy --dry-run         # print the detected plan; nothing is deployed
rivtor deploy --env-file .env.production   # send these variables with the deploy
rivtor deploy --no-wait         # start and exit right away
rivtor deploy --no-verify       # skip post-deploy verification, not release security checks
rivtor deploy --json            # print the raw DeployResult (for scripts and agents)
rivtor deploy --clean           # rebuild everything from scratch, without build/dependency caches

Redeploys upload only the files that changed: the CLI sends a list of file hashes, and the API asks for the files it doesn't have yet. Dependencies are cached per account and reused until a lockfile, the runtime version or the build env changes. Use --clean if a cached dependency ever looks stale.

What gets uploaded:

  • Files are packed according to your .gitignore files (nested ones too) and an optional .rivtorignore.
  • node_modules, .git, build outputs (dist, build, out, .next, ...), virtualenvs and caches are skipped.
  • .env files are never uploaded, even if your .gitignore allows them. Only .env.example, .env.sample and .env.template are uploaded, so Rivtor can see which variable names your app expects. To send secret values, use --env-file or rivtor env set.
  • The upload limit is 300 MB compressed (for a redeploy: the changed files only).

The project name comes from --project <slug>, then from rivtor.json ({ "project": "my-app" }), then from the folder name. After the first deploy the CLI writes rivtor.json so later deploys go to the same project.

Exit codes: 0 live, 1 failed, 2 needs input (for example a missing secret). When a deploy fails, the CLI prints the cause, the file and line, and the fix.

Verified deploys

When the API returns a verification report, deploy output ends with its actual verdict (working, partly_working, or broken), summary, check counts, cause/file/fix for each issue, and a private report link. Missing or skipped reports are explicitly labeled, never inferred as working from deployment success. Review skipped check groups before assuming coverage.

rivtor verify my-app            # re-check the current live app without redeploying
rivtor verify my-app --json     # complete machine-readable VerificationReport
rivtor status my-app            # last verdict, report link and open issue count
rivtor issues my-app --status open --json
rivtor issue-resolve <issue-id> --project my-app
rivtor verify-fix <issue-id> --project my-app --yes

Manual verification applies no configuration fixes. It exits 0 only for working; other verdicts and request failures exit 1. Deploy keeps its existing deployment-status exit codes; automation should inspect verification.verdict separately in --json output. --no-wait stops waiting but leaves verification enabled.

Report pages and screenshots require sign-in and project membership. Sharing a report URL does not grant access. See https://rivtor.com/docs/verify.

Commands

CommandWhat it does
rivtor login [--token <t>]Save an API token
rivtor logoutRemove the saved token
rivtor whoamiShow the logged-in account and plan
rivtor deploy [path] [--project] [--dry-run] [--json] [--no-wait] [--env-file] [--clean] [--no-verify]Deploy a folder
rivtor verify [project] [--json]Re-check the live app and return a verification report
rivtor issues [project] [--status open|resolved|dismissed|all] [--severity]List production issues as JSON
rivtor issue-resolve <id> [--project] [--dismiss]Resolve an issue or persist a false-positive dismissal
rivtor verify-fix <ids...> [--project] --yesConsent to allowlisted configuration fixes and re-verification
rivtor status [project]Services, URLs, data services and the last deploy
rivtor projectsList your projects
rivtor logs [project] [--service] [--since 1h] [--level error] [--raw] [--build <deploymentId>]Runtime logs, or a deployment's build log
rivtor env set K=V [K2=V2 ...] [--service]Set env vars and secrets (services restart; no rebuild)
rivtor env rm K [K2 ...] [--service]Remove env vars
rivtor env lsList env vars (values masked)
rivtor env pull [--file <f>] [--production] [--include-secrets] [--force]Write env vars to .env.local / .env (counts printed, never values)
rivtor rollback [releaseId]Roll back to the previous release, or to a specific one
rivtor db query "<sql>"Run read-only SQL
rivtor db urlGet a temporary connection string (valid for 1 hour)
rivtor db connect [--port 54329]Authenticated tunnel to the project's Postgres on localhost
rivtor db export -o backup.dumpDownload a pg_dump in custom format
rivtor domain add <hostname> [--service]Attach a custom domain and print the DNS record to create
rivtor destroy [project] [--approval-token <rva_...>]Delete a project and all its data (API keys: after your approval)
rivtor upgrade [hobby|pro|team] [--interval month|year]Open a checkout link
rivtor mcpRun the MCP server over stdio
rivtor skills install [--target claude|codex|cursor|all] [--project]Install the Rivtor agent skill
rivtor skills pathPrint the folder of the bundled skill

Most commands accept --json and --project <slug>.

Use it from AI agents (MCP)

rivtor mcp runs a local MCP server over stdio. It has the same tools as the remote server, and its deploy tool can upload a folder straight from disk:

deploy, status, logs, env_set, rollback, db, domain_add, destroy, upgrade, list_projects

With these tools an agent can fix its own failed deploys. When a deploy fails, the agent gets a structured error with cause, file and fix. It edits the code and calls deploy again, and only the services that changed are rebuilt. If a secret is missing, the agent asks you for it once, then calls env_set. Secret values are never echoed back.

Claude Code

claude mcp add rivtor -e RIVTOR_TOKEN=rvt_... -- npx -y rivtor mcp

If you already ran rivtor login, you can leave out -e RIVTOR_TOKEN=...:

claude mcp add rivtor -- npx -y rivtor mcp

Cursor

~/.cursor/mcp.json (or .cursor/mcp.json in a project):

{
  "mcpServers": {
    "rivtor": {
      "command": "npx",
      "args": ["-y", "rivtor", "mcp"],
      "env": { "RIVTOR_TOKEN": "rvt_..." }
    }
  }
}

Codex

~/.codex/config.toml:

[mcp_servers.rivtor]
command = "npx"
args = ["-y", "rivtor", "mcp"]
env = { RIVTOR_TOKEN = "rvt_..." }

Remote MCP (no local install)

Agents that don't need to upload files from disk can connect to https://api.rivtor.com/mcp with the header Authorization: Bearer rvt_.... The remote deploy tool accepts a git URL, a starter template or inline files.

Run it locally against your Rivtor database

npx rivtor env pull          # writes .env.local (Next.js / Vite) or .env; adds .env* to .gitignore
npx rivtor db connect        # keep running: tunnel to the project's Postgres on localhost:54329
npm run dev                  # DATABASE_URL in the env file points at localhost:54329

env pull writes a local-safe set by default: DATABASE_URL is a temporary login (valid 1 hour; run env pull --force again for a new one) through the tunnel, never the database's own address. Redis runs on Rivtor's private network and is left out. Payment and provider secrets (names with SECRET, PRIVATE, TOKEN, PASSWORD, WEBHOOK, or ending in _KEY) are left out unless you pass --include-secrets; --production writes production values (database passwords left out unless --include-secrets). An existing file is never merged: env pull refuses to replace it without --force. db connect needs Node.js 22+.

Token scopes and approvals

Tokens have a scope: read (status, logs, read-only database), deploy (the default for new tokens: also deploy, env, rollback, domains) or admin (everything). They can be limited to one project and given an expiry. destroy with any API token also needs your approval: the first call prints an approval link; approve in the browser, then run rivtor destroy <project> --approval-token <token>.

Agent skill

The package ships an Agent Skill that teaches coding agents the Rivtor loop: deploy, read the DeployResult and verification verdict, fix from error.cause/error.fix, ask for missing secrets, and stop when a human is needed. It also lists every error code with its fix.

npx rivtor skills install                      # Claude Code: ~/.claude/skills/rivtor
npx rivtor skills install --project            # Claude Code, this project: ./.claude/skills/rivtor
npx rivtor skills install --target codex       # Codex: ~/.agents/skills/rivtor (--project: ./.agents/skills/rivtor)
npx rivtor skills install --target cursor      # Cursor rule: ./.cursor/rules/rivtor.mdc (always per project)
npx rivtor skills install --target all         # all three
npx rivtor skills path                         # where the bundled skill lives, to copy it by hand

Re-running install replaces the previous copy. Start a new agent session to load it.

In Claude Code you can also install it as a plugin:

/plugin marketplace add shyamolkonwar/rivtor-cli
/plugin install rivtor@rivtor

The skill uses the Rivtor MCP tools when they are connected and the rivtor CLI otherwise, so connect the MCP server too (see above).

License

MIT

NPM
rivtor
Install Command
npm install rivtor
Runtime: npx

Remote