Skip to content

wekan/FerretDB

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2,385 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

FerretDB v1 Fork by xet7

Tested to work with WeKan:

Someone please test:

  • MySQL
  • MariaDB
  • SAP Hana

Download

https://github.com/wekan/FerretDB/releases

Docker

Roadmap

ROADMAP

Original FerretDB info

Go Reference

Go codecov

Security Packages Docs

FerretDB was founded to become the de-facto open-source substitute to MongoDB. FerretDB is an open-source proxy, converting the MongoDB 5.0+ wire protocol queries to SQL - using PostgreSQL or SQLite as a database engine.

flowchart LR
  A["Any application<br>Any MongoDB driver"]
  F{{FerretDB}}
  P[(PostgreSQL)]
  S[("SQLite")]

  A -- "MongoDB protocol<br>BSON" --> F
  F -- "PostgreSQL protocol<br>SQL" --> P
  F -. "SQLite library<br>SQL" .-> S
Loading

Why do we need FerretDB?

MongoDB was originally an eye-opening technology for many of us developers, empowering us to build applications faster than using relational databases. In its early days, its ease-to-use and well-documented drivers made MongoDB one of the simplest database solutions available. However, as time passed, MongoDB abandoned its open-source roots; changing the license to SSPL - making it unusable for many open source and early-stage commercial projects.

Most MongoDB users do not require any advanced features offered by MongoDB; however, they need an easy-to-use open-source document database solution. Recognizing this, FerretDB is here to fill that gap.

Scope and current state

FerretDB is compatible with MongoDB drivers and popular MongoDB tools. It functions as a drop-in replacement for MongoDB 5.0+ in many cases. Features are constantly being added to further increase compatibility and performance.

We welcome all contributors. See our public roadmap, a list of known differences with MongoDB, and contributing guidelines.

This fork's Docker images

.github/workflows/docker.yml builds one multi-arch image from Dockerfile.release and pushes the same :<version> and :latest tags to three registries, each independently — so a registry being down never blocks the others:

Registry Image Browse
Docker Hub wekanteam/ferretdb https://hub.docker.com/r/wekanteam/ferretdb
Quay.io quay.io/wekan/ferretdb https://quay.io/repository/wekan/ferretdb
GitHub Container Registry ghcr.io/wekan/ferretdb https://github.com/wekan/FerretDB/pkgs/container/ferretdb

The image is FROM scratch (a static binary, no shell) and defaults to the SQLite backend on 0.0.0.0:27017 with state in /state and telemetry disabled:

docker run -d --rm --name ferretdb -p 27017:27017 -v ferretdb-state:/state wekanteam/ferretdb

Use any of the three images interchangeably — they are the same build:

docker run -d --rm --name ferretdb -p 27017:27017 -v ferretdb-state:/state quay.io/wekan/ferretdb
docker run -d --rm --name ferretdb -p 27017:27017 -v ferretdb-state:/state ghcr.io/wekan/ferretdb

To use the PostgreSQL backend instead, point it at a running PostgreSQL — both the SQLite and the vanilla PostgreSQL backends of this v1 fork are confirmed working (see wekan/wekan#6509):

docker run -d --rm --name ferretdb -p 27017:27017 \
  -e FERRETDB_HANDLER=postgresql \
  -e FERRETDB_POSTGRESQL_URL=postgres://username:password@host:5432/ferretdb \
  wekanteam/ferretdb

Quickstart

Upstream also publishes an all-in-one image that bundles FerretDB, the database and MongoDB Shell in one container, which is handy for quick experiments.

Run this command to start FerretDB with PostgreSQL backend:

docker run -d --rm --name ferretdb -p 27017:27017 ghcr.io/ferretdb/all-in-one

Alternatively, run this command to start FerretDB with SQLite backend:

docker run -d --rm --name ferretdb -p 27017:27017 -e FERRETDB_HANDLER=sqlite ghcr.io/ferretdb/all-in-one

This command will start a container with FerretDB, PostgreSQL/SQLite, and MongoDB Shell for quick testing and experiments. However, it is unsuitable for production use cases because it keeps all data inside and loses it on shutdown. See our Docker quickstart guide for instructions that don't have those problems.

With that container running, you can:

  • Connect to it with any MongoDB client application using MongoDB URI mongodb://127.0.0.1:27017/.
  • Connect to it using MongoDB Shell by just running mongosh. If you don't have it installed locally, you can run docker exec -it ferretdb mongosh.
  • For the PostgreSQL backend, connect to it by running docker exec -it ferretdb psql -U username ferretdb. FerretDB uses PostgreSQL schemas for MongoDB databases. So, if you created some collections in the test database using any MongoDB client, you can switch to it by running SET search_path = 'test'; query and see a list of PostgreSQL tables by running \d psql command.
  • For the SQLite backend, connect to it by running docker exec -it ferretdb sqlite3 /state/<database>.sqlite. So, if you created some collections in the test database using any MongoDB client, run docker exec -it ferretdb sqlite3 /state/test.sqlite and see a list of SQLite tables by running .tables command.

You can stop the container with docker stop ferretdb.

We also provide binaries and packages for various Linux distributions, as well as Go library package that embeds FerretDB into your application. See our documentation for more details.

Building and packaging

Note

We strongly advise users not to build FerretDB themselves. Instead, use binaries, Docker images, or packages provided by us.

FerretDB could be built as any other Go program, but a few generated files and build tags could affect it. See there for more details.

Managed FerretDB at cloud providers

Documentation

Community

If you want to contact FerretDB Inc., please use this form.