· typescript / orm / database

TypeScript ORM tốt nhất 2026: Drizzle, Prisma, Kysely, TypeORM

Drizzle là lựa chọn mặc định cho dự án TypeScript mới trong 2026. Đây là thời điểm phù hợp để chọn từng ORM — và khi nào nên bỏ qua cái còn lại.

Bởi Ethan · Cập nhật 16 tháng 5, 2026

2.093 từ · 11 phút đọc

Với hầu hết dự án TypeScript năm 2026, Drizzle là lựa chọn mặc định hợp lý: không codegen, type inference hoàn chỉnh, bundle 7.4 KB gzip, và query API ánh xạ trực tiếp vào SQL. Prisma thắng nếu bạn cần MongoDB, nested writes, hoặc thích schema-first DX. Kysely dành cho team muốn một query builder type-safe — không phải ORM theo nghĩa đầy đủ. TypeORMMikroORM vẫn phù hợp cho codebase NestJS lớn đang dùng chúng, nhưng không cái nào xứng đáng có mặt trong một dự án mới.

Nếu bạn chỉ đang chọn giữa Prisma và Drizzle, bài so sánh trực tiếp của chúng tôi đi sâu vào từng khía cạnh — migration, khoảng trống type safety, và benchmark hiệu năng. Bài này rộng hơn: cả năm ứng viên, và kết luận cho từng trường hợp cụ thể.

Bài này dành cho ai

TypeScript backend developer đang bắt đầu dự án mới hoặc đang cân nhắc có nên chuyển khỏi ORM hiện tại hay không. Nếu bạn đang dùng Drizzle hoặc Prisma và mọi thứ vận hành tốt, bài này có thể chưa phải vấn đề cấp bách của bạn.

Chúng tôi đã kiểm tra gì

Node 22, PostgreSQL 17, snapshot npm ecosystem từ tháng 5 năm 2026. Bundle size lấy từ bundlephobia. Dữ liệu GitHub từ repository chính thức. Chúng tôi không tự chạy benchmark hiệu năng độc lập — khoảng trống này được ghi chú trong phần Lưu ý.

ORMPhiên bản ổn địnhLượt tải/tuầnGitHub starsBundle (gzip)
Prisma7.8.0~7.8M45,968~600 KB
Drizzle0.45.2~4.2–5.1M34,395~7.4 KB
TypeORM0.3.29~4.2M36,500Chưa xác minh — xem ghi chú
Kysely0.29.1~1.2–2.5M13,800~340 KB (2024; cần xác minh)
MikroORM7.0.16~459K9,000Không công bố

Ghi chú về bundle: TypeORM đóng gói tất cả database driver vào một package monolithic; kích thước gzip chưa được xác minh độc lập tại thời điểm viết bài. Con số ~340 KB của Kysely lấy từ bundlephobia (tháng 4 năm 2024). Tự kiểm tra cả hai trước khi dùng bundle size làm tiêu chí quyết định. Số liệu của Drizzle và Prisma lấy từ bài so sánh trực tiếp.

Lưu ý về Drizzle v1 pre-release: v1.0.0-rc.2 là pre-release mới nhất tại thời điểm viết (tháng 5 năm 2026). JIT row mapper và một số thay đổi API sẽ có mặt trong v1. Xác minh trạng thái GA trước khi đưa v1 vào production. Phiên bản ổn định trong bảng (0.45.2) là an toàn.

Nhận xét theo chủ đề

Type safety

Prisma sinh TypeScript type từ file schema .prisma. Mọi kết quả query đều có type đầy đủ tại compile time, kể cả đối số where(). Prisma 7 cũng giảm ~98% overhead khi TypeScript đánh giá type, giúp full type check nhanh hơn 70%.

Drizzle suy diễn type trực tiếp từ định nghĩa bảng bằng TypeScript. Kết quả từ select()insert().returning() đều có type. Điểm khác biệt: mệnh đề where() của Drizzle chấp nhận một số tổ hợp filter không hợp lệ về mặt logic mà không báo lỗi TypeScript. Đây là thiết kế có chủ đích — Drizzle tin bạn hiểu SQL. Với query nhiều join phức tạp kèm filter có điều kiện, khoảng trống này sẽ lộ ra.

Kysely có type đầy đủ ở từng bước trong chuỗi method. Mọi JOIN, WHERE, và SELECT đều được kiểm tra tại compile time. Bạn tự viết từng phần cấu trúc SQL — đó là cái giá cho độ chính xác type tuyệt đối.

Type của TypeORM hoạt động tốt với CRUD đơn giản. Các chuỗi QueryBuilder phức tạp làm mất độ chính xác TypeScript. Khoảng trống Partial<Entity> trong kết quả join là điểm đau quen thuộc. TypeORM còn yêu cầu experimentalDecoratorsreflect-metadata, dễ xung đột với TypeScript hiện đại và ESM.

Pattern unit-of-work của MikroORM tạo ra khoảng trống type với raw query. Identity map và entity lifecycle thêm overhead về mặt tư duy. Type trên entity manager API khá chắc; type ở các trường hợp ngoại lệ thì không.

DX khi viết query

API của Prisma dễ tiếp cận nhất: findMany, create, update, delete kèm relation API tự sinh SQL. Nested writes — tạo user và posts trong một lần gọi — là lợi thế năng suất thực sự với ứng dụng nhiều dữ liệu.

Drizzle hiển thị SQL một cách tường minh. Bạn viết leftJoin, where, orderBy. Developer có background SQL thích điều này vì khi kết quả sai, chỉ cần đọc query — không phải đoán tầng dịch nào đã tạo ra nó. Query API trong 0.45.x ổn định và bao phủ đầy đủ bề mặt SQL.

Kysely thuần túy là một query builder. Không có ORM layer: không entity lifecycle, không lazy loading, không change tracking. Bạn có SQL composition được định type chính xác. Team không tin vào ORM abstraction thường đến với Kysely như điểm cuối của hành trình rời khỏi TypeORM.

Decorator API của TypeORM quen thuộc với developer Angular và Java. Pattern ActiveRecord (entity method cho CRUD) prototype nhanh. Pattern DataMapper (repository + entity manager) dễ test hơn. Chuyển đổi giữa hai pattern khá lủng củng. Type safety của QueryBuilder giảm dần theo độ phức tạp của query.

Pattern unit-of-work là điểm khác biệt của MikroORM. Entity manager theo dõi mọi thay đổi và flush chúng trong một batch. Điều này tự nhiên với team chuyển từ PHP/Doctrine hoặc Java/Spring. Với người khác, đây là mô hình tư duy xa lạ cần thời gian để quen.

Quản lý migration

Prisma quản lý migration bằng lệnh prisma migrate dev — so sánh schema file với database và sinh SQL. Lịch sử migration đáng tin cậy. Phát hiện drift (trạng thái database lệch khỏi lịch sử đã ghi) được xử lý nhất quán hơn Drizzle.

Drizzle sinh migration từ thay đổi schema TypeScript. Tooling còn trẻ hơn. Một vấn đề có tài liệu từ cộng đồng (GitHub #2114): drizzle-kit generate có thể sinh lệnh DROP cho FK constraint được tạo bởi công cụ khác — Prisma, SQL thủ công — mà Drizzle không có lịch sử tạo ra. Nếu bạn đang chuyển từ Prisma, hãy dành thời gian đối chiếu lịch sử migration.

Hệ thống migration của TypeORM đã trưởng thành, xử lý schema evolution ở quy mô doanh nghiệp trong nhiều năm. Hệ thống migration của MikroORM cũng hoạt động đáng tin cậy và đã có hỗ trợ ESM từ v7.

Kysely có hệ thống migration (kysely/migration) nhưng hoàn toàn thủ công — bạn tự viết SQL. Không có schema-diffing.

Phù hợp với edge và serverless

Drizzle với ~7.4 KB gzip phù hợp với mọi edge runtime. Cloudflare Workers có giới hạn bundle 1 MB. Vercel Edge Functions cũng vậy. Drizzle để lại ~993 KB cho code ứng dụng.

Prisma 7 hỗ trợ edge runtime sau khi viết lại Rust→TypeScript. Với ~600 KB gzip, nó chiếm 60% ngân sách free-tier của Cloudflare Workers. Hoạt động được, nhưng không còn dư địa.

TypeORM không chạy trên edge runtime do kích thước và phụ thuộc vào reflect-metadata. MikroORM v7 đã loại bỏ sự phụ thuộc vào Node.js và có thể hỗ trợ edge runtime trong tương lai; điều này chưa được xác minh tại thời điểm viết bài. Footprint tối giản của Kysely giúp nó tương thích với edge — tầng query type-safe không mang theo overhead ORM.

Với team dùng Supabase hoặc Neon kết hợp Drizzle: chế độ Supabase Transaction pooling yêu cầu prepare: false trong config Drizzle. Thiếu cấu hình này sẽ gây lỗi khó hiểu trên production.

Sức khỏe hệ sinh thái

Prisma có hệ sinh thái lớn nhất. Công cụ bên thứ ba — Zod schema generator, tRPC adapter, jest-prisma, ERD generator — phủ hầu hết các điểm tích hợp. Prisma cũng có Accelerate (connection pooling + query cache, dịch vụ trả phí, miễn phí đến 60K ops/tháng) và Pulse (change data capture).

Hệ sinh thái của Drizzle nhỏ hơn nhưng tăng trưởng nhanh. Stars tăng từ ~15K năm 2024 lên 34K+ vào tháng 5 năm 2026. Lượt tải hàng tuần đã vượt Prisma trong một số giai đoạn Q4 2025. Drizzle Kit, Drizzle Studio, và Drizzle Seed phủ đầy đủ workflow phát triển cốt lõi.

TypeORM có mức độ tích hợp NestJS rộng nhất theo mặc định — tài liệu chính thức của NestJS vẫn xem nó là ví dụ ORM chính. Điều này lý giải ~4.2M lượt tải/tuần dù hiếm khi được khuyến nghị cho dự án mới. Hệ sinh thái rộng nhưng không còn mở rộng tích cực.

Kysely có hệ sinh thái tập trung, được bảo trì tốt (v0.29.1 ra mắt ngày 16 tháng 5 năm 2026, cùng thời điểm với bài viết này). Tooling nhỏ hơn Prisma rất nhiều.

MikroORM v7 loại bỏ toàn bộ runtime dependency khỏi @mikro-orm/core, thay Knex bằng Kysely làm query runner, và thêm hỗ trợ ESM native cùng polymorphic relation. Dự án có lượng người dùng trung thành nhưng hẹp. Số lượt tải ~459K/tuần phản ánh chính xác đối tượng của nó.

Kết luận TypeScript ORM — chọn X khi Y

Chọn Drizzle nếu: bạn triển khai lên Cloudflare Workers hoặc Vercel Edge; team bạn tư duy bằng SQL; bạn muốn zero dependency và bundle không bao giờ là vấn đề kích thước; bạn đang bắt đầu dự án TypeScript mới trên Postgres hoặc MySQL, hoặc SQLite.

Chọn Prisma nếu: bạn cần MongoDB (không ORM nào khác trong danh sách này hỗ trợ); bạn muốn nested writes qua nhiều quan hệ trong một lần gọi; bạn thích schema-first DX khi file .prisma là nguồn sự thật duy nhất cho cả migration lẫn type; hoặc bạn muốn Accelerate để xử lý connection pooling edge-aware mà không phải tự quản lý.

Chọn Kysely nếu: bạn muốn một query builder, không phải ORM — toàn quyền kiểm soát mọi JOIN, không entity lifecycle, không change tracking. Cũng hợp lý khi kết hợp với Drizzle: dùng Drizzle cho schema và migration, Kysely cho query composition.

Ở lại TypeORM hoặc MikroORM nếu: bạn có codebase NestJS lớn đang dùng một trong hai và rủi ro migration lớn hơn lợi ích. Cả hai vẫn được bảo trì tích cực. Nhưng không cái nào là điểm xuất phát đúng cho dự án mới.

Lưu ý

Không có benchmark độc lập. Dữ liệu hiệu năng ở trên đến từ vendor (Prisma) hoặc chưa được định lượng (Drizzle JIT mapper). Bài prisma-vs-drizzle.md cũng ghi chú tương tự. Coi mọi thông tin hiệu năng ở đây là hướng chỉ dẫn, không phải con số tuyệt đối.

Drizzle v1 vẫn là pre-release. JIT row mapper và các thay đổi API breaking ship trong v1. v0.45.2 là ổn định. Pre-release mới nhất là v1.0.0-rc.2. Kiểm tra orm.drizzle.team/docs/latest-releases trước khi đưa bất kỳ v1 RC nào vào production.

TypeORM 1.0.0 dự kiến trong H1 2026 nhưng chưa ra mắt tại thời điểm viết. Nếu đã ra mắt, cách nhìn nhận “legacy” ở đây có thể cần xem lại.

Bundle size của TypeORM, MikroORM, và Kysely chưa được xác minh độc lập. Kiểm tra qua bundlephobia trước khi dùng bundle size làm tiêu chí cứng.

MongoDB chỉ qua Prisma. Không ORM nào khác trong danh sách này hỗ trợ. Nếu MongoDB là yêu cầu, so sánh kết thúc ở đây.

Kysely không phải ORM. Nó bỏ entity lifecycle, lazy loading, và change tracking theo thiết kế. Đừng mong đợi những tính năng đó.

Tài liệu tham khảo

  1. Drizzle ORM overview
  2. Drizzle v1 upgrade guide
  3. Drizzle latest releases
  4. Drizzle migration inconsistencies — FK drops (GitHub #2114)
  5. Drizzle benchmarks repo
  6. Prisma ORM architecture shift: Rust → TypeScript
  7. Prisma ORM 7.0.0 announcement
  8. Prisma performance benchmarks
  9. Prisma Accelerate pricing
  10. Prisma vs Drizzle — Prisma comparison docs
  11. GitHub: kysely-org/kysely
  12. Kysely docs
  13. GitHub: typeorm/typeorm
  14. TypeORM 1.0.0 roadmap issue (GitHub #11819)
  15. MikroORM v7 release announcement
  16. MikroORM v7 discussion (GitHub #6116)
  17. npm trends: all five ORMs
  18. Prisma → Drizzle migration story (GitHub #3146)
  19. bundlephobia — xác minh bundle size
  20. toolchew: Prisma vs Drizzle head-to-head