Concord

Build StatusHex.pmDocumentationLicense

A distributed, strongly-consistent embedded key-value store built in Elixir using the Raft consensus algorithm.

Concord is an embedded database for Elixir applications — think SQLite for distributed coordination. Starts with your application, no separate infrastructure needed. Strong consistency guarantees with microsecond-level performance.

Key Features

Installation

def deps do
  [{:concord, "~> 0.1.0"}]
end

Quick Start

# Store and retrieve data
Concord.put("user:1001", %{name: "Alice", role: "admin"})
{:ok, user} = Concord.get("user:1001")

# TTL (auto-expires after 1 hour)
Concord.put("session:abc", session_data, ttl: 3600)
{:ok, {data, remaining_ttl}} = Concord.get_with_ttl("session:abc")

# Bulk operations
Concord.put_many([{"k1", "v1"}, {"k2", "v2", 600}])
{:ok, results} = Concord.get_many(["k1", "k2"])

# Conditional update (compare-and-swap)
Concord.put_if("counter", 1, expected: 0)

# Read consistency levels
Concord.get("key", consistency: :eventual)  # Fast, may be stale
Concord.get("key", consistency: :leader)    # Default, balanced
Concord.get("key", consistency: :strong)    # Linearizable

HTTP API

curl http://localhost:4000/api/v1/health

curl -X PUT -H "Content-Type: application/json" \
  -d '{"value": "hello"}' \
  http://localhost:4000/api/v1/kv/greeting

curl http://localhost:4000/api/v1/kv/greeting

Multi-Node Cluster

iex --name n1@127.0.0.1 --cookie concord -S mix  # Terminal 1
iex --name n2@127.0.0.1 --cookie concord -S mix  # Terminal 2
iex --name n3@127.0.0.1 --cookie concord -S mix  # Terminal 3

Performance

Performance varies significantly depending on hardware, cluster size, network topology, and consistency level. ETS-backed reads are inherently fast, but actual throughput and latency depend on your deployment. Run mix run benchmarks/run_benchmarks.exs on your own hardware to get representative numbers.

When to Use Concord

Use Case Fit
Feature Flags Excellent
Session Storage Excellent
Distributed Locks Excellent
Config Management Excellent
Rate Limiting Good
API Response Cache Great
Primary Database Avoid (use PostgreSQL)
Large Blob Storage Avoid (use S3)

Known Limitations

Comparison

Feature Concord etcd Consul ZooKeeper
Language Elixir Go Go Java
Consistency Strong (Raft) Strong (Raft) Strong (Raft) Strong (Zab)
Storage In-memory (ETS) Disk (WAL) Memory + Disk Disk
Read Latency 1-5ms 5-20ms 5-15ms 5-20ms
Embedded Yes No No No
Built-in Auth Tokens + RBAC mTLS ACLs ACLs
Multi-DC No Yes Yes Yes

Documentation

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Add tests for new functionality
  4. Ensure all tests pass (mix test)
  5. Submit a pull request

License

MIT License — See LICENSE for details.

Acknowledgments