Ship from a folder, a repository or an image. Roll back without a rebuild.
ry deploy reads your project, builds it on Rytiv's machines and rolls it out one machine at a time behind https://<app>.rytiv.app. A new machine gets traffic only after it answers. If it does not, the old version keeps serving.
ry deploy web --source .
Apps, in detail.
Framework detected
Next.js, SvelteKit, Nuxt, Remix, TanStack Start, SolidStart, Analog, Astro, Vite, Gatsby, Docusaurus, Create React App, VitePress, Eleventy, Angular and plain Node.js. A Dockerfile at the root wins over the detection; anything else, except a plain static folder, brings one.
Every push deploys
ry git connect links a GitHub repository. Every push to the branch builds and deploys through the same path as ry deploy. A preview per branch is an app of its own, protected by a link.
Rolls one machine at a time
Without a volume, a new machine must boot and answer on its port, and pass the health check if you set one, before an old one leaves traffic. If it fails, the new machine is discarded and the old version keeps serving.
Rolled back on its own
For five minutes after a deploy to machines Rytiv compares the share of 5xx answers with the rate before. Clearly worse, with at least 20 requests to judge, and the deploy is rolled back. Databases are never rolled back.
Secrets nobody reads back
Stored encrypted; the API lists names, never values. A build sees only the secrets marked for it. NEXT_PUBLIC_, VITE_, PUBLIC_ and similar prefixes are marked by default.
Sleeps when you say so
An app sleeps only with a sleep rule, say --sleep 5m. Up to 2 GB of memory it sleeps with its memory and the first request brings it back in about a quarter of a second while its host has room. Larger machines stop and boot cold. Files on a volume are kept.
Deploy, watch, roll back.
The same app from your terminal, from your own code and from your coding agent. One key, one organization.
ry deploy web --source . # detect, build, roll ry secrets set web API_KEY=example-value ry deploy web --health-path /api/health --sleep 5m ry logs web -f ry releases web ry rollback web # previous release, no rebuild ry git connect web --repo acme/web --branch main
curl -X POST https://api.rytiv.com/v1/apps \
-H "Authorization: Bearer $RYTIV_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "web"}'
curl -X POST https://api.rytiv.com/v1/apps/web/deploy \
-H "Authorization: Bearer $RYTIV_TOKEN" \
-H "Content-Type: application/json" \
-d '{"image": "nginx:alpine", "internalPort": 80}'
# 202 with the deploy. Poll GET /v1/deploys/:id until
# status is done or error; error carries the bootLog. # once: add Rytiv to Claude Code
claude mcp add --transport http rytiv https://api.rytiv.com/v1/mcp --header "Authorization: Bearer <your key>"
> Deploy nginx:alpine as an app called hello on port 80.
deploy_app {"app": "hello", "image": "nginx:alpine", "internalPort": 80}
→ app, url, deployId, status
get_logs {"app": "hello"}
set_env {"app": "hello", "values": {"LOG_LEVEL": "info"}} The bounds, as the platform enforces them.
Limits
- Machines per app
- 1 to 20; exactly 1 with a volume
- Memory, vCPUs
- 128 to 16384 MB, 1 to 16
- Disk
- 512 to 131072 MB
- Apps per team
- 10, computers included; contact us for more
- Build timeout
- 8 min; 15 for Next.js, 20 for a Dockerfile
- Static site
- 1 GiB and 100,000 files
- Previews
- 10 per app; idle ones close after 14 days
- Builds kept per app
- 3
Every bound is on Limits and quotas. A request outside them answers 400 with bad-request and names the field.
Errors you will meet
| 409 | name-takenThe name is used somewhere on Rytiv |
| 400 | name-reservedThe name is reserved for the platform |
| 403 | org-limit-apps10 apps in a team, computers included |
| 402 | credit-blockedThe credit is used up; nothing new starts until a top-up |
| 409 | deploy-in-flightAnother deploy of this app is running |
| 409 | volume-needs-single-machineAn app with a volume runs exactly one machine |
Every error is JSON with a sentence and a stable code. Branch on code. See the error catalog.
A new app runs one machine with 512 MB: €0.0038 per hour of memory while it is awake, plus CPU only while it computes. Builds are included.
For businesses and freelancers. All prices excluding VAT. Prepaid credit in euros, no plans, no seats. Introductory pricing until 31 January 2027. Pricing
What developers ask about Apps.
Answers from the documentation. The Apps guide has the rest.
What if my project is not one of the detected frameworks?
Put a Dockerfile or Containerfile at the root of the directory; it wins over the detection. Or deploy a prebuilt image with ry deploy web --image nginx:alpine --port 80. ry detect shows what Rytiv finds without changing anything.
What happens when a deploy fails?
The deploy stops, the new machine is discarded and the old version keeps serving. The deploy answers error with the reason and the last lines of the machine's console in bootLog.
Does a rollback rebuild?
No. A rollback deploys an earlier release's image again with the app's current settings. Secrets, volumes and databases stay as they are. ry rollback web 3 names a version.
Can the build see my secrets?
Only the secrets marked for the build. A new secret with a public prefix such as NEXT_PUBLIC_ or VITE_ is marked by default; anything else needs --build. Every secret reaches the running app.
Do apps sleep?
Only if you give them a sleep rule. A new app never sleeps on its own. --sleep off takes the rule away again for a worker that has to stay awake.
How do previews work?
ry preview create web --branch feature/login, or a push to a connected branch. Each preview is an app of its own, protected by a link, closed when the branch or pull request closes or after 14 idle days.
On the same API, the same bill.
Deploy your first app.
Run ry in your project directory: it signs you in, shows what it detected, asks for a name and deploys.
claude mcp add --transport http rytiv https://api.rytiv.com/v1/mcp --header "Authorization: Bearer <your key>"
For businesses and freelancers, from a solo developer to a team. Pricing