mrkeyoor.com_
Tue 01 Sept 17:40 UTC
Dataevaluationupdated 26 Aug 2026

typeorm review

TypeORM maps JavaScript or TypeScript classes to database tables and gives applications repositories, relations, migrations, transactions, and a query builder. It supports both Data Mapper and Active Record styles across Node.js and several browser, mobile, and desktop runtimes.

+8stars / 7d
Verdict

Our TypeORM install took 29 seconds, pulled 951 packages, and occupied 533 MB, then the test command failed after 26 seconds in Mocha's module-loading path. Use it when database breadth, decorators, and the choice of Data Mapper or Active Record outweigh the cost of a large, compatibility-heavy codebase. For a new service on one SQL database, compare Prisma, Drizzle, and MikroORM before accepting that surface area.

We ran it

Lab card: what happened when we ran typeormScreenshot of typeorm (typeorm.io)
Install✓ · 29s951 packages · 533 MB
Buildn/ano build script
Tests✗ · 26sran, no count parsed
Repo3783 files~307,042 lines of source · 12.9 MB · 11 CI workflows · tests dir

Answers from our run

Does typeorm build from source?

Dependencies installed in 29 seconds (951 packages), and the project has no separate build step. We cloned commit dd98d0f into a clean Debian container with 3 CPUs and no project-specific setup.

Do typeorm's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Who should not use typeorm?

Teams that want a small dependency footprint: our install pulled 951 packages and occupied 533 MB before any application database driver was configured.

What are the alternatives to typeorm?

Prisma, Drizzle ORM, Sequelize. Our TypeORM install took 29 seconds, pulled 951 packages, and occupied 533 MB, then the test command failed after 26 seconds in Mocha's module-loading path.

Setup3/5Install worked; 951 packages and the default tests failed
Docs4/5Wide feature and example coverage with separate developer guidance
Community5/536,632 stars and active August 2026 commits and pull requests
Maturity5/5Version 1.1.0 supports many databases, runtimes, and patterns

Discussed on

  1. hnPrisma vs. TypeORM – Which Is Right for You?11 points
  2. hnTypeScript Express Tutorial #7. Relational Databases with Postgres and TypeORM8 points
  3. hnAPI with NestJS #17. Offset and keyset pagination with PostgreSQL and TypeORM4 points
  4. hnShow HN: Bemi for TypeORM – automatic data change tracking4 points
  5. hnGetting Started with NestJS and TypeORM4 points

Who it’s for

TypeScript teams that want decorators, entity classes, relations, migrations, and a broad database list in one ORM.
Applications that need PostgreSQL, MySQL, MariaDB, SQLite, SQL Server, Oracle, SAP HANA, Google Spanner, or MongoDB support.
Developers who want to choose between Data Mapper repositories and Active Record methods.
Existing TypeORM codebases that benefit from the project's large extension and example ecosystem.

Who it’s NOT for

Teams that want a small dependency footprint: our install pulled 951 packages and occupied 533 MB before any application database driver was configured.
Evaluators expecting the repository's default test command to pass in a fresh Node 22 container: our run exited in 26 seconds during Mocha's module-loading path.
Developers seeking one database-focused, strongly constrained API: TypeORM spans SQL and MongoDB, multiple runtimes, two persistence patterns, and database-specific behavior.
Projects that prefer schema-first generated clients over decorators and runtime entity metadata: Prisma follows that model more directly.

Setup reality

Our commit dd98d0f checkout installed 951 pnpm packages in 29 seconds and used 533 MB on disk. There was no build script or target, so build was skipped. Tests failed with exit code 1 after 26 seconds; the visible log tail ends in Mocha's ESM module-loading code and ELIFECYCLE, without showing the originating exception.

An application still needs a supported database driver, connection details, credentials, and a DataSource configuration. Migrations, replication, TLS, browser builds, and mobile runtimes each add choices beyond the README's short entity example.

The repository has a compose file and a tests directory but no Dockerfile. Its full database matrix is larger than a single clean container can represent, so contributors should follow DEVELOPER.md and provision the services required by the suite they intend to run.

Two persistence styles share one ORM

TypeORM lets a project use Data Mapper repositories, Active Record methods, or both. Entities describe tables with decorators, while repositories and entity managers handle reads and writes. The feature list also covers relations, cascades, transactions, migrations, query building, caching, logging, listeners, replication, and multiple database instances. That range is useful in a long-lived application whose needs may grow. It also means there are several valid ways to express the same operation, so a team should choose conventions before the codebase fills with mixed patterns.

The README's small User example is approachable: define columns, obtain a repository, save an object, then query it. Production work gets more specific once relations, transaction boundaries, migration review, and driver behavior enter the picture. TypeORM supports JavaScript ES2023 and TypeScript across Node.js, browsers, Electron, Expo, React Native, Cordova, Ionic, and NativeScript. A library covering that many runtimes cannot make every bundling or driver decision disappear. Confirm the exact runtime path with a small application before selecting it for a larger system.

Database breadth is the main reason to accept the abstraction

The documented database list includes PostgreSQL, MySQL and MariaDB, SQLite, Microsoft SQL Server, Oracle, SAP HANA, Google Spanner, MongoDB, and related drivers. That is a stronger fit for organizations with several database engines than for a small service committed to one. Cross-database and cross-schema queries, replication, and database-specific column types extend the reach further. The tradeoff is unavoidable: abstractions meet vendor-specific SQL, connection options, and edge cases throughout the API.

GitHub reported 616 open issues and pull requests on August 26, 2026, the same day the repository was pushed. That number mixes both kinds of work, so it is not a defect count. It does show how much compatibility territory the maintainers and contributors cover. Version 1.1.0, released July 13, included fixes for query-builder joins, PostgreSQL date functions, MongoDB transformation, cache cleanup, bundler-breaking require() calls, and unsafe empty write criteria. Those release notes are a useful reminder that ORM correctness lives in details, especially on write paths.

What happened when we ran it

Our commit dd98d0f checkout installed successfully in 29 seconds with pnpm on Node 22. It pulled 951 packages and occupied 533 MB. The repository itself contained 3,783 files, about 307,042 lines of source, and 12.9 MB checked out. There was no build script or target for the harness to call, so we skipped build rather than inventing a command. Installation alone therefore confirms dependency resolution, not a compiled package or working database connection.

The test command failed with exit code 1 after 26 seconds. The available log tail shows Mocha moving through its ESM import helpers and ends with pnpm's ELIFECYCLE message. It does not include the original exception, so attributing the failure to a driver, service, module, or Node version would be guesswork. The repository has 11 CI workflow files, a compose file, and a tests directory, but no Dockerfile. Contributors need the documented development setup and the relevant database services before treating the full suite as a one-command check.

A 533 MB install is a real maintenance choice

TypeORM's own repository install is much larger than the library a consumer necessarily ships, but 951 packages still matter to contributors and security teams. Dependency updates, workspace tooling, documentation packages, test infrastructure, and drivers all take time to resolve and audit. The absence of a harness-detected build target also makes the repository workflow less obvious than packages that expose a standard build script at the root. None of this disqualifies TypeORM, but it argues against choosing it only because the first entity example looks concise.

A new application should prototype one migration, one transaction, one relation-heavy query, and its expected deployment bundle. That exercise tests the areas where an ORM decision becomes expensive to reverse. Existing TypeORM applications have a different calculation: the 36,632-star project was active in August 2026, and the 1.1.0 notes show fixes across multiple drivers and core persistence behavior. Staying current is usually cheaper than replacing a working data layer solely to adopt a newer style.

Schema-first and SQL-first alternatives narrow the problem

Prisma starts from a schema and generates a client, which suits teams that want one declarative model and generated types. Drizzle keeps queries closer to SQL and offers less of the full application framework feel. MikroORM concentrates on Data Mapper concepts, while Sequelize is a familiar SQL ORM with a long Node.js history. TypeORM is the best of these only when its particular combination matters: wide driver support, decorators, runtime flexibility, migrations, and both Active Record and Data Mapper.

That combination is substantial, and our run makes the cost concrete. A 29-second install and 533 MB dependency tree are manageable on a development machine, but the failed 26-second test attempt did not give us a clean source-level confidence signal. Adopt TypeORM after a database-specific proof of concept, not from the generic feature list alone. For teams serving several database engines or maintaining an existing TypeORM estate, the breadth may repay the extra attention. For one straightforward PostgreSQL service, a narrower tool can leave fewer decisions open.

Alternatives

ProjectWhat it isPick it when
PrismaA schema-first ORM and generated TypeScript client with its own migration tooling.pick this instead when generated types and a central schema suit the team better than decorators and runtime metadata.
Drizzle ORMA TypeScript SQL toolkit with a thinner mapping layer and SQL-shaped queries.pick this instead when close control over SQL and a lighter abstraction matter more than TypeORM's feature range.
SequelizeA mature Node.js ORM centered on SQL databases and model definitions.pick this instead when your team already knows Sequelize or wants its SQL-only scope.
MikroORMA TypeScript Data Mapper with identity-map and unit-of-work patterns.pick this instead when Data Mapper semantics are the firm requirement and Active Record support adds no value.

What people are saying

  1. [velocity-scout] typeorm/typeorm

Sources

  1. TypeORM README
  2. TypeORM 1.1.0 release
  3. TypeORM developer setup
  4. TypeORM repository metadata

More data reviews

turso · TrackersListCollection · dash · getcontact-cli · awesome-zhuiju-free · iggy · the whole board →