All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
Changed
- Publish every umbrella package to Hex.pm at the Concord release version.
- Version replicated Concord command envelopes while retaining replay support and frozen legacy semantics for the exact pre-versioning envelope. Unknown command schemas are rejected before they enter the replicated log.
- Reject executable and runtime-local terms from replicated commands, including anonymous index extractors, PIDs, ports, and references, even when hidden in a compressed value. Existing legacy index definitions remain readable long enough to drop by exact name. Version-one admission then requires explicit state-representation reconciliation before indexes are recreated with non-empty UTF-8 names of at most 255 bytes, declarative extractors, and a full reindex.
- Freeze version-one validation and logical size limits independently of local API settings. Compression cannot change value, transaction, or aggregate command admission; local limits may only lower the protocol maxima.
- Give each default VSR client process incarnation a cryptographically unique identity; use transaction idempotency keys for restart-safe write retries while their bounded replicated-cache entries are retained.
- Support fixed VSR configurations of one through six replicas with strict majority quorums.
- Add an explicit VSR benchmark for throughput and latency across every supported cluster size.
- Document that VSR prefix scans filter the authoritative state in
O(N)time. - Route VSR queries through quorum-confirmed linearizable read barriers without appending reads to the replicated log.
- Require
viewstamped_replication0.2.0 in Hex builds so packaged Concord includes the read-barrier and durable-recovery runtime used by Concord 3.
Fixed
- Decode valid checksummed WAL records containing atoms that have not yet been loaded in a restarted VM, preserving committed application values.
- Retransmit uncommitted VSR prepares so dropped
PrepareorPrepareOkmessages cannot indefinitely stall a healthy quorum. - Checksum version-two WAL/checkpoint lengths and fail closed on malformed,
corrupt, or unsupported records, while retaining torn-tail recovery for
incomplete version-two WAL records and read compatibility with complete
version-one data. Version-two writes are gated behind
CONCORD_VSR_WAL_VERSION=2; the default remains rollback-compatible version one and no automatic downgrade is attempted. - Install a transferred state-machine snapshot and its matching VSR durable state crash-atomically; custom storage adapters must provide the same atomic callback instead of exposing either half independently.
- Reject malformed or unsupported Concord snapshot versions instead of normalizing them as legacy state.
- Preserve
:quorum_unavailableand:not_readyerrors instead of collapsing them into generic caller timeouts. - Replay file-backed state machines from their snapshot without decreasing the durable applied-operation watermark during restart.
- Derive the VSR package version in the release workflow instead of repeatedly checking and skipping the already-published 0.1.0 release.
3.0.0-beta.0 - 2026-07-19
Added
- Add the standalone
viewstamped_replicationapplication and use it as Concord's replicated runtime. - Publish
viewstamped_replication0.1.0 as Concord's protocol runtime dependency. - Publish the migrated
Turso.*API asex_turso0.5.0 and use it for Concord's Turso engine. - Add three-node VSR release tests for KV, MVCC, transactions, leases, engine isolation, primary failover, and strong reads.
Changed
- Rebuilt the changelog with the full published package release history.
- Make Viewstamped Replication the only replicated engine in Concord 3.0.
- Require explicit, ordered membership for multi-node VSR configurations.
Removed
- Remove the Ra runtime, dependency, configuration switch, test harness, and operational scripts. Concord 3.0 does not read or migrate Ra storage.
Fixed
- Align source package metadata and installation docs with the released 2.x API package.
- Document embedded boot fixes for Ra default system startup, Prometheus opt-in metrics, disabled clustering, and restart from existing Ra data directories. Fixes #17.
2.0.1 - 2026-05-30
Fixed
- Start the Ra default system before Concord cluster initialization so embedded
host applications do not need to start
:ramanually. - Return actionable backup errors when the Ra cluster is not available.
- Disable the Prometheus exporter by default so embedded hosts do not crash on metrics port conflicts.
- Add a
:clusteringswitch so single-node embedded deployments can disable libcluster. - Restart existing Ra servers from persisted data directories during app startup.
2.0.0 - 2026-05-16
Added
- Add the v2 KV and transaction API, including
Concord.KV,Concord.Txn, prefix/range listing, revision metadata, conditional operations, leases, and sync/watch support. - Add v2 design documentation for MVCC records, transactions, sync/watch, leases, validation, and agent coordination.
- Add a release-mode E2E test suite for distributed node validation.
Changed
- Move long-form documentation into versioned
docs/v1anddocs/v2directories. - Update README and E2E documentation for the release-based architecture.
- Simplify the library surface around the embedded database use case.
Removed
- Remove out-of-scope Web, AuditLog, EventStream, Tracing, and Prometheus modules and dependencies from the core library.
Fixed
- Fix Ra 3.0 query calls and MFA query argument order.
- Fix CI, Credo, Dialyzer, ETS ownership, and release test data cleanup issues.
1.1.0 - 2026-03-23
Changed
- Upgrade Ra and related dependency constraints for Ra 3.0 compatibility.
Fixed
- Fix Ra 3.0 API usage in the state machine query path and test helper.
- Fix formatting and Credo issues before publishing the package.
1.0.2 - 2026-03-22
Changed
- Optimize prefix scans from
O(N)toO(log N + K).
Removed
- Remove token authentication, RBAC, and multitenancy from the embedded database surface.
Fixed
- Fix ETS match specification formatting and remaining formatter violations.
1.0.1 - 2026-03-09
Changed
- Reorganize the README into focused documentation guides.
- Add the Concord database skill and supporting API, HTTP, and state-machine references.
Fixed
- Address review findings around correctness, deterministic replay, snapshot coverage, backup behavior, documentation, and tests.
- Improve E2E network partition coverage and test workflow behavior.
1.0.0 - 2025-12-09
Added
- Add multi-node E2E coverage using manually spawned Erlang nodes.
- Add cluster connection helper scripts for manual distributed testing.
- Add Spec Kit command templates and project scaffolding.
- Improve the Hex.pm release workflow.
Changed
- Make the HTTP API opt-in by default.
- Replace LocalCluster-based E2E tests with manual node spawning for OTP 28.
- Update development environment dependencies and project documentation.
Fixed
- Fix distributed test startup and cleanup issues.
- Fix cluster restart handling when the Ra system is not started.
- Disable Prometheus metrics by default.
- Fix Dialyzer and CI release workflow issues.
0.3.0 - 2026-03-09
Changed
- Publish a 0.x package line from the post-v1.0 cleanup state.
- Include the V3 deterministic state-machine work and documentation cleanup from the 1.0.x line.
Removed
- Remove token authentication, RBAC, and multitenancy features from the 0.x package line.
0.2.0 - 2025-10-30
Added
- Add TTL support, bulk operations, configurable read consistency, conditional updates, secondary indexes, and query filtering.
- Add backup/restore, value compression, performance benchmarks, and production configuration documentation.
- Add the HTTP API, OpenAPI documentation, TLS support, Mix tasks, and certificate generation.
- Add Prometheus metrics, OpenTelemetry tracing, audit logging, CDC event streaming, RBAC, and multitenancy features.
Fixed
- Fix test isolation, ETS initialization, API response, TTL, bulk operation, Credo, Dialyzer, and CI issues discovered while hardening the feature set.
0.1.3 - 2025-10-18
Added
- Initial embedded distributed key-value store built on Raft.
- Add ETS-backed reads, core CRUD operations, cluster startup, configuration, documentation, tests, CI, and release workflow scaffolding.
Fixed
- Add required Hex.pm package metadata.
- Fix early formatting, lint, coverage, and release workflow failures.