“"Thanks for the thorough bug report @rohanpadhye! Really incredible work from you and Antithesis. I haven't had a chance to try and reproduce this yet, but at first glance it seems both legitimate and difficult to reproduce without a tool like Antithesis." — @schmichael, https:/...”
You know that feeling when you need three servers to agree on a single number and you realize you are about to write leader election yourself? The Raft paper describes the algorithm, but the paper does not hand you a network transport, a snapshot store, log compaction, or a way to add and remove servers while the cluster is live. Writing those yourself means debugging split-brain at 2am with no test harness that can reproduce it. hashicorp/raft's pitch is that all of it already exists in one Go package that HashiCorp runs in Consul, Nomad, and Vault.
Think of it like a group chat where only one person is allowed to type, and everyone else copies what they type into their own notebook. You give the library your own finite state machine — anything with an `Apply(log)` method — plus a place to store logs on disk. One node is elected leader; you call `Apply()` on it, it writes the entry to durable storage, replicates it to the other nodes, and once a majority has persisted it the entry is committed and handed to your FSM on every node. To keep the log from growing forever, the library snapshots your FSM state and deletes the old entries automatically. The design choice that makes it distinctive is asynchronous heartbeats: the leader's keep-alive pings are sent on a separate goroutine from actual data replication, so a leader with a slow disk does not lose its position and trigger an unnecessary election.
If you are a Go engineer building something that needs several machines to agree on one ordered log — a control plane, a distributed KV store, a scheduler — this is the shortest path from the Raft paper to running code, and Consul and Nomad both pin it in production. It is not for you if you already own your own networking and storage layers and want a deterministic core you drive yourself; etcd-io/raft is the better shape for that. It is also not for you if MPL-2.0 fails your legal review, since both named alternatives are Apache-2.0.
Worth exploring with your eyes open. The adoption evidence is real — Consul and Nomad both pin v1.7.3, and GitHub counts 5,308 dependent repositories — but three open issues (#695 safety, #666 liveness, #697 InstallSnapshot livelock) all trace to the same async-heartbeat design, and none of them are fixed in any shipped release. The last tag is v1.7.3 from 2025-03-20 and the most recent CI run on main concluded failure on 2026-07-27, so if you adopt it now you are adopting the released version with known-open safety reports on the tracker.
Deep-dive insight, Easy and Pro modes, plus action playbooks — the full breakdown is one tap away.