Cộng đồng & Sự kiện
9 phút đọc2 tháng 6, 20261

Twenty CRM: Khi dân dev tự build Salesforce cho riêng mình

Deep dive vào Twenty open-source CRM được thiết kế cho developer, cho phép define objects, views, workflows as code và version control như phần mềm thông thường.

N

Nguyễn Nhật Long

@nguyennhatlong1303

Twenty CRM: Khi dân dev tự build Salesforce cho riêng mình

Twenty CRM: Khi dân dev tự build Salesforce cho riêng mình

Mình nhớ hồi đầu năm, team mình phải chọn một CRM cho bộ phận sales. Yêu cầu khá đơn giản: quản lý pipeline, track deals, gửi email tự động. Nghe thì dễ, nhưng khi bắt đầu eval các giải pháp thì đau đầu thật sự. Salesforce thì quá đắt và quá phức tạp cho team nhỏ. HubSpot free tier thì bị giới hạn tùm lum. Còn mấy cái CRM khác thì UI cũ kỹ, API hạn chế, muốn custom một chút là phải liên hệ sales để upgrade plan. Đúng lúc đó mình tình cờ thấy Twenty trên GitHub gần 49k stars, tự giới thiệu là "open alternative to Salesforce, designed for AI" và quyết định đào sâu vào xem nó thực sự có gì.

CRM nhưng mà... dành cho developer?

Cái đầu tiên khiến mình chú ý là philosophy của Twenty: "The CRM you build, ship, and version like the rest of your stack." Nghe câu này là biết ngay target audience của họ không phải mấy anh sales manager muốn drag-and-drop pipeline. Target ở đây là dev team, là những người muốn CRM hoạt động như một phần của codebase, có thể version control, có thể CI/CD, có thể review changes qua PR.

Và đây chính xác là pain point mà mình gặp suốt mấy năm qua. Mỗi lần dùng CRM truyền thống, config thì click click trên UI, không biết ai đã thay đổi gì, không rollback được, không test được trước khi push lên production. Twenty giải quyết chuyện này bằng cách cho phép bạn define mọi thứ objects, fields, views bằng code.

Thử nhìn cái ví dụ trong repo của họ:

TypeScript
1import { defineObject, FieldType } from 'twenty-sdk/define';
2
3export default defineObject({
4 nameSingular: 'deal',
5 namePlural: 'deals',
6 labelSingular: 'Deal',
7 labelPlural: 'Deals',
8 fields: [
9 { name: 'name', label: 'Name', type: FieldType.TEXT },
10 { name: 'amount', label: 'Amount', type: FieldType.CURRENCY },
11 { name: 'closeDate', label: 'Close Date', type: FieldType.DATE_TIME },
12 ],
13});

Nếu bạn từng làm việc với Prisma schema hay TypeORM entities, bạn sẽ thấy cái pattern này rất quen thuộc. Define một object deal với các fields, rồi publish lên workspace. Mọi thứ nằm trong Git, review được, test được, revert được. Theo kinh nghiệm của mình, chỉ riêng việc này đã giải quyết được 70% drama khi team phải maintain một CRM phức tạp.

Tech stack và kiến trúc bên trong

Mình dành khá nhiều thời gian đọc source code trong thư mục packages/ và nói thật là khá ấn tượng với cách họ tổ chức project. Đây là stack chính:

Cái mình thấy hay ở chỗ là họ chọn stack rất "mainstream" và battle-tested. Không có gì exotic hay bleeding-edge cả. NestJS cho backend là một lựa chọn solid modular, có dependency injection, ecosystem lớn. Jotai cho state management thay vì Redux cũng là một quyết định thông minh vì CRM có rất nhiều state phân tán, atomic state model của Jotai handle chuyện này tốt hơn nhiều so với một global store.

LayerTechnologyGhi chú
MonorepoNxQuản lý packages, build, test
BackendNestJSFramework chính, modular architecture
QueueBullMQJob processing, background tasks
DatabasePostgreSQLPrimary datastore
CacheRedisSession, cache, queue backend
FrontendReactSPA với modern tooling
State managementJotaiAtomic state, lightweight
StylingLinariaZero-runtime CSS-in-JS
i18nLinguiInternationalization

Điểm đáng chú ý là họ dùng Linaria thay vì styled-components hay Emotion. Linaria là zero-runtime CSS-in-JS, nghĩa là CSS được extract ra tại build time, không có runtime overhead. Với một ứng dụng CRM mà user ngồi cả ngày trên đó, performance matters, và đây là một trade-off hợp lý.

Project được tổ chức theo Nx monorepo với hơn 12,400 commits tính đến thời điểm mình viết bài. Con số này cho thấy project được maintain rất active. Mình check thử commit history thì gần như ngày nào cũng có commits mới, PRs được merge liên tục.

Developer Experience: Từ setup đến deploy

Mình thử cả hai cách: dùng cloud và self-host.

Cloud thì không có gì phải bàn sign up tại twenty.com, tạo workspace trong chưa đầy một phút. Cái này phù hợp nếu bạn muốn thử nhanh hoặc team nhỏ không muốn quản lý infrastructure.

Self-hosting thì họ cung cấp Docker Compose setup. Mình pull về, chạy docker-compose up và mất khoảng 5 phút để có một instance chạy local. PostgreSQL và Redis được bundle sẵn trong compose file, không cần config gì thêm. Anh em lưu ý là cần đủ RAM mình recommend ít nhất 4GB cho development vì NestJS + PostgreSQL + Redis + React dev server chạy đồng thời khá ngốn.

Cái mình thực sự thích là CLI tool của họ:

Terminal
1npx create-twenty-app my-app

Scaffold một app mới, rồi bạn define objects, views, thậm chí agents (AI) và logic functions bằng code. Xong rồi publish:

Terminal
1npx twenty app:publish --private

Flag --private ở đây nghĩa là app chỉ visible trong workspace của bạn. Flow này giống hệt cách bạn develop và deploy một npm package hay một Shopify app rất familiar với dev workflow.

Để contribute vào project thì họ có local setup guide khá chi tiết. Mình clone repo, chạy yarn install, rồi follow guide. Có một vài bước cần chú ý như setup .env file và run migrations, nhưng nhìn chung là smooth. File CLAUDE.mdDESIGN.md trong root repo cũng là một điểm cộng cho thấy team rất intentional về việc document architecture decisions.

Những building blocks thực sự có ích

Twenty không cố gắng làm một CRM hoàn chỉnh out-of-the-box như Salesforce. Thay vào đó, họ cung cấp primitives những building blocks cơ bản mà bạn compose lại theo nhu cầu:

Objects & Fields: Tương tự như tables trong database, nhưng với UI tự động generate. Bạn define một object deal với các fields, Twenty tự tạo list view, detail view, filter, sort cho bạn. Không cần viết UI code.

Views: Custom views trên data filter theo điều kiện, group by field, sort theo thứ tự. Tất cả define as code hoặc config qua UI.

Workflows: Automation logic. Khi một deal chuyển sang stage "Won", tự động gửi notification, update revenue dashboard, trigger webhook. Cái này tương đương với Salesforce Flow nhưng bạn viết bằng TypeScript thay vì drag-and-drop.

Agents (AI): Đây là phần mình thấy ambitious nhất. Twenty được thiết kế "for AI" từ đầu, không phải bolt-on sau. Họ có concept về AI agents có thể interact với CRM data ví dụ một agent tự động enrich contact data, hoặc suggest next best action cho sales rep. Mình chưa test deep phần này nhưng architecture cho thấy họ serious về hướng đi này.

Điểm mình đánh giá cao nhất là mọi thứ đều extensible qua code. Bạn không bị lock vào UI config. Muốn thêm một custom field type? Viết code. Muốn integrate với internal API? Viết code. Muốn custom validation logic phức tạp? Viết code. Và tất cả nằm trong Git repo của bạn.

So sánh thực tế với các lựa chọn khác

Mình biết câu hỏi đầu tiên anh em sẽ hỏi: "Thế nó so với mấy cái khác thì sao?" Đây là comparison dựa trên trải nghiệm thực tế của mình:

Nhìn bảng này bạn sẽ thấy Twenty chiến thắng rõ ràng ở developer experience và flexibility. Nhưng mình cũng phải honest: nếu bạn cần một CRM mature với hàng nghìn integrations sẵn có, reporting phức tạp, và enterprise support, Salesforce vẫn là king. Twenty đang ở giai đoạn mà nó rất powerful cho technical teams nhưng chưa có ecosystem rộng như các incumbents.

Tiêu chíTwentySalesforceHubSpot (Free)Odoo CRM
GiáFree (self-host) / Cloud pricingRất đắt ($25-300/user/month)Free nhưng giới hạnFree (self-host) / Cloud
CustomizationCode-first, unlimitedPoint-and-click + ApexHạn chế ở free tierModule-based
Developer ExperienceExcellent TypeScript, CLI, GitTrung bình proprietary toolingKém limited APITrung bình Python
AI IntegrationNative, designed for AIEinstein (add-on đắt)Có nhưng limitedCơ bản
Self-hostingDocker Compose, dễ setupKhông thểKhông thểCó nhưng phức tạp
Learning curveThấp nếu biết TypeScriptCao hệ sinh thái riêngThấpTrung bình
Community49k GitHub stars, activeEnterprise supportCommunity lớnCommunity lớn
Version controlNative everything as codeSalesforce DX (phức tạp)KhôngHạn chế

Những điểm mình chưa thực sự hài lòng

Không có project nào perfect cả, và mình muốn chia sẻ thẳng thắn mấy điểm mình thấy cần cải thiện.

Thứ nhất, documentation tuy đã khá tốt nhưng vẫn có gaps. Mình gặp một vài trường hợp muốn customize sâu hơn mà docs không cover, phải đọc source code trực tiếp. Với một project 12k+ commits, việc docs không theo kịp code là understandable, nhưng vẫn là friction cho người mới.

Thứ hai, plugin/integration ecosystem còn mỏng. Salesforce có AppExchange với hàng nghìn apps. HubSpot có marketplace riêng. Twenty thì đang ở giai đoạn xây dựng, số lượng integrations sẵn có còn ít. Bạn có thể build bất cứ integration nào bạn muốn (vì nó open-source), nhưng phải tự build.

Thứ ba, production readiness cho scale lớn. Mình chưa có cơ hội test với dataset lớn (hàng triệu records), nên không dám khẳng định performance ở scale đó. PostgreSQL là solid, nhưng cách Twenty abstract data layer có thể tạo overhead. Nếu bạn plan dùng cho enterprise với data lớn, nên benchmark kỹ trước.

Ai nên dùng Twenty, ai nên skip?

Sau khi dành khá nhiều thời gian với project này, đây là recommendation của mình:

Nên dùng Twenty nếu bạn:

  • Là technical team/startup muốn CRM custom mà không muốn trả tiền Salesforce
  • Cần CRM tích hợp sâu vào dev workflow (Git, CI/CD, code review)
  • Muốn full control over data và infrastructure (self-hosting)
  • Đang build product có yếu tố AI và muốn CRM cũng AI-native
  • Team chủ yếu là TypeScript developers

Nên skip nếu bạn:

  • Cần CRM hoạt động ngay lập tức không cần dev effort
  • Team không có developer chỉ có business users
  • Cần hàng trăm integrations sẵn có với third-party tools
  • Đang ở enterprise scale và cần vendor support 24/7

Mình thấy Twenty đang ở một vị trí rất thú vị trong landscape CRM. Họ không cố cạnh tranh trực tiếp với Salesforce ở phân khúc enterprise. Thay vào đó, họ tạo ra một category mới developer-first CRM nơi mà CRM được treat như software, không phải như một tool config bằng UI. Với gần 49k stars trên GitHub, 93 issues mở (con số rất thấp cho project size này), và community active trên Discord, Twenty là một trong những open-source projects đáng theo dõi nhất trong năm nay.

Nếu bạn đang frustrated với CRM hiện tại của team, hoặc đang build một startup và cần CRM mà không muốn burn tiền vào SaaS subscriptions, thì dành một buổi chiều clone Twenty về chạy thử. Mình nghĩ bạn sẽ bất ngờ với những gì một open-source CRM có thể làm được trong năm 2025.

NN

Nguyễn Nhật Long

@nguyennhatlong1303

Nguyễn Nhật Long is a Senior Frontend Engineer and Frontend Team Leader with 7 years of experience building real-time fintech platforms. Specializing in React, Next.js, TypeScript, and React Native, shipping 10+ products across Web, Mobile, Telegram Mini-Apps, and Web3.

Thấy hay? Chia sẻ cho bạn bè!