Static Sites
Best for: React, Vue, Next.js static exports, documentation, landing pages
Features:
- Global CDN distribution
- Instant cache invalidation
- Automatic SSL certificates
- Fixed profile pricing
varitykit app deployDeploy your application to Varity from the Dashboard, CLI, or MCP server.
From the Dashboard, choose a GitHub repository, add environment variables, review the fixed monthly price for the reserved hardware, and deploy.
Varity accepts three kinds of input, from the CLI, the Developer Portal, or the MCP server in your AI coding tool:
| Input | How | Best for |
|---|---|---|
| Your project / GitHub repo | varitykit app deploy (this page) | Apps in a supported framework with automatic detection and builds |
| A Docker image | varitykit app deploy --image <ref>. See Deploy a Docker Image | Anything already containerized, any language |
| A template | The portal gallery. See agent templates | One-click AI agent and tool deployments |
The rest of this page covers the first path: deploying your own project.
Install the CLI
pipx install varitykitvaritykit loginBuild your project
npm run buildDeploy
varitykit app deployYour app is live!
Varity will output your live URL:
✓ Deployed successfully!✓ URL: https://your-app.varity.app✓ Build time: 1m 23s✓ Status: LiveWhen you run varitykit app deploy:
npm run build)https://varity.app/<name>/; dynamic apps use https://<name>.varity.app/All of this happens automatically.
Choose the right hosting for your application type:
Static Sites
Best for: React, Vue, Next.js static exports, documentation, landing pages
Features:
varitykit app deployDynamic Apps
Best for: Full-stack apps, APIs, real-time applications, databases
Features:
varitykit app deploy --hosting dynamicSupply the third-party secrets and configuration your application owns. Varity does not create shared development credentials or an application ID variable. When a supported attached service is actually provisioned, its reserved connection variables are injected into the deployed runtime.
See Environment Variables and Deployment Credentials.
Always test your build works locally:
npm run buildnpm run startVisit http://localhost:3000 and verify everything works.
View your deployment history:
varitykit app listThe table has the columns ID, Name, Status, Runtime, URL, Outcome, and Updated. In a narrow terminal (80 columns) only ID and Name fit, so widen the terminal or use varitykit --json app list.
To recover after a bad deploy, redeploy a known-good version of your app. Check out the working commit and run varitykit app deploy again under the same --name. The deployment at that URL is replaced with the version you just built.
Check the details of a specific deployment:
varitykit app info my-appView overall deployment status:
varitykit app statusEvery deployment gets a public URL. URL format depends on hosting type:
varitykit app deploy --name my-app# Static hosting → https://varity.app/my-app/# Dynamic hosting → https://my-app.varity.app/See App URLs & Subdomains for naming rules and the current status of bring-your-own domains.
Verify your build works locally:
npm run buildCheck the build output directory exists:
.next/ or out/dist/ or build/dist/Credentials are auto-provided. If you see this error, run varitykit doctor to check your setup.
Check your internet connection:
varitykit doctorIf issues persist, you can preview what would deploy without deploying:
varitykit app deploy --dry-run| Option | Default | Description |
|---|---|---|
--hosting | auto | Hosting type: auto, static, or dynamic (auto picks based on your project) |
--name | from package.json | App name (and URL) for this deployment |
--path | . | Project directory |
--repo-url | None | Deploy directly from a GitHub repo URL instead of a local path |
--dry-run | off | Simulate the deploy: show what would deploy without deploying (not supported with --image) |
Instead of a project directory, you can deploy an existing image. See Deploy a Docker Image for the full flow.
| Option | Default | Description |
|---|---|---|
--image | None | Image reference to deploy as-is (e.g. ghcr.io/acme/api:1.4.2) |
--port | 80 | Container port your app listens on |
--image-registry / --image-username / --image-password | None | Credentials for a private registry |