Twenty

Kanban board of sales opportunities sorted by stage, each card listing an amount, a company and a contact.

Custom objects built in the UI or shipped from a CLI

Twenty is an open source CRM built in TypeScript, with a NestJS server backed by PostgreSQL and Redis and a React front end. Teams design the data model themselves: custom objects and fields, shown as tables, Kanban boards or calendars. The README also declares those objects, fields and views in code with twenty-sdk, then pushes them to a workspace with the twenty CLI. The project's own pitch is a CRM you build, ship and version like the rest of your stack.

JavaScript workflow steps and inboxes tied to records

  • Workflows: a run starts when a record is created, updated or deleted, on a schedule, from a manual click or from an incoming webhook. Steps can create, update or delete records, loop over a list, wait, send email, run JavaScript, call an HTTP API or hand a task to an AI agent.
  • Email and calendar sync: Gmail and Google Calendar, Outlook and Microsoft Calendar, or any other provider over IMAP, SMTP and CalDAV. Each message or meeting lands on the record it belongs to.
  • APIs: REST and GraphQL, webhooks and an MCP server on every plan.
  • Access control: custom roles with object-level and field-level permissions.
  • Bring-your-own-key AI when self-hosted: models from OpenAI, Anthropic, Google, Mistral and xAI work on every plan, the free one included, once their API key is set.
  • Apps under any license: an extra permission attached to the AGPL lets an app that only talks to Twenty through its APIs, webhooks and SDKs ship under whatever terms its author picks, proprietary ones included. The CLI and SDKs are MIT.

Organization key for SSO, four containers to run

Free self-hosting stops at the Pro feature set. The billing docs give a free instance everything in the cloud Pro plan, with support limited to the Discord community. SSO (SAML 2.0, Google Workspace, Microsoft Entra ID), record-level permissions, audit logs and unlimited workspaces need a paid Organization key, obtained from the admin panel. Custom AI providers, local models among them, are free only up to 25 seats.

Not all of the code is AGPL-3.0. The LICENSE file puts files headed with /* @license Enterprise */ under a commercial license that allows production use only with an Enterprise Edition subscription. According to the legal FAQ, a version modified for internal use carries no duty to publish; reselling a modified version means publishing the changes or buying the Organization license. Krayin, a Laravel CRM under MIT, has no such requirement.

The official Docker Compose file starts four containers. Server and worker run the same twentycrm/twenty image, next to PostgreSQL 16 and Redis. The docs ask for at least 2 GB of RAM, and PostgreSQL 15 or later since v2.34. Lose ENCRYPTION_KEY and every secret stored in the database, OAuth tokens and TOTP secrets included, becomes unreadable. On a self-hosted instance, Gmail sync runs through your own Google Cloud project and OAuth credentials, and Microsoft 365 sync takes an Azure app plus a Microsoft 365 license for every user.

The project targets technical teams and calls itself "the open alternative to Salesforce". The README pitches it to teams that want to assemble a custom CRM; the "Why Twenty" page sets that against hiring a Salesforce consultant and learning Apex.

v2.51.0 shipped on 25 October 2026. Versions 2.46 through 2.51 all came out between 12 and 25 October. Since v1.23 an instance can jump straight to the latest release: the server runs migrations at startup, and the upgrade guide asks for a database backup before every upgrade.