Twenty CRM
The open-source CRM with a modern data model - pipelines, workflows, email sync - and no per-seat pricing.
One-click deploy, from $25/mo on a Miget plan.
CRM pricing is the per-seat genre at its purest: Attio runs $29-36 per user, Pipedrive $14-24, HubSpot looks cheap until contact tiers bite - and every new hire is a new line item. Twenty is the open-source reset: a CRM with a genuinely modern data model (custom objects and fields like a database, not a form builder), pipelines, notes, tasks, email sync, and workflows.
Since v2.1 upstream calls self-hosting production-ready, and the shape fits this catalogue perfectly: server and worker from one image on a managed Postgres (stock Postgres 16 - the old custom-image era is over), with a noeviction Valkey for the BullMQ queue that drives email sync, imports, and workflows.
One classic gotcha is handled loudly: SERVER_URL must exactly match the public URL - the README says so twice, because it is the number-one self-hosting support thread upstream.
Upstream project: Twenty
#what you get
- Custom objects and fields - model your business, not a template
- Pipelines, kanban and table views, notes, tasks
- Email sync and workflows (BullMQ worker included)
- REST + GraphQL APIs; webhooks
- Stock Postgres 16 = managed Postgres, auto-wired
- Unlimited seats - AGPL core, CRM not feature-gated
#topology
| Service | Role | Public |
|---|---|---|
| server | app + API (:5000), migrations on start | yes |
| worker | BullMQ: email sync, imports, workflows | no |
| broker | Valkey, noeviction (queue) | no |
| db | Postgres 16 - managed service on Miget, container locally | no |
#miget sizing
// this stack needs
3.3 GiB RAM · 10 GB disk · 4 services
1 GiB each for server and worker is the safe floor (NestJS processes; imports spike the worker). Attachments ride a shared volume - or S3 for a stateless pair.
Hobby - recommended fit
$25/mo
2 vCPU · 4 GiB · 80 GiB disk
Headroom for your own apps: 8 GiB at $49/mo
Professional - production
$43/mo
2 vCPU · 4 GiB · 25 GiB disk
Dedicated resources, production SLOs - plan details
One Miget plan is a fixed pool of compute - the whole stack (managed databases included) deploys inside it, and anything left over runs your other apps. No per-service or per-seat math.
#vs. the managed service
What the hosted equivalents charge, against the flat Miget plan this stack fits on. Prices as of June 2026, sources linked.
| Service | Plan | Monthly | What you get |
|---|---|---|---|
| Twenty CRM on Miget ★ | 4 GiB plan | $25 | this whole stack, flat - no usage meters, and room left for your own apps |
| Attio | Plus | ~$290 | $29/user/mo annual at 10 users (~$36 monthly) |
| Pipedrive | Lite | ~$140 | $14/user/mo annual at 10 users ($24 monthly) |
| HubSpot | Starter | ~$150 | $15/seat/mo annual at 10 seats - contact tiers and hub upgrades climb from there |
CRMs are the purest per-seat genre; Twenty self-hosted makes headcount free.
#vs. other PaaS
Estimated monthly cost of running this exact stack (3.3 GiB RAM, 10 GB disk, 4 containers) elsewhere, from published June 2026 rates.
| Platform | Est. monthly | Notes |
|---|---|---|
| Miget ★ | $25 flat | compose stacks first-class: one deploy, dedicated vCPU, managed Postgres/Valkey, volumes and TLS all included in the plan |
| Heroku | ~$163 | no volumes; nothing between 1 GB ($50) and 2.5 GB ($250) dynos - 2 GB containers cost far more than shown |
| DO App Platform | ~$44 | no persistent volumes - stateful containers need managed DBs/Spaces (base $5 Spaces included here) |
| Render | ~$43 | per-service instances (0.5 GB $7, 2 GB $25) - every container is its own paid service |
| Railway | ~$34 | usage-based ($10/GB RAM-mo); vCPU billed separately at $20/vCPU-mo on top |
| Fly.io | ~$21 | cheapest sticker price - but burstable shared CPUs (1/16 core; dedicated vCPUs cost ~2-3×), no compose deploys (one app per container, manual wiring), managed DBs billed extra |
Estimates assume RAM fully allocated at published on-demand rates - and sticker price isn't the whole comparison: the cheaper rows buy burstable shared CPUs, per-service wiring instead of a compose deploy, and managed databases billed separately. Heroku and DO App Platform have no persistent volumes at all - stateful stacks like this one need workarounds there.
#deploy it
On Miget
- Create a Compose Stack in app.miget.com pointing at the templates repository
- Set the stack path to
twenty -
Set the required variables:
ENCRYPTION_KEY, openssl rand -base64 32REDIS_AUTH, broker passwordSERVER_URL, must EXACTLY match the app’s https domain - set after first deploy
- Deploy. Miget layers
compose.miget.yaml(RAM, privacy, volumes, managed services) automatically
Locally first?
Every template is portable, vanilla Docker Compose - the Miget overrides are ignored locally:
git clone https://github.com/deployable-sh/stacks
cd miget-compose-templates/twenty
docker compose up -d Same files, same behavior. The template README covers connection strings and scaling notes.
#faq
How does the cost compare to Attio or Pipedrive?
A 10-person team pays $290-360/month on Attio or $140-240 on Pipedrive, forever, growing with headcount. Twenty here is $25/month flat with unlimited seats - the crossover is at the second user.
Is self-hosted Twenty actually production-ready?
Upstream marked it so with v2.1 (April 2026) and ships an official compose this template mirrors: same-image server/worker split, stock Postgres, noeviction Redis. The earlier custom-Postgres-image era is over.
What is the SERVER_URL warning about?
Twenty derives auth callbacks and CORS from SERVER_URL, so any mismatch with the real public URL produces opaque 403s - it is the most common self-hosting issue upstream. Set it to the exact https domain and the problem class disappears.
Does the AGPL license matter for my sales data?
No - AGPL governs the software, not your data. A few enterprise-marked files (SSO and similar) are commercially licensed upstream, but the CRM you deploy here is the full product for everyday use.
Ship Twenty CRM today
One compose stack, 3.3 GiB of RAM, from $25/month flat, and it runs on your laptop with the same files.