Self-hosting
Requirements
Server size, tools and public origins for a self-hosted install.
Server size
| CPU | Memory | Disk | |
|---|---|---|---|
| Minimum | 2 vCPU | 4 GB | 20 GB SSD |
| Recommended | 4 vCPU | 8 GB | 40 GB SSD or more |
Use the minimum for a personal instance or a small team sending modest volumes. Use the recommended size for production sending, large audiences, broadcasts and imports.
Servers with 1 vCPU or 2 GB of memory or less are not supported. On those sizes the test suite timed out, or the database was stopped for running out of memory.
Building the app image on the server needs about 2.1 GB of free memory on top of the running stack. On a 4 GB server, add swap or build the image on another machine.
How we measured
We ran the full end-to-end suite against a fresh Docker Compose stack, with hard CPU and memory limits on the containers. Its 35 tests cover sign-in, teams, SSO, domains, sending, receiving, broadcasts, imports and webhooks.
| Container limits | Result |
|---|---|
| 1 vCPU, 1 GB | Failed: the database returned server errors under memory pressure |
| 1 vCPU, 1.5 GB | Failed: every step ran about twice as slowly and one test timed out |
| 2 vCPU, 1.5 GB | Failed: the database was stopped for running out of memory |
| 2 vCPU, 3 GB | Passed all 35 tests, as fast as a run without limits |
The minimum adds room for the operating system and Docker on top of the 3 GB that passed. Without limits, the busiest moments used:
| Service | Peak memory | Peak CPU |
|---|---|---|
| Convex (database and functions) | 1.2 GB | 3.7 cores |
| App (Next.js) | 200 MB | 0.8 cores |
| Migrate (runs on install and upgrade, then exits) | 700 MB | 1.4 cores |
Convex caches index data and compiled functions, up to about 1.25 GB by default. It grows toward that limit over days of use, so a long-running instance uses more memory than a fresh one. The recommended size leaves room for those caches, for traffic bursts, and for exports and imports.
Disk
The Docker images use about 1.1 GB on disk: app 224 MB, migrate 283 MB, and Convex backend 579 MB. The optional SMTP gateway adds 163 MB. The rest is your data: sent and received email bodies, attachments, logs and backups. Retention settings decide how long they stay. Start with 20 GB, watch the convex-data volume, and keep space free for a backup export before each upgrade.
Tools
Servers need only Docker Engine with the Compose v2 plugin. The installer uses prebuilt images. Building from source or developing additionally needs Node.js 22 and pnpm 11.7.0.
Network
Provide HTTPS for three hostnames: the app, api. (REST API and callbacks) and realtime. (the dashboard’s live updates). The installer’s Caddy option does this for you. SES must reach the api. hostname. You need an AWS account and control of a sending domain’s DNS.
Verify your tools
docker info
docker compose versionFor source builds and development, also check:
node --version
pnpm --version