Mindket

Twenty

Newversion 2 · updated
Star60.6k

Overview

An open-source CRM, mostly under AGPLv3, that your team can use in the cloud, host itself or extend with TypeScript apps. The setup notes cover Docker Compose, a source checkout, the app CLI, and MCP and agent skills for Claude Code, Codex and Cursor.

Twenty is an open-source project on GitHub in the Business category, listed by Mindket. It is free. This is version 2, last updated on . Install it from GitHub as its README says. Get Mindket’s setup notes on your Mindket account, as a zip.

At a glance

Runs in
  • Google and Microsoft mailboxes and calendars, plus mailboxes over SMTP and calendars over CalDAV
  • Workflows with record, manual, schedule and webhook triggers, and steps that call an HTTP address or run JavaScript
  • REST and GraphQL APIs generated from your own workspace schema, with a Metadata API for objects and fields
  • An MCP server for Claude Desktop, Claude Code, Cursor, ChatGPT and other clients
Start with
bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)

Platform

Claude DesktopDesktop app
Claude CodeCoding agent
CursorCode editor
ChatGPTAI chat
CodexCoding agent
DockerContainer

About

What it is

Twenty is an open-source CRM that your team shapes to its own business. It starts with Companies, People, Opportunities, Tasks and Notes, and you add custom objects and fields beside them. Email and calendar sync fill the records, views and workflows run the daily work, and AI agents act inside your permission model. You can use the cloud product, host it yourself, or extend it with apps written in TypeScript.

  1. You sign up for the cloud, or start your own server
  2. Connect a mailbox so real emails and meetings arrive
  3. Shape objects and fields, then import records from CSV
  4. Build views and workflows for the daily work
  5. Use the AI chat, connect MCP or add an app if you want more

Who it suits

Teams with developers who want a CRM they can reshape, and organizations that must keep customer data on their own servers. The Meet Twenty page is plain about who should look elsewhere: teams that want a CRM they never have to think about, and companies that need hundreds of pre-built integrations today.

Who uses it, and how
IndustryWho uses itHow they use itExample
Sales teamsTeams that track deals and contactsKeep Companies, People and Opportunities with the synced email on each recordA rep connects a Google account under Settings, Accounts, and the emails and meetings with a contact land on that record.
StartupsTechnical founders who outgrew spreadsheets and NotionModel the business as custom objects and fieldsA founder adds a Person Type field to People, as the Quickstart suggests, and not a separate object that would have no email history.
Go-to-market teamsTeams that want their own lead scoring or enrichmentBuild workflows from a trigger and a chain of stepsThe Workflows page lists a Slack alert when a deal reaches a certain stage as one thing to build.
Self-hosting organizationsPrivacy-conscious teams that must own their dataRun the Docker Compose install and keep it off the public internetAn admin follows the Tailscale route on the Securing page, binds the server port to 127.0.0.1, joins the tailnet with sudo tailscale up --hostname=twenty and runs sudo tailscale serve --bg 3000.
Developers and agenciesTeams that know TypeScript and ReactBuild an app that adds objects, logic functions and front componentsA developer scaffolds with twenty app init and keeps twenty app dev running, so an edited file shows in the UI within a second.
AI-assisted teamsPeople who work through a coding agentConnect an MCP client to the workspaceA user adds the workspace’s /mcp address to Claude Code and asks for the 5 most recently created companies, a prompt from the MCP page.

Where to use it

Twenty opens in a browser, in the cloud or on a server you run. It connects to other tools in these ways.

  • Google and Microsoft mailboxes and calendars, plus mailboxes over SMTP and calendars over CalDAV
  • Workflows with record, manual, schedule and webhook triggers, and steps that call an HTTP address or run JavaScript
  • REST and GraphQL APIs generated from your own workspace schema, with a Metadata API for objects and fields
  • An MCP server for Claude Desktop, Claude Code, Cursor, ChatGPT and other clients
  • Apps that add objects, logic functions and front components, deployed privately or listed on the Twenty marketplace
  • Official agent skills for building apps, installed with the skills CLI or as a Codex plugin
Ways to run it
RouteWhat you runWhat the docs say
CloudNothing. You sign up at app.twenty.comChoose a trial, then set up your workspace name and profile after the Stripe confirmation. You can cancel anytime
Docker ComposeThe install script, or a downloaded .env and docker-compose.ymlMeant for production hosting or self-hosting, with at least 2GB of RAM and Docker Compose up to date
Source checkoutGit, Node 26.5.1 or a later 26.x (the root package.json engines), Yarn 4, PostgreSQL and RedisThe Local Setup page is written for contributors and curious developers, and starts the server, worker and frontend with nx
Local app environmentThe twenty local start commandRuns the web UI, API, worker and databases in Docker for app work, on loopback port 2020 by default

How to set it up

Get it saves a zip of Mindket’s setup notes in your downloads folder, with a page for each route and agent from the maker’s README and docs. The cloud route needs no install. A server of your own takes one command.

What you need first
NeedDetail
The cloudA browser and a Google, Microsoft or email sign-in
Docker ComposeA server or computer with Docker and Docker Compose, and at least 2GB of RAM
AppsNode.js 24 from 24.5, or Node.js 26 from 26.5.1 (not Node 25), Yarn 4 through Corepack and the twenty CLI. Building apps is officially supported only on macOS and Linux, and on Windows you work inside WSL 2
A source checkoutGit, Node 26.5.1 or a later 26.x, Yarn 4, nvm, PostgreSQL and Redis. npm does not work for it
MCPA workspace you can sign in to, and an MCP client that supports streamable HTTP servers
  1. Install Docker and Docker Compose on the server if they are not there yet.
  2. Run the command below.
  3. On your own computer, open http://localhost:3000. On a server, check it with curl http://localhost:3000.
  4. Set SERVER_URL in the .env file to the address people use, then restart.
bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)

The Docker Compose page puts VERSION in front of the same line to pin a release, for example VERSION=v2.38.1. It must be a full release tag published on Docker Hub, and aliases such as v2 or latest are not accepted. To restart after changing SERVER_URL, the page gives these two lines.

docker compose down
docker compose up -d

How to use it

The Quickstart says to start with your mailbox, because real data gives your team value before you change anything else.

  1. Open Settings, then Accounts, and connect a Google or Microsoft account. Another provider uses SMTP for mail and CalDAV for calendars. On a self-hosted server, an admin first sets up a Google Cloud OAuth client or an Azure app under Settings, Admin Panel, Configuration Variables. The Setup page’s calendar and messaging cron jobs must then run in the worker. Microsoft users need a Microsoft 365 license, and personal Microsoft accounts are not supported yet.
  2. Open Settings, then Data Model. Add fields to People, Companies and Opportunities, and create custom objects for the rest.
  3. Press Cmd+K or Ctrl+K to open the Command Menu and import a CSV. Download the sample file first and deduplicate emails and domains.
  4. Then build views and workflows. A workflow has a trigger, steps and variables.
What starts a workflow
TriggerWhen it fires
Record eventA record is created, updated, deleted or upserted
ManualA user clicks a button on one record, on several or globally
ScheduleOn a recurring interval written in cron syntax
WebhookAn external system sends an HTTP POST

The AI chat answers questions about your records. Agents work through roles, so set their access under Settings, then Members, then Roles. The AI page gives these prompts.

What opportunities are closing this month?
Which deals have been in Negotiation for more than 30 days?
Summarize my interactions with this person

Example

You want to see which deals close this month. You sign up for the cloud, connect your mailbox and import your Opportunities, with their close dates, from a CSV. Then you open the AI chat and ask:

What opportunities are closing this month?

The chat has access to your workspace data, so it answers from your records. It draws on the workspace’s AI credits.

For newcomers and experts

If you are new. A CRM is where a team keeps its companies, contacts and deals. In Twenty those are the Companies, People and Opportunities objects, and a workspace is the space where your team’s data lives. Self-hosted means the server runs on a computer you control.

For experts. Most settings live in the app, under Settings, Admin Panel, Configuration Variables. Infrastructure settings such as PG_DATABASE_URL, SERVER_URL and the encryption keys can only be set in the .env file, and IS_CONFIG_VARIABLES_IN_DB_ENABLED=false moves everything there. ENCRYPTION_KEY encrypts OAuth tokens, application variables and TOTP secrets at rest. Losing it means losing access to every secret in the database.

The Securing page splits an instance into a private zone, a public zone for /webhooks, /s and /emailing, and a zone for cloud AI connectors at /mcp, /oauth and /.well-known. Workflow webhooks only check that the workspace and workflow exist, so anyone with the URL can trigger one. In production the logic-function and code-interpreter drivers start disabled, and the LOCAL driver has no sandbox.

The Apps page says logic functions run in isolated Node.js processes, sandboxed from the host, and front components run in Web Workers through Remote DOM. On a self-hosted server the isolation depends on the driver: the Setup page says LOCAL has no sandbox and names LAMBDA for untrusted code. An app only sees what its role allows. The README defines an object as code like this.

import { defineObject, FieldType } from 'twenty-sdk/define';

export default defineObject({
  nameSingular: 'deal',
  namePlural: 'deals',
  labelSingular: 'Deal',
  labelPlural: 'Deals',
  fields: [
    { name: 'name', label: 'Name', type: FieldType.TEXT },
    { name: 'amount', label: 'Amount', type: FieldType.CURRENCY },
    { name: 'closeDate', label: 'Close Date', type: FieldType.DATE_TIME },
  ],
});

Over MCP, the docs say to call learn_tools for a tool’s schema, then execute_tool.

Good to know

You run the server, so the care is yours. These points come from the repository and the docs.

  • License: mostly AGPLv3, with an extra permission the LICENSE file calls the Twenty Application Exception. Files that begin with /* @license Enterprise */ are under a commercial license, and the file says production use needs agreed Twenty terms and a valid Enterprise Edition subscription. The twenty CLI, the SDKs, twenty-ui and the apps under packages/twenty-apps are MIT. GitHub names the license Other, so read the LICENSE file before you run a modified copy for other people
  • Backups: the Docker Compose page gives a pg_dump line and a restore line. It says to test restores, keep copies off-site and encrypt them
  • Upgrades: back up first, stop Twenty with docker compose down, change TAG in .env, then run docker compose up -d. The server runs the migrations on startup. Version 2.34 and newer need PostgreSQL 15 or newer, and an instance older than v1.23 must step through each major tagged version up to v1.23 first
  • Fresh installs: the page’s fix for a Postgres password error is docker compose down --volumes, which permanently deletes all database data. Use it only when nothing is stored yet
  • Exposure: the Securing page says to keep the instance off the public internet and open only the paths you need. An IP allowlist checks the network a request comes from, not who sent it
  • MCP keys: an API key grants access to workspace data. Keep it out of version control and give it a role that fits the job
  • Source checkouts: use yarn, not npm. Node 26 no longer ships Corepack, so install it first
  • Data sent out: the pages these notes use do not describe usage data for a self-hosted server. The Setup page says AI file attachments reach the model as links built from SERVER_URL, so a localhost or private one limits AI chats and agents to text. Whatever an assistant reads over MCP goes to that assistant
  • Plans: the Quickstart offers a 30-day trial with a card or a 7-day trial without one. Workflows, AI agents and AI chat share a credit balance, and a Usage Limits page caps spending. These notes quote no prices

README and files

README

Twenty: setup notes

This kit holds setup notes only. Mindket wrote them. Twenty, its twenty CLI and its agent skills come from Twenty's repository: https://github.com/twentyhq/twenty

These notes are not made or endorsed by Twenty. The repository describes itself as "The open alternative to Salesforce, designed for AI." The documentation is at https://docs.twenty.com

License: mixed. The LICENSE file (https://github.com/twentyhq/twenty/blob/main/LICENSE) says the project is mostly under the GNU Affero General Public License v3.0, with an additional permission it calls the Twenty Application Exception, and with two qualifications:

  • Files that begin with the comment /* @license Enterprise */ are under a commercial license, not the AGPLv3. That license says they may be used in production only with agreed Twenty terms and a valid Twenty Enterprise Edition subscription, and that you may copy and modify them for development and testing without one.
  • Some packages are under the MIT license instead: the twenty CLI, twenty-sdk, twenty-client-sdk, create-twenty-app, twenty-shared, the twenty-ui component library and the applications under packages/twenty-apps.

GitHub's repository page names the license "Other". Read the LICENSE file before you run a modified copy for other people.

What installs

What you need first

  • For the cloud: a browser and a Google, Microsoft or email sign-in.
  • For Docker Compose: a server or computer with Docker and Docker Compose installed and up to date, and at least 2GB of RAM. The page warns that too little memory can crash processes.
  • For apps: Node.js 24 from 24.5, or Node.js 26 from 26.5.1 (the apps troubleshooting page gives engines.node: ^24.5.0 || ^26.5.1), and Yarn 4 through Corepack. The apps guide says building apps is officially supported only on macOS and Linux, and on Windows you work inside WSL 2. Source: https://docs.twenty.com/developers/extend/apps/getting-started/quick-start.md
  • For a source checkout: Git, Node 26.5.1 or a later 26.x (the root package.json engines), Yarn 4 and nvm. npm does not work for this, the guide says to use yarn.
  • For MCP: a Twenty workspace you can sign in to, and an MCP client that supports streamable HTTP servers.

Main install command

For a server of your own, the Docker Compose page gives one line. Run it on the server:

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

Source: https://docs.twenty.com/developers/self-host/capabilities/docker-compose.md

Per-route and per-agent notes

  • setup/cloud-and-first-steps.md: sign up, connect a mailbox, shape the data model, import records
  • setup/docker-compose.md: self-hosting, SERVER_URL, backups, upgrades and keeping the instance private
  • setup/local-development.md: running Twenty from a source checkout
  • setup/build-an-app.md: the twenty CLI, a local server and publishing an app
  • setup/claude-code.md: MCP and the agent skills in Claude Code
  • setup/codex.md: MCP, the agent skills and the Codex plugin
  • setup/cursor.md: MCP and the agent skills in Cursor
  • setup/other-agents.md: Claude Desktop, ChatGPT, any other MCP client and the API

Update or remove

For a Docker Compose install, the upgrade guide says to back up the database, stop Twenty with docker compose down, change the TAG value in .env, and start it again with docker compose up -d. The server runs the upgrade migrations on its own at startup. The steps are in setup/docker-compose.md.

The twenty CLI has its own commands for a local development server (twenty local upgrade, twenty local stop, twenty local reset) and for an installed app (twenty app uninstall). They are in setup/build-an-app.md.

The documentation pages these notes use give no uninstall page for a self-hosted server. The troubleshooting page uses docker compose down --volumes for a fresh install and warns that it permanently deletes all database data. Back up first.

Usage data and outside connections

The pages these notes use do not describe usage data for the self-hosted server. The Setup page says each configuration variable is documented in the admin panel under Settings → Admin Panel → Configuration Variables, and that a few infrastructure settings can only be set in the .env file. Source: https://docs.twenty.com/developers/self-host/capabilities/setup.md

npx skills add runs the separate skills CLI (https://skills.sh/), which is not a Twenty tool. Read its own page for what it collects.

Whatever an assistant reads through MCP is sent to that assistant, and what its provider does with it follows the provider's own policy. MCP connections inherit the permissions of the signed-in user, or of the role you give an API key.

Sources

Files
README.md  8 KB
setup/build-an-app.md  7 KB
setup/claude-code.md  6 KB
setup/cloud-and-first-steps.md  6 KB
setup/codex.md  4 KB
setup/cursor.md  3 KB
setup/docker-compose.md  12 KB
setup/local-development.md  5 KB
setup/other-agents.md  5 KB

9 files, 56 KB, downloaded as a zip.

What’s new

  • Version 2 · 2026-11-09

    Updated by Mindket to the current version of this kit.

  • Version 1 · 2026-11-03

Reviews

No ratings yet

Write a review

No reviews yet.

What people say

Posts and comments that name this project on Hacker News, Bluesky, X, Reddit, Facebook and YouTube, found by a weekly search and on Trendshift. Mindket doesn’t write or check them. Open one to read it where it was posted.

iFelixLaunch HN: Twenty.com (YC S23) – Open-source CRMHello HN, Seven years ago, I complained about Salesforce on HN. Somebody said: "one day, someone will do better". That stuck and today we're trying to be that “someone” with my co-founders Thomas (design) and Charles (eng like me). Our company is called Twenty and our repo is here:…415 points · 311 replies@prosperflowio.bsky.socialAn open-source Salesforce alternative where your CRM is TypeScript code you build, ship and version. 🔗 github.com/twentyhq/twenty Credits: github.com/twentyhq/twenty #twenty #typescript #crm2 likes@apoorv_xs@twentycrm Ben De St Paer-Gotch (@nebuk89), GitHub PM for Actions &amp; npm, needed a heavy real-world workload to test Actions vs @Dagger_io. He selected my patch (+277 lines) to stress AST compilation &amp; hook tests. Today, Twenty CTO @charlesBochet merged it into production. (3/4)r/fossA key that's never assembled: 10 open-source apps where a stolen database is worthlesshziaLaunch HN: GitStart (YC S19) – Remote junior devs working on production PRsHi HN, I’m Hamza from GitStart (https://gitstart.com/). We’re building a service for engineering teams to assign tickets and get back PRs. Here’s a video of how it works: https://www.loom.com/share/61d46a5b07e04b45a51af2a5008ee173 We recruit devs who want to grow from remote countries, to work…235 points · 192 repliesGitHub Trending JS/TS🎉 Celebrating! 🎉 (500+ new stars) 📦 twentyhq / twenty ⭐ 59,485 (+713) 🗒 TypeScript The open alternative to Salesforce, designed for AI.1 like · 1 reply@kingsmenx18$87r/TwentyCRMTwenty contacts sealed with a key that's never assembled, and an RFC so it can be a plugin instead of a forkcharlesTwentyShow HN: Open-Source Favicon ProviderHey HN, We couldn’t find a reliable favicon provider for our CRM [1]. There are existing solutions (FaviconKit, Google faviconV2, ...) but we have faced issues with all of them: rate-limiting, down-time, inconsistent icon size. We were looking for a solution that is: 1) reliable: no down-time ; 2)…14 pointsGitHub Trending🔥 Hot Repo! 🔥 (100+ new stars) 📦 twentyhq / twenty ⭐ 58,802 (+105) 🗒 TypeScript The open alternative to Salesforce, designed for AI.1 like@ieddysunSalesforce 终于有了个像 2026 年的开源平替。 Twenty 把 CRM 做成了 Notion 画风,开源、能自部署,最近还往 AI 原生方向靠。 说实话 CRM 这类软件早就该被重做一遍了,臃肿的老巨头们,颤抖吧。 #AI #开源 https://t.co/lt1YlrMAgZaray07Show HN: I built a tool that finds reliability bugs in your codeHey HN, I’m Abhishek. I'm building Opslane, a tool that finds reliability issues in your code. On every PR, it spins up your entire app and then tries to find weak spots that would break in production. Demo: https://youtu.be/47phxkdh6f0 Example: We tested Opslane on Lago (open-source billing) and…6 points

Searched

More from Mindket

See all from Mindket

anaksor-ocr

Sokheng · Kit

Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…

New

Qwen2.5-7B-Instruct as GGUF files in eight quantization sizes, to chat with locally through llama.cpp. For people who want a capable 7.6B model on their own co…

New

ACE-Step 1.5 XL SFT

ACE-Step · Kit

Generates music from text with a 4B diffusion decoder, 50 steps and guidance control, aiming for higher audio quality than the base. For creators with a GPU of…

New

Similar projects

See all in Business

Immich

immich-app · Kit

Immich’s AGPL-licensed server for your photos and videos, with a web app and phone apps. The phone backs up to it and it groups faces. These notes cover Docker…

New118k

Hyperswitch

juspay · Kit

Juspay’s open source payments platform, written in Rust. Your checkout calls one API, and it routes each payment to one of over a hundred processors, with retr…

New45.7k

pplx-decider-v1.1-27b

perplexity-ai · Kit

Picks the best option for a decision from text and images, such as which team should handle a request, with a probability for each choice, for developers who b…

New