What is BonsaiDb?

BonsaiDb's is a developer-friendly database for the Rust programming language that grows with you and your projects.

A developer-friendly database should be able to solve most of your data storage and transmission needs. The features BonsaiDb offers are catered to solving some of the most common problems developers face when creating connected, data-driven applications.

BonsaiDb's Features

It grows with you

BonsaiDb's features are designed to work when using it as a local-only database, as a networked database server, and eventually as a distributed cluster. This design makes it easy to test and develop apps with BonsaiDb, as there is no additional software for developers to set up when working on a BonsaiDb powered app.

Schema as Rust Code

BonsaiDb leverages the Rust type system to define schema as code, enabling the Rust compiler to help you ensure your database code is correct. This helps keep the likelihood of unexpected runtime errors to a minimum, and it also helps developers understand the entire flow of their code and data.

ACID-compliant Transactional Storage

BonsaiDb's collections are ACID-compliant, giving you the peace of mind that your data is safe in the event of an unexpected failure of the server. This mode of storage should be the default for most developers, yet many popular NoSQL database choices do not offer ACID-compliant storage.

An example of where ACID-compliance matters: Storing a customer's order in a web store. If the method of writing the customer's order to the database is not ACID-compliant, a power failure could occur between saving the customer's order and the bytes being persisted to disk. This could result in a user being notified that their order was successfully submitted (and worse, their credit card charged), yet after the power is restored, your database has no record of the transaction.

Competitive Performance

BonsaiDb does not aim to be the fastest database available. Instead, our focus is on developer experience and data reliability. However, we recognize the importance of trusting that BonsaiDb is able perform as well as existing database solutions and aim to provide competitive performance. To see how BonsaiDb currently compares, check out our benchmarks.

At-Rest Encryption

BonsaiDb optionally supports encrypting data at-rest, which prevents data from being leaked if a hard drive is stolen or wasn't wiped before being removed from a data center. This is an important feature to have when storing Personally Identifiable Information (PII) if your hosting environment does not offer ways of encrypting the filesystem itself.

Backup / Restore

BonsaiDb offers backup and restore from a backup location, which is a trait that can be implemented for custom backup solutions. BonsaiDb provides built-in support for using a filesystem directory as a backup location, and there is planned support for any S3-compatible storage service. Currently, backups are always complete backups, but incremental backups are planned.

Extensible Role-based Access Control

BonsaiDb offers a robust permission system which allows for "actions" to be allowed or denied on "resources." BonsaiDb uses this access control system internally, but it is written to be able to be extended by actions and resources defined in your application.

With BonsaiDb, you can choose to utilize the multi-user support as your account system for your application. By doing this, you can use roles and groups to manage your application's permissions, not just the database's permissions.

This feature is still under development, and currently, permissions are only enforced at the network level. There are plans to allow permissions to be evaluated offline as well.

Atomic Key-Value Storage

Sometimes ACID compliance is overkill, such as in situations where a value is being updated hundreds or thousands of times per second. BonsaiDb offers a namespaced, atomic key-value store. It currently offers basic atomic operations as well as some atomic arithmetic operations.

The default configuration of the Key-Value store prefers data integrity, but can be configured to allow better throughput.

Publish/Subscribe (PubSub)

BonsaiDb offers the ability to subscribe to topics and receive published messages. PubSub can be used to power features like private messaging but can also be used as a way to separate services within an application's architecture.

Secure Networked Access

BonsaiDb offers two wire protocol implementations, one that utilizes QUIC and one that utilizes WebSockets. The QUIC-based protocol is more efficient, but to enable access in the web browser, WebSockets are also offered. WebSockets may eventually be replaced or supplemented with a WebRTC offering.

Extensible Wire Protocol

BonsaiDb offers an ability to extend the wire protocol with a request/response style API. This provides an easy way to provide authenticated, permission-aware access to server-side functionality.

The user's guide has a page dedicated to an example of this setup.

Extensible TCP Layer

Suppose you're designing an app that exposes an HTTP layer and wish to connect to your database server over WebSockets. BonsaiDb allows upgrading TCP connections using a hyper::Request or manually after performing the negotation.

An example of this configuration is included in the repository. It shows how to use the Axum framework alongside BonsaiDb's WebSockets.

TLS Certificates via LetsEncrypt

BonsaiDb requires TLS for its connections. You can use any valid TLS certificate. If you would like BonsaiDb to automatically acquire one using ACME, it's as simple as enabling a feature flag and listening for TCP connections on port 443. An example showing how this is configured is available in the repository.

BonsaiDb's Planned Features

And more. We welcome feedback and suggestions.