Twenty

Modern open-source CRM alternative

CRM & Business Apps ★ 57.3k stars Medium setup AGPL-3.0

Twenty is a modern, open-source CRM designed as a flexible alternative to Salesforce with a clean, customizable interface. It targets startups and teams wanting an open CRM. It is deployed via Docker.

Key features

  • Modern customizable CRM
  • Flexible data model
  • Keyboard-driven UI
  • API and webhooks

Pros & cons

Strengths

  • Clean modern interface
  • Customizable objects
  • Active development

Trade-offs

  • Young project
  • Some features still maturing

Twenty replaces

Last reviewed Aug 26, 2026 · 875 words

Twenty is the CRM I would put in front of a 3-to-30-person team that has outgrown a spreadsheet and refuses to pay per seat for Salesforce or HubSpot. It is 3 years old, AGPL-3.0, past 55,000 GitHub stars, and it behaves like Linear or Notion rather than a 2008 enterprise form. The trade is that you host Postgres and Redis next to it, it wants 2 GB of RAM, and some features are visibly still under construction. For a pipeline of a few hundred deals and a team that values a fast keyboard-driven UI over a 20-year plugin catalogue, that trade is a good one.

Installation is a script, and the script is fine

bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)

It fetches a compose file with 4 services (the app server, a background worker, Postgres, and Redis), generates an APP_SECRET, and brings the stack up on port 3000. The .env it writes is short: SERVER_URL must be the public address you will actually use, PG_DATABASE_URL and REDIS_URL point at the bundled containers, and STORAGE_TYPE=local keeps uploads on disk. Put a TLS proxy in front, set SERVER_URL to the https address, and restart before you create the first workspace, because links in invitation emails are minted from that value. The worker is not optional: imports, email sync, and webhooks are all queued jobs, and with the worker down the UI looks fine while nothing happens in the background.

The data model is the product

Salesforce charges for custom objects. In Twenty they are the whole idea. The stock objects are People, Companies, Opportunities, Tasks, and Notes, and from Settings you add your own: a "Grant" object related to Companies for a nonprofit, a "Property" object for a letting agency, a "Vessel" object for a marina. Field types cover text, number, currency, select, multi-select, rating, date, address, phones, emails, links, and relations to any other object. Every object gets saved views, table or kanban, grouped by any select field, with filters and sorts stored per view. I rebuilt a 6-tab spreadsheet as 3 objects and 5 views in about 40 minutes, and the team stopped asking where the latest copy was.

Email and calendar sync means registering your own OAuth apps

Twenty attaches Gmail and Google Calendar (and Microsoft 365) threads and events to the matching People and Companies, which is the feature that makes a CRM feel alive. Self-hosted, it works only after you create an OAuth client in Google Cloud Console or Azure and paste the client ID and secret into .env. Google's part is the slow bit: an app requesting Gmail scopes normally needs verification, but if your domain is a Google Workspace tenant you can mark the OAuth app "Internal" and skip verification entirely. Budget an hour for this, and do it before demoing to the team, because a CRM with no email history looks like a fancy contacts list.

API and webhooks make it a hub, not an island

Every workspace can issue API keys from Settings, and both a REST and a GraphQL endpoint expose the full data model, custom objects included. Webhooks fire on record create, update, and delete. That is enough to pipe new signups from a web form into People, or push stage changes out to Slack through n8n, without waiting for Twenty to ship a native integration. CSV import exists per object and handles the migration from a spreadsheet or a HubSpot export well enough; the field-mapping step is where you discover which of your columns were never really consistent.

Young project: what that means on a Tuesday

The catalogue's cons are "young project" and "some features still maturing", and in practice that reads as frequent releases and occasional breaking changes. Upgrades are not "bump the image tag": each release notes whether a migration command must be run inside the server container, and skipping it leaves you with a stack that starts and then errors on the first page load. Dump Postgres before every upgrade. Some corners are thin: reporting is basic, permissions are coarser than a 200-seat sales org needs, and mobile is the responsive web app rather than a native client. If you need mature workflow automation and a decade of stability, EspoCRM is the boring, well-worn alternative; if your CRM is one module of a wider ERP need, the Odoo vs Twenty comparison is the one to read.

What I'd do

Install script on a 2-CPU, 4 GB VM, Caddy in front, SERVER_URL set to the https name before the first login. Spend the first hour on the data model, not on importing: decide the objects and the pipeline stages, then bring in the CSV. Register the Google OAuth app as Internal the same day. Nightly pg_dump, upgrades once a month with the release notes open. For a team under 30 that lives in a browser, that setup replaces a per-seat bill with a $10-a-month VM and gives you a CRM shaped like your business instead of the other way round.

Compare Twenty

18 head-to-head comparisons.

Similar crm & business apps apps