web apps & apis
Bring your framework. We bring everything else.
Node, Python, Go, Ruby, anything that fits in a container. You get a public URL on your domain with TLS handled, logs you can tail, replicas that grow with traffic, and a rollback button when a release goes sideways.
raypacks · auto-detected stacks · or your own dockerfile
If it runs in a container, it runs on Nubo.
Builds run through Raypacks, our own buildpacks, so the common stacks auto-detect from your repo. Need something else? Drop in a Dockerfile and we'll run that instead.
runtimes · auto-detected
frameworks
- React
- Next.js
- Remix
- SvelteKit
- Nuxt
- Astro
- Express
- Django
- FastAPI
- Flask
- Rails
- ASP.NET Core
- Laravel
Wired in, day one. The stuff you'd otherwise build into a server.
Nubo handles the nginx config, the certbot cron, and the log shipper for you. You write the app; we run the layer between your laptop and the public URL.
- Custom domain + TLS · Connect your domain, type the hostname, click save. We issue the cert and renew it.
- Real-time logs · Every request, every console.log, every error, streamed into the dashboard you deploy from.
- One-click rollback · Every deploy is saved. Bad release? Roll back to the last good one in seconds.
- Secrets & env vars · Encrypted at rest, scoped per Frame, never checked into your repo.
metrics & logs
See what your app is actually doing.
Per-project numbers, live logs, deploy history, and one-click rollback. The whole set lives in one console, next to the deploys that produced them.
metrics
The numbers worth tracking.
Requests, error rate, and p95 latency, plus CPU, memory, egress, and deploy success. A per-frame breakdown underneath, so you can tell which Frame is doing the work and which one is leaking.
Requests / min
1,140
p95 latency
40ms
Error rate
0.3%
CPU avg
17%
- GET /api/posts 1,240
- GET / 880
- POST /api/auth/login 410
- GET /api/me 360
live logs
Tail it in real time.
Runtime logs stream into the same dashboard you deploy from, line by line as your app prints them. Open the tab and the last few minutes are already there, then it tails live. Logs are kept across deploys, so yesterday's bug is still readable today.
one-click rollback
Shipped a bug?
Undo it.
Browse the full deploy history for any Frame. When a release goes sideways, click "Roll back" on the last good one. Traffic returns to it in seconds. No git surgery required.
- v1.4.2 commit c0ffeebee · mainfailed
- v1.4.1 commit 4b2a91e · main
- v1.4.0 commit ae31fa2 · main
- v1.3.9 commit 9f8de31 · main
custom domains
Your domain. HTTPS handled.
Connect your domain in the dashboard, paste the hostname, hit save. We issue the TLS cert, keep it renewed, and route traffic. The whole thing takes a minute.
Hostname
- Domain connected
- TLS certificate issued
- Routing live traffic
A live URL for every pull request.
Open a PR, get a Frame with its own URL. Share it with design, QA, or your boss before anything ships to production. Closed and merged PRs clean themselves up.
Add Stripe checkout webhook
@gabriel wants to merge into main
- Checks and a PR comment · Build status reports back as a GitHub check, and Nubo writes a comment on the PR with the preview link and the result. No tab-switching to find out if it shipped.
- Skip, ignore, or hold · Put [skip ci] in a commit to skip the build. Ignore paths that do not affect the app. Flip auto-deploy off when you want to push without going live.
Scales as the traffic does.
Set a min and max on replicas and Nubo Cloud scales between them as your app gets busier. Pick a region close to your users, or run in two when one isn't enough.
replicas
3 / 10
rps
428
p95
38ms
Plays well with the rest of your stack.
Connect to managed Postgres, Redis, or any external API the same way you would on a server. Drop the URL into secrets and ship.
- DATABASE_URL =
- REDIS_URL =
- STRIPE_SECRET_KEY =
- SENTRY_DSN =
stop reading
Go deploy something.
Free for 7 days, no card, no sales call. We will not pretend this page wasn't built to make you want to ship on a Sunday. It was.