# ferretdb/ferretdb

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/ferretdb-ferretdb).**

10,976 stars · 479 forks · Go · Apache-2.0

## Links

- GitHub: https://github.com/FerretDB/FerretDB
- awesome-repositories: https://awesome-repositories.com/repository/ferretdb-ferretdb.md

## Description

FerretDB is an open-source database emulator and protocol translator that mimics a MongoDB environment to support existing drivers and client tools on a relational backend. It functions as a stateless database proxy that converts binary wire protocol messages into SQL statements, allowing a relational engine to handle document-oriented requests.

The project serves as a migration tool for moving applications from MongoDB to PostgreSQL without rewriting queries or changing client drivers. It achieves this by using PostgreSQL as a document store, storing and querying BSON documents through a translation layer.

The system provides capabilities for document-to-relational mapping and can be integrated as a Go library to embed proxy functionality directly into other applications.

## Tags

### Data & Databases

- [Protocol Translation Proxies](https://awesome-repositories.com/f/data-databases/mongodb-database-drivers/protocol-translation-proxies.md) — Converting binary MongoDB wire protocol messages into SQL queries to allow relational engines to handle document oriented requests. ([source](https://github.com/ferretdb/ferretdb#readme))
- [NoSQL to SQL Migrations](https://awesome-repositories.com/f/data-databases/nosql-to-sql-migrations.md) — Facilitates the migration of applications from MongoDB to PostgreSQL without requiring query rewrites.
- [NoSQL to SQL Translators](https://awesome-repositories.com/f/data-databases/nosql-to-sql-translators.md) — Translates MongoDB 5.0 API requests into compatible SQL statements for relational backends.
- [Database Connectivity Interfaces](https://awesome-repositories.com/f/data-databases/database-connectivity-interfaces.md) — Implements the network communication protocol used by database clients to allow standard tools to connect. ([source](https://github.com/ferretdb/ferretdb#readme))
- [Database Query Translators](https://awesome-repositories.com/f/data-databases/database-query-translators.md) — Translates document-based query requests from the wire protocol into executable SQL statements. ([source](https://github.com/ferretdb/ferretdb#readme))
- [Database Wire Protocol Emulation](https://awesome-repositories.com/f/data-databases/database-wire-protocol-emulation.md) — Converts binary database wire protocol messages into SQL statements for relational engine execution.
- [Database Wire Protocol Emulations](https://awesome-repositories.com/f/data-databases/database-wire-protocol-emulations.md) — Implements a standard database wire protocol to work with existing client applications without requiring code changes. ([source](https://github.com/ferretdb/ferretdb#readme))
- [Database Wire Protocol Implementations](https://awesome-repositories.com/f/data-databases/database-wire-protocol-implementations.md) — Accepts connections from compatible client applications by implementing the standard MongoDB wire protocol. ([source](https://github.com/ferretdb/ferretdb#readme))
- [Database Emulators](https://awesome-repositories.com/f/data-databases/document-relational-databases/database-emulators.md) — Mimics a MongoDB database server to support compatible drivers while using a relational backend. ([source](https://github.com/ferretdb/ferretdb#readme))
- [PostgreSQL Document Storage](https://awesome-repositories.com/f/data-databases/document-stores/postgresql-document-storage.md) — Uses PostgreSQL as a document store to store and query BSON documents through a translation layer.
- [JSON Document Storage](https://awesome-repositories.com/f/data-databases/json-document-storage.md) — Uses PostgreSQL as the primary store for JSON documents accessed via the MongoDB protocol.
- [JSON Document Stores](https://awesome-repositories.com/f/data-databases/json-document-stores.md) — Uses PostgreSQL as a backend to store and manage nested JSON documents. ([source](https://github.com/ferretdb/ferretdb#readme))
- [Hybrid Relational-JSON Storage](https://awesome-repositories.com/f/data-databases/json-document-stores/hybrid-relational-json-storage.md) — Uses PostgreSQL as a primary data store to manage and query JSON documents within relational columns.
- [Server Emulation](https://awesome-repositories.com/f/data-databases/mongodb-application-development/server-emulation.md) — Running a proxy that mimics a MongoDB server to support compatible client tools and application drivers.
- [MongoDB to PostgreSQL Migrations](https://awesome-repositories.com/f/data-databases/mongodb-to-postgresql-migrations.md) — Provides a translation layer to migrate applications from MongoDB to PostgreSQL without rewriting queries or changing drivers.
- [MongoDB and PostgreSQL Backends](https://awesome-repositories.com/f/data-databases/persistent-storage-backends/pluggable-database-backends/mongodb-and-postgresql-backends.md) — Enables the migration of data and applications from MongoDB to PostgreSQL without changing client drivers.
- [Relational Storage Backends](https://awesome-repositories.com/f/data-databases/persistent-storage-backends/relational-storage-backends.md) — Utilizes a relational database as the persistence layer for document-based data. ([source](https://github.com/ferretdb/ferretdb#readme))
- [Query Translators](https://awesome-repositories.com/f/data-databases/query-translators.md) — Converts structured wire protocol requests into native SQL query syntax for a relational backend. ([source](https://github.com/ferretdb/ferretdb#readme))
- [Native Query Translation](https://awesome-repositories.com/f/data-databases/sql-query-execution-engines/native-query-translation.md) — Translates MongoDB wire protocol queries into SQL statements for a relational storage engine. ([source](https://github.com/ferretdb/ferretdb#readme))
- [SQL Converters](https://awesome-repositories.com/f/data-databases/sql-query-interfaces/sql-converters.md) — Converts wire protocol requests into relational queries to store and retrieve data using a SQL backend. ([source](https://github.com/ferretdb/ferretdb#readme))
- [SQL Server Protocol Emulations](https://awesome-repositories.com/f/data-databases/sql-server-protocol-emulations.md) — Implements a wire protocol emulation layer that allows MongoDB clients to interact with a non-MongoDB backend. ([source](https://github.com/ferretdb/ferretdb#readme))
- [NoSQL Protocol Emulations](https://awesome-repositories.com/f/data-databases/sql-server-protocol-emulations/nosql-protocol-emulations.md) — Mimics a MongoDB server to support existing drivers and client tools while routing data to PostgreSQL.
- [NoSQL Table Emulation](https://awesome-repositories.com/f/data-databases/table-data-processing/nosql-table-emulation.md) — Emulates NoSQL database operations and query languages on a relational backend.
- [Database Server Emulation](https://awesome-repositories.com/f/data-databases/table-data-processing/nosql-table-emulation/database-server-emulation.md) — Mimics a MongoDB environment to support existing drivers and client tools on a relational backend.
- [Document-to-Relational Mappings](https://awesome-repositories.com/f/data-databases/tabular-data-frameworks/relational-transformations/relational-to-document-conversions/document-to-relational-mappings.md) — Implements the mapping of BSON documents to SQL tables to maintain compatibility between NoSQL and SQL models.
- [Database Query Proxying](https://awesome-repositories.com/f/data-databases/database-query-proxying.md) — Enables the integration of a reusable software package for translating database protocols internally. ([source](https://github.com/ferretdb/ferretdb#readme))
- [Embedded Proxies](https://awesome-repositories.com/f/data-databases/database-query-proxying/embedded-proxies.md) — Provides the ability to integrate the translation proxy directly into applications as a Go library. ([source](https://github.com/ferretdb/ferretdb#readme))

### Software Engineering & Architecture

- [Database Protocol Proxies](https://awesome-repositories.com/f/software-engineering-architecture/database-protocol-proxies.md) — Functions as a stateless proxy that translates binary wire protocol messages into SQL statements.
- [Stateless Architectures](https://awesome-repositories.com/f/software-engineering-architecture/stateless-architectures.md) — Processes database queries independently to allow the translation layer to scale horizontally without session state.

### Artificial Intelligence & ML

- [Text-to-SQL Translators](https://awesome-repositories.com/f/artificial-intelligence-ml/text-to-sql-translators.md) — Converts wire protocol queries into SQL statements to run document-based logic on a relational database. ([source](https://github.com/ferretdb/ferretdb#readme))
- [Document Management Engines](https://awesome-repositories.com/f/artificial-intelligence-ml/feature-stores/postgresql-backends/document-management-engines.md) — Provides a standardized API to handle document-oriented data workflows using PostgreSQL.

### Part of an Awesome List

- [BSON-to-Relational Mappings](https://awesome-repositories.com/f/awesome-lists/devtools/object-mapping/document-mappings/bson-to-relational-mappings.md) — Maps BSON document structures to SQL tables and columns to maintain compatibility between NoSQL and SQL models.
- [Database Tools](https://awesome-repositories.com/f/awesome-lists/data/database-tools.md) — MongoDB-compatible database.
- [Databases and Storage](https://awesome-repositories.com/f/awesome-lists/data/databases-and-storage.md) — Open-source MongoDB alternative.

### Networking & Communication

- [Protocol Translation](https://awesome-repositories.com/f/networking-communication/proxy-protocols/protocol-translation.md) — Translates binary MongoDB wire protocol messages into SQL statements for relational backends.
- [Stateless Protocol Proxies](https://awesome-repositories.com/f/networking-communication/database-proxying/stateless-protocol-proxies.md) — Functions as a stateless database proxy that converts binary wire protocol messages into SQL statements.
- [Stateless Proxies](https://awesome-repositories.com/f/networking-communication/database-proxying/stateless-proxies.md) — Implements a stateless translation layer that can be scaled horizontally to handle database requests.

### DevOps & Infrastructure

- [Go Library Integrations](https://awesome-repositories.com/f/devops-infrastructure/backend-as-a-service-integrations/go-library-integrations.md) — Integrates proxy functionality directly into other applications as a reusable Go library. ([source](https://github.com/ferretdb/ferretdb#readme))

### Programming Languages & Runtimes

- [Library Embedding](https://awesome-repositories.com/f/programming-languages-runtimes/library-embedding.md) — Allows the database proxy functionality to be integrated directly into other Go applications as a library.
