Announcing FerretDB 1.0 GA - a truly Open Source MongoDB alternative (original) (raw)
After several months of development, FerretDB is now production-ready. We are excited to announce the general availability of FerretDB, a truly Open Source MongoDB alternative, built on PostgreSQL, and released under the Apache 2.0 license.
MongoDB is no longer open source. We want to bring MongoDB database workloads back to its open-source roots. We are enabling PostgreSQL and other database backends to run MongoDB workloads, retaining the opportunities provided by the existing ecosystem around MongoDB.
- Deploy anywhere + stay in control of your data
- Use it freely for your cloud-based projects
- Use your existing PostgreSQL infra to run MongoDB workloads
How to get started
We offer Docker images for production use and development, as well as RPM and DEB packages. If you would like to test FerretDB, we provide an All-in-one Docker image, containing everything you need to evaluate FerretDB with PostgreSQL.Get started with the All-in-one package here.
Additionally, thanks to our partners, FerretDB is available on two cloud providers for testing:
- Scaleway (see their blog post for more information)
- On the Civo Marketplace
Main feature additions to GA
In this GA release, FerretDB now supports the createIndexes
command. This will enable you to specify the fields you want to index, and also the type of index to use (e.g. ascending, descending, or hashed).
For instance, suppose you have a users
collection containing several fields, including "age", "name", and "email", and you want to create an index on the "age" field. You can now run the following command:
db.users.createIndex({ age: 1 })
This will create an ascending index on the "age" field, which will speed up any queries that filter on that field.
We've also added the dropIndexes
command, which allows you to remove an index from a collection. Here's an example:
db.users.dropIndex({ age: 1 })
This will remove the index from the "users" collection.
We have expanded our aggregation pipeline functionality to include additional stages, such as $unwind
, $limit
and $skip
, in addition to the $sum
accumulator within the $group
stage. With these additions, we can perform more refined calculations and manipulations of collection data. In addition to these, we also added support for count
and storageStats
fields in $collStats
aggregation pipeline stage.
To help you gather more information about your collections, databases, and server performance, we've enabled partial support for several server commands, including collStats
, dbStats
, and dataSize
.
To retrieve statistics about a collection, use the collStats
command like this:
db.runCommand({ collStats: 'users' })
If the statistics is about the database, run the command below:
db.runCommand({ dbStats: 1 })
For the total data size of a collection, run the following command:
db.runCommand({ dataSize: '<database>.<collection>' })
So where are we now?
With the release of FerretDB 1.0 GA, no breaking changes will be introduced in the upcoming minor versions.
We are also proud to announce that FerretDB now has:
- 👨🏻💻 Over 40 code contributors with more than 130 merged pull requests from our community (see our thank you notes below)
- ⭐️ Over 5300 Stars and 200 Forks on GitHub
- 🔥 Over 100 running instances with telemetry enabled
- ⏫ Over 10000 FerretDB downloads
With the release of FerretDB 1.0, these numbers will only continue to grow.
We are executing on our roadmap, and are planning to add more significant features in the coming months. Get started with FerretDB 1.0 GA here.
Where are we headed?
We are creating a new standard for document databases with MongoDB compatibility. FerretDB is a drop-in replacement for MongoDB, but it also aims to set a new standard which not only brings easy to use document databases back to its open-source roots, but also enables different database engines to run document database workloads in using a standardized interface.
Also, FerretDB will offer the flexibility of document databases, with the possibility to run queries on the same data set using SQL.
What is FerretDB GA capable of?
FerretDB 1.0 GA includes all the essential features capable of running document database workloads.
We are testing FerretDB against real-world applications, like FastNetMon, the Enmeshed Connector, BigBlueButton, Strapi, or frameworks such as MeteorJS, among others.
We also confirmed that popular database management tools such as mongosh
, MongoDB Compass, NoSQL Booster, Mingo are able to leverage the current feature set of FerretDB.
It's like managing a MongoDB database, but it is FerretDB (and open source) under the hood. We think this is insanely cool!
What database backends does FerretDB support?
FerretDB offers a fully pluggable architecture, we support other backends as well, and support for these can be contributed by the community.
PostgreSQL
We are building FerretDB on PostgreSQL and we envision that this is going to be our main database backend in the foreseeable future. This is the backend which will get the newest features of FerretDB. We are implementing features adding MongoDB compatibility to Postgres mainly using its JSONB capabilities. However, we recognize that we will need to depart from this approach to increase performance by creating our own extension or through other methods.
Tigris
We partnered with Tigris Data to add support for Tigris, a backend which offers a fully managed solution and an alternative to MongoDB Atlas. Backend support for Tigris is now maintained by Tigris Data.
You can try it out on their website.
SAP HANA
Our friends at SAP are currently working on adding SAP HANA compatibility to FerretDB, which we are very excited about. It is also great to see SAP's commitment to open source.
SQLite and future database backends
We are open to adding support to other backends. Currently, we are in the process of adding basic support for SQLite.
How can I help?
- Provide feedback
- Contribute
- Partner with us
We are working with software publishers, infrastructure providers and the maintainers of popular JS frameworks to create compatibility with their software.
If you think that your software would benefit from having an alternative to MongoDB - please let us know. We are happy to work with you.
We are available on our Community Slack, on GitHub, and we are also ready to jump on a call with you if you have ideas to discuss.Contact us today.
Thank you
We extend our sincerest thanks to our dedicated community for all the contributions and feedback leading to FerretDB GA.
Thank you to Instaclustr for their code contributions and feedback, and Tigris as a supporter and first user of FerretDB in production.
Special thanks go to: seeforschauer, ribaraka, ekalinin, fenogentov, OpenSauce, GinGin3203, DoodgeMatvey, pboros, lucboj, nicolascb, ravilushqa, fcoury, AlphaB, peakle, jyz0309, klokar, thuan1412, kropidlowsky, yu-re-ka, jkoenig134, ndkhangvl, codingmickey, zhiburt, ronaudinho, si3nloong, folex, GrandShow, narqo, taaraora, muyouming, junnplus, agneum, radmirnovii, ae-govau, hugojosefson.
There are others, of course, who have helped in many ways by identifying bugs, providing feedback, and testing FerretDB, we thank you all!
We are happy to welcome new members to our growing community and encourage everyone to join us on GitHub, and explore the many possibilities FerretDB has to offer.