Business Apps 4 services 3.3 GiB RAM 10 GB disk

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.

#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

ServiceRolePublic
serverapp + API (:5000), migrations on startyes
workerBullMQ: email sync, imports, workflowsno
brokerValkey, noeviction (queue)no
dbPostgres 16 - managed service on Miget, container locallyno

#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.

ServicePlanMonthlyWhat you get
Twenty CRM on Miget 4 GiB plan$25this whole stack, flat - no usage meters, and room left for your own apps
AttioPlus~$290$29/user/mo annual at 10 users (~$36 monthly)
PipedriveLite~$140$14/user/mo annual at 10 users ($24 monthly)
HubSpotStarter~$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.

PlatformEst. monthlyNotes
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

  1. Create a Compose Stack in app.miget.com pointing at the templates repository
  2. Set the stack path to twenty
  3. Set the required variables:
    • ENCRYPTION_KEY, openssl rand -base64 32
    • REDIS_AUTH, broker password
    • SERVER_URL, must EXACTLY match the app’s https domain - set after first deploy
  4. 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.