CLI
The vinssi command does everything the dashboard does for projects, deployments and Pages, and it is the only way to publish static content. It is a single JavaScript file with no dependencies and runs on Node 20 or newer.
Install
Run it without installing:
npx vinssi --help
Or install it globally:
npm install -g vinssi
vinssi --version
Sign in
vinssi login
This opens the dashboard in your browser. Approve the request and the CLI receives a personal API token, which it stores in ~/.vinssi/credentials.json with owner-only permissions. The browser tab can be closed afterwards. If no browser opens, paste the printed URL into one; the request expires after five minutes.
Check who you are signed in as:
vinssi whoami
vinssi logout revokes the token on the server and deletes the file.
Commands
vinssi login [--name <label>] Browser-mediated sign in
vinssi logout Revoke and delete the saved token
vinssi whoami Show the current workspace
vinssi health Ping the API
vinssi projects list
vinssi projects create <name>
vinssi projects show <projectId>
vinssi projects connect-repo <projectId> <owner/repo>
vinssi deploy <projectId> [--ref <ref>] Start a deployment
vinssi deployments list <projectId>
vinssi deployments show <deploymentId>
vinssi deployments logs <deploymentId> Print the build log
vinssi deployments rollback <deploymentId>
vinssi pages publish <file|dir> [--name <n>] [--site <siteId>] [--json]
vinssi pages list [--json]
vinssi pages versions <siteId>
vinssi pages usage <siteId>
vinssi pages rollback <siteId> [versionId]
vinssi pages delete <siteId>
vinssi db plans [--json] List managed Postgres tiers and prices
vinssi db status <projectId> [--json]
vinssi db create <projectId> --plan <lite|starter|standard|plus>
vinssi db upgrade <projectId> --plan <tier>
vinssi db url <projectId> Print DATABASE_URL only; logged
vinssi db retry <projectId> Retry a failed provision or plan change
vinssi db delete <projectId> --confirm
vinssi tokens create <name> [--expires-in <days>]
vinssi tokens list
vinssi tokens revoke <tokenId>
Most commands print human-readable output. pages publish, pages list, db plans and db status accept --json for scripting; projects show, deployments show and projects create always print JSON. db url prints only the connection string so it can be piped; each call is recorded in the project's activity log. See Databases for what the db commands do.
The CLI cannot manage environment variables, domains or billing yet. Use the dashboard for those.
Use in CI
Do not copy your personal login token into CI. Create a dedicated token with an expiry instead:
vinssi tokens create github-actions --expires-in 90
The token is printed once. Store it as a secret and pass it as VINSSI_TOKEN:
# .github/workflows/deploy.yml
- name: Deploy to Vinssi
env:
VINSSI_TOKEN: ${{ secrets.VINSSI_TOKEN }}
run: npx vinssi deploy ${{ vars.VINSSI_PROJECT_ID }} --ref ${{ github.sha }}
VINSSI_TOKEN takes precedence over the saved credentials file, so the same commands work in both places. Tokens inherit the permissions of the user who created them and count against the same rate limits.
Note that pushes to the default branch already deploy automatically once the GitHub App is installed; a CI deploy step is only needed when you want to deploy a different ref or gate the deploy on your own checks.
Environment variables
| Variable | Purpose |
|---|---|
VINSSI_TOKEN | API token. Overrides the credentials file. |
VINSSI_API_URL | API base URL. Defaults to https://vinssi.ai. |
VINSSI_DASHBOARD_URL | Dashboard URL used by login. Defaults to https://vinssi.ai. |
VINSSI_CONFIG_DIR | Directory for credentials.json. Defaults to ~/.vinssi. |
Exit codes
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | The command ran and failed; the error message says why |
| 2 | Missing or invalid arguments |
An expired or revoked token produces an UNAUTHORIZED error with a hint to run vinssi login again.