# Bedrock
[](https://github.com/bedrock-kv/bedrock/actions/workflows/elixir_ci.yaml)
[](https://coveralls.io/github/bedrock-kv/bedrock?branch=develop)
Bedrock is an embedded, distributed key-value store with guarantees beyond ACID.
It features consistent reads, strict serialization, transactions across the
key-space and a simple API.
## Installation
If [available in Hex](https://hex.pm/docs/publish), the package can be installed
by adding `bedrock` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:bedrock, "~> 0.5"}
]
end
```
## Example
[](https://livebook.dev/run?url=https%3A%2F%2Fraw.githubusercontent.com%2Fbedrock-kv%2Fbedrock%2Frefs%2Fheads%2Fdevelop%2Flivebooks%2Fclass_scheduling.livemd)
## Durability Foundation Guides
- [Durability Foundation Overview](guides/durability-foundation.md)
- [Durability Profile Contract](guides/durability-profile.md)
- [S3 Object Storage Backend](guides/object-storage-s3.md)
- [Async Persistence Queue](guides/async-persistence-queue.md)
- [Distributed Durability Suite](guides/distributed-durability-tests.md)
## Durability Defaults
- Runtime durability mode defaults to `:strict`.
- Unsupported durability mode values resolve to `:strict`.
- Use explicit relaxed mode for local development or single-node rollout only:
```elixir
config :bedrock, MyCluster,
durability_mode: :relaxed
```
Commit acknowledgments are gated by WAL durability: a log server acknowledges
only after the WAL append is written and fsynced. Async object persistence
remains separate and does not gate commit ACKs.
## S3/MinIO Tests
S3-focused tests use a local MinIO process and are tagged with `:s3`.
Install MinIO test binaries:
```bash
MIX_ENV=test mix minio_server.download --arch darwin-arm64 --version latest
```
Run S3 tests:
```bash
mix test --include s3
```
If MinIO is not available, tests tagged `:s3` are skipped automatically.