Open source · Apache-2.0 · Powered by celld
The app platform you own.
Noite is a tiny, self-hostable platform for your apps, with durable objects, SQL databases and object storage included. One command installs it, one image runs it, and your data lives in a bucket you own.
curl -fsSL https://noite.now/run.sh | bash -s installUbuntu or Debian · amd64 or arm64 · 2 GB of RAM · no domain needed to try it
curl -fsSL https://noite.now/run.sh | bash -s installChecking the system Ubuntu 24.04 LTSInstalling DockerWriting /opt/noite fresh secretsStarting Noite readyNoite is running. https://app.example.comgit push -u origin mainremote: build ✓ release ✓ deploy ✓https://hello.example.com01 · Product tour
From empty VPS to live app
- 0:00Install on a fresh VPS with one command
- 0:30Register the admin account with a passkey
- 0:55Create an app and an API key
- 1:15git push, watch the build log
- 1:40Logs, metrics and the storage browser
- 2:10Add a custom domain, roll back a deploy
Product tour · 2:30
Recording soon.
02 · How it works
git push. It's live.
- 01 - Install- Run one command on any fresh VPS. Noite installs Docker, generates its secrets, and gets its own TLS certificates.
- 02 - Push- Create an app, add the remote, and push to main. Noite installs, builds, runs your release command, and deploys.
- 03 - Open- Every app gets https://<slug>.<your-domain> automatically. Add your own domains in one click.
git remote add origin https://git:$KEY@git.example.com/hellogit push -u origin main→ https://hello.example.com03 · Features
Everything a small platform needs. Nothing it doesn't.
- Bring your Workers app- Many Cloudflare Workers apps move over as they are: deploy with the wrangler.jsonc you already have, or a cloudflare.config.ts. Durable Objects, D1, R2 and static assets run on celld, and its docs list every supported API.
- Scale to zero, for real- Apps idle for a day go to sleep and free their memory. The next request wakes them and is served normally: no splash page, no dropped request.
- Observability built in- Live logs, 24 h metrics (requests, errors, latency, CPU) and slow-request spans for every app. No collector to run.
- Look inside your data- Browse each app's D1 tables, R2 objects and Durable Objects from the dashboard.
- Instant rollback- Every successful deploy is kept as an immutable bundle. Roll back to any of them in one click.
- Deploy from CI- bunx @noitenow/cli deploy ships a prebuilt dist/ from GitHub Actions and comments the URL on your pull request.
- Domains and TLS, handled- Automatic subdomains, custom domains with on-demand certificates, and no wildcard certificate or DNS API needed.
- Passkeys, not passwords- Sign-in is passkey-first. Registration is invite-only, and every member has codes to invite others.
- Share it safely- Teammates get view, push or admin on each app. In multi-tenant mode, builds and apps run sandboxed, away from the platform's secrets.
04 · Ownership
Your server. Your bucket. Your bill.
Noite keeps everything in one S3 bucket: your Git history, your apps' storage and its own state. Use the bundled store to get started, or point it at R2, S3 or Tigris. Lose the server and nothing is lost: a fresh install restores itself from the bucket.
Powered by celld: ~4 ms to wake a sleeping cell, ~0.5 MB of memory per resident cell (celld's own benchmarks).
05 · Security
Built to let other people push code.
In multi-tenant mode, builds and release commands run as unprivileged users with a cleared environment, and a firewall blocks tenants from localhost, private networks and cloud metadata. A dedicated hostile test app tries to read platform secrets and reach every internal API, and the isolation test suite checks that every attempt fails.
How tenant isolation works →06 · Install
Install it your way.
curl -fsSL https://noite.now/run.sh | bash -s installUbuntu or Debian, amd64 or arm64. Re-run it to upgrade.
curl -fsSLO https://raw.githubusercontent.com/ryuzcorp/noite/main/docker/compose.yaml
docker compose up -dBoots a local trial on http://localhost:9080 with no .env at all.
Docker Compose resource → repo ryuzcorp/noite
Compose file: docker/compose.yaml · branch mainSet the domain and secrets as environment variables, then deploy.
Service: ghcr.io/ryuzcorp/noite:alpha
Volume: /data · Domain: *.<your-domain> → port 80One service, one volume, and R2, Tigris or a RustFS service as the bucket.
07 · FAQ
Questions, answered.
Can I migrate an app from Cloudflare Workers?
Often, yes, with some limits. Noite runs apps on celld, which supports fetch handlers, Durable Objects, D1, R2, KV, Queues, Workflows, Cron and static assets, and reads your existing wrangler.jsonc. Bindings outside that list won't work, and Wrangler config keys celld doesn't accept have to be removed. celld's docs list the supported APIs in detail.
How big a server do I need?
2 GB of RAM is enough to start. Idle apps sleep and give their memory back, so many small apps fit on one box.
Do I need a domain?
Not to try it. The installer falls back to <your-ip>.sslip.io, which works with no DNS setup. For real use, point *.yourdomain at the server.
How do updates work?
Re-run the install command. It keeps your configuration and secrets, pulls the newest release on your channel and restarts.
What does it cost?
Noite is open source under Apache-2.0. You pay for your server and your bucket, nothing else.
Can my team use it?
Yes. Invite people with codes and give them view, push or admin on each app. Multi-tenant mode sandboxes everyone's code from the platform.