Run the server where you already work
The Crunu server is blind by design. At app.crunu.com or on infrastructure you control, it stores ciphertext, public keys and signed records, and has no key that decrypts a single value.
What you need first
- 1Node.js 24 and the server codeThe operator tools server-init, doctor and crunu-server run on it. The server isn’t a public download: write to support@crunu.com to get it.
- 2An address you’ll keepSign-in signatures, share links, passkeys and agents are bound to the server’s domain, so it can’t change later.
- 3A safe place for .envA password manager works. The file holds SERVER_KEY, the server’s main secret.
Once per server
Install
Five steps take you from an empty machine or cloud account to a running server with its first owner.
1Decide who runs the server
Encryption happens in the browser and in the
crunuagent, never on the server. So choosing between app.crunu.com and your own server is about who operates it and who sees its metadata. Nobody on the server side can read your values in either case.- app.crunu.com: Crunu runs the server on Cloudflare Workers with a D1 database, free during early access
- Your own server: you run it, you pay your platform provider, and only you see its metadata
- Metadata means names of organizations, projects, environments and machines, email addresses, the audit log, and the size and time of versions
Example. Kiteline is a fictional company. 2Generate the server’s settings
server-initwrites a.envfile with a newSERVER_KEY, a one-timeBOOTSTRAP_TOKENfor the first owner and aCRON_SECRET. Only your user can read the file.- Save a copy in your password manager right away
- Losing SERVER_KEY signs everyone out and breaks share links. Environment data survives
3Pick one of five platforms
Every platform runs the same server with the same database schema, and the web app is built into it. Each deploy script checks
.envwith the code the server uses at startup, so a wrong setting stops the deploy with a clear message.- Docker on your own server: Caddy issues TLS certificates, and Cloudflare Tunnel works when you want no open ports
- Cloudflare Workers: Free is fine for a trial, but a team needs Workers Paid, because Free gives each request 10 ms of CPU time
- Vercel: previews get their own database and server key, and on the Hobby plan cleanup runs at most once a day
- AWS App Runner only in AWS accounts that already use it: AWS has closed it to new customers, and Crunu has no script for Amazon ECS Express Mode
Example. Kiteline is a fictional company. 4Deploy with the platform’s script
One command per platform builds and deploys the server. Secrets reach the platform through stdin or a file only you can read, never through command arguments or output. The server applies database migrations itself at startup.
- The same script installs the first version and every update
- On Cloudflare, code and secrets ship as one version, so a failed deploy changes nothing
5Create the first owner
Open the server’s address and enter the bootstrap key from
.env. Your account and organization keys are created in your browser, and the key stops working after this one use. Then save your Emergency Kit, create a recovery code and turn on a second factor.- Without the Emergency Kit and your password, a new device can’t sign in
- Everyone else joins by invitation
Every day
Run
Once it’s up, three habits keep the server healthy: a check after every deploy, monitoring, and a daily backup.
6Check the deployment with doctor
doctorchecks a running server from the outside: health, TLS and certificate expiry, security headers, compression of API responses, the server clock, the agent release, migrations, cleanup and the client address behind proxies.- An overall result and an exit code, so it fits into cron and CI
- --json gives machine-readable output
7Watch health, metrics and alerts
GET /v2/healthworks with uptime checkers such as UptimeRobot or Better Stack.GET /v2/statuswith an operator token returns metrics as JSON or in Prometheus format, with no values and no email addresses. Alerts reach your team through a signed webhook or by email.- Slack, Microsoft Teams and PagerDuty connect through their incoming webhooks
- On Cloud Run and App Runner, cleanup runs only with traffic, so alerts based on state can arrive late
8Back up to any storage you like
crunu-server exportwrites the whole database to one archive. It holds no open values, so you can keep it with any provider. Keep the.envfile apart from it, in your password manager.- Export every day and keep 30 days. The server has no built-in scheduler, and the backup guide gives a ready cron line for Docker
- Verify a copy every month, or better, restore it into a scratch database
- A restore rolls back everything after the copy, and devices that saw newer data refuse the older state until you reset them
As needed
Change
Moving, rotating the server key and updating use the deploy scripts and crunu-server you already have.
9Move to another platform with one archive
Export the database, verify the archive, import it into an empty database on the new platform and deploy there with the same
.env, then switch DNS. Any of the six setups can move to any other, in either direction.- Keep the same SERVER_KEY and the same address. Only the DNS record changes
- Machines keep running on the variables they already have for their lease, up to 24 hours
- Keep the old platform for a week. Going back is a DNS change
Example. Kiteline is a fictional company. 10Rotate the server key without signing anyone out
During a rotation the previous key keeps working, tokens are rehashed with the new key as they’re used, and
rotate-keyre-encrypts TOTP secrets and alert channels. People stay signed in and share links keep opening. Environment data is never encrypted with this key.- Four steps: new-server-key, deploy, rotate-key, drop-previous-key
- Rotate when .env may have been seen, after a move, or once a year
11Update without a separate migration step
An update is the same deploy script as the first install, and the server applies migrations at startup. Migrations only add, and released ones are protected by checksums, so you can roll the code back without rolling back the database.
- Web releases are signed, and the server serves the signature so a deployed site can be checked against it
- Rolling back below version 6.0 isn’t possible
Self-hosting questions
What operators ask before they run their own server.
Another question? Email support@crunu.com.
Is app.crunu.com the same software I can host myself?
Yes. app.crunu.com runs the same Crunu server, deployed to Cloudflare Workers with a D1 database.
Can the people who run app.crunu.com read my secrets?
No. The server stores ciphertext and has no key to decrypt it. As the operator, Crunu does see metadata: names of organizations, projects, environments and machines, email addresses, the audit log, and the size and time of each version. One risk applies to every web-based vault: a compromised server could serve a modified web app that sees your password and Secret Key when you sign in. Signed releases and a strict content security policy reduce that risk, and the limitations page explains the rest.
Can I move from app.crunu.com to my own server later?
Not in one step. The archive that moves a server between platforms is made from the server’s whole database, and on app.crunu.com only the operator has access to it. At any time, you can export each environment you can read as a .env file or download an offline copy, then add those files to your own server. History, access settings and the audit log don’t carry over this way.
Is AWS supported?
Partly. The Crunu script deploys to AWS App Runner, but AWS has closed App Runner to new customers, so it works only in accounts that already use it. Crunu has no script for Amazon ECS Express Mode, the service AWS recommends instead. With a new AWS account, choose Cloud Run, Vercel or your own server.
What happens to machines and CI during a move?
Machines keep running on the variables they already have, for the length of their lease, up to 24 hours. Ask the team not to change environments or invite people for 15 to 30 minutes while you switch: anything written to the old server after the export won’t reach the new one.
Can I run several server instances for high availability?
On Postgres, several instances can share one database: audit log writes are serialized by a database lock. There’s no guide for a failover cluster, so plan it as your own setup.
Do the operator tools have an English interface?
Yes. server-init, doctor and crunu-server print in English, or in Russian when CRUNU_LANG or the system locale is Russian.
How do I get the server for self-hosting?
The server isn’t published as a public download. Write to support@crunu.com and say which platform you plan to use.
Try Crunu on the hosted service first
Free during early access. Your password and Secret Key are created in your browser and never reach the server.