Which is Better Node.js ORM Libraries?
objection vs bookshelf

1 Year
objectionbookshelf
What's Node.js ORM Libraries?

Node.js ORM, or Object-Relational Mapping, is a programming technique that simplifies database interaction in Node.js applications. It enables developers to work with databases using JavaScript or TypeScript objects instead of raw SQL queries. This approach abstracts the complexities of database operations, allowing for a more object-oriented coding style. With features like cross-database compatibility, schema management, query building, and middleware support, Node.js ORM libraries, such as Mongoose, Prisma, Knex, Sequelize, TypeORM, Objection, Bookshelf, and Waterline, provide a convenient and consistent way to model, query, and manage data in various database systems, catering to different project needs and preferences in the Node.js ecosystem.

NPM Package Downloads Trend
Github Stars Ranking
Stat Detail
Package
Weekly Downloads
Github Stars
Open Issues
Last Commit
License
objection139,2597,195992 days agoMIT License
bookshelf79,6686,337237a month agoMIT License
Feature Comparison
Featuresobjectionbookshelf
Size
Objection is lightweight, with a minimalistic design suitable for simple use cases.
Bookshelf is lightweight and simple, suitable for projects with basic ORM requirements.
Consistency
Objection allows for flexible schema design, suitable for projects with changing requirements.
Bookshelf offers schema consistency but allows for some flexibility when needed.
Mutability
Objection allows for schema changes, making it suitable for projects with evolving requirements.
Bookshelf supports schema changes, providing adaptability for projects with evolving data models.
Localization
Objection does not provide built-in localization features but can be extended through custom solutions.
Bookshelf does not have built-in localization support but allows for custom implementation.
Extensibility
Objection is extensible through plugins, allowing developers to add custom features.
Bookshelf is extensible, supporting the use of plugins to enhance functionality.
Maintenance
Objection is maintained, although updates may be less frequent compared to other packages.
Bookshelf is maintained, but it may have a slower update cycle compared to some other packages.
Popular
Objection has a smaller but dedicated user base and is popular in specific use cases.
Bookshelf is less popular compared to some other packages but has its user base.
Learning Curve
Objection has a moderate learning curve, with a focus on simplicity and ease of use.
Bookshelf has a low learning curve, making it accessible for developers new to ORM.
Ecosystem
Objection has a smaller ecosystem but includes essential plugins for common use cases.
Bookshelf has a smaller ecosystem compared to some other packages, with a focus on simplicity.
NPM Package Introudction

Stand With Ukraine

Tests Join the chat at https://gitter.im/Vincit/objection.js

Objection.js

Objection.js is an ORM for Node.js that aims to stay out of your way and make it as easy as possible to use the full power of SQL and the underlying database engine while still making the common stuff easy and enjoyable.

Even though ORM is the best commonly known acronym to describe objection, a more accurate description is to call it a relational query builder. You get all the benefits of an SQL query builder but also a powerful set of tools for working with relations.

Objection.js is built on an SQL query builder called knex. All databases supported by knex are supported by objection.js. SQLite3, Postgres and MySQL are thoroughly tested.

What objection.js gives you:

What objection.js doesn't give you:

  • A fully object oriented view of your database With objection you don't work with entities. You work with queries. Objection doesn't try to wrap every concept with an object oriented equivalent. The best attempt to do that (IMO) is Hibernate, which is excellent, but it has 800k lines of code and a lot more concepts to learn than SQL itself. The point is, writing a good traditional ORM is borderline impossible. Objection attempts to provide a completely different way of working with SQL.
  • A custom query DSL. SQL is used as a query language. This doesn't mean you have to write SQL strings though. A query builder based on knex is used to build the SQL. However, if the query builder fails you for some reason, raw SQL strings can be easily written using the raw helper function.
  • Automatic database schema creation and migration from model definitions. For simple things it is useful that the database schema is automatically generated from the model definitions, but usually just gets in your way when doing anything non-trivial. Objection.js leaves the schema related things to you. knex has a great migration tool that we recommend for this job. Check out the example project.

The best way to get started is to clone our example project and start playing with it. There's also a typescript version available.

Check out this issue to see who is using objection and what they think about it.

Shortcuts: