{"id":37212360,"url":"https://github.com/jmsadair/raft","last_synced_at":"2026-01-15T00:25:37.665Z","repository":{"id":65296496,"uuid":"584169453","full_name":"jmsadair/raft","owner":"jmsadair","description":"An implementation of the Raft consensus protocol.","archived":false,"fork":false,"pushed_at":"2025-08-12T05:18:08.000Z","size":734,"stargazers_count":38,"open_issues_count":2,"forks_count":3,"subscribers_count":1,"default_branch":"dev","last_synced_at":"2025-09-03T17:25:31.471Z","etag":null,"topics":["consensus-protocol","distributed-computing","distributed-systems","go","golang","grpc","hacktoberfest","protobuf","raft","raft-consensus-algorithm"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jmsadair.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-01-01T17:13:59.000Z","updated_at":"2025-08-13T02:07:57.000Z","dependencies_parsed_at":"2023-02-17T01:45:44.661Z","dependency_job_id":"8a90f132-2d09-4dce-be48-30bb9e52e5f8","html_url":"https://github.com/jmsadair/raft","commit_stats":null,"previous_names":["jmsadair/goraft"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/jmsadair/raft","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmsadair%2Fraft","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmsadair%2Fraft/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmsadair%2Fraft/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmsadair%2Fraft/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jmsadair","download_url":"https://codeload.github.com/jmsadair/raft/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmsadair%2Fraft/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28439701,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T22:37:52.437Z","status":"ssl_error","status_checked_at":"2026-01-14T22:37:31.496Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["consensus-protocol","distributed-computing","distributed-systems","go","golang","grpc","hacktoberfest","protobuf","raft","raft-consensus-algorithm"],"created_at":"2026-01-15T00:25:37.169Z","updated_at":"2026-01-15T00:25:37.650Z","avatar_url":"https://github.com/jmsadair.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"raft\" src=\"assets/raft_logo.png\"\u003e\n\u003c/p\u003e\n\n\n![build](https://github.com/jmsadair/raft/actions/workflows/build.yml/badge.svg)\n[![Go Reference](https://pkg.go.dev/badge/github.com/jmsadair/raft)](https://pkg.go.dev/github.com/jmsadair/raft)\n![GitHub](https://img.shields.io/github/license/jmsadair/raft)\n![GitHub go.mod Go version (subdirectory of monorepo)](https://img.shields.io/github/go-mod/go-version/jmsadair/raft)\n\n# Raft\n\nThis package provides a simple, easy-to-understand, and reliable implementation of [Raft](https://en.wikipedia.org/wiki/Raft_(algorithm)) using Go. Raft is a [consensus](https://en.wikipedia.org/wiki/Consensus_(computer_science)) protocol designed to manage replicated logs in a distributed system. Its purpose is to ensure fault-tolerant coordination and consistency among a group of nodes, making it suitable for building reliable systems. Potential use cases include distributed file systems, consistent key-value stores, and service discovery.\n\n# Features\n\nThe following features are currently supported:\n- Automated Snapshots\n- Concurrent Snapshot Transfer from Leader to Followers\n- Dynamic Membership Changes\n- Linearizable and Lease-Based Read-Only Operations\n- Prevote and Leader Stickyness\n\n# Protocol Overview\n\nRaft is based on a leader-follower model, where one node is elected as the leader and coordinates the replication process. Time is divided into terms, and the leader is elected for each term through a leader election process. The leader receives client requests, which are then replicated to other nodes called followers. The followers maintain a log of all state changes, and the leader's responsibility is to ensure that all followers have consistent logs by sending them entries to append. Safety is guaranteed by requiring a majority of nodes to agree on the state changes, ensuring that no conflicting states are committed. \n\n# Installation and Usage\n\nFirst, make sure you have Go `1.20` or a higher version installed on your system.\nYou can download and install Go from the official [Go website](https://golang.org/). \n\nThen, install the raft package by running\n\n```shell\ngo get -u github.com/jmsadair/raft\n```\n\nOnce you have the package installed, you may refer to the [raft package reference page](https://pkg.go.dev/github.com/jmsadair/raft) for basic usage.\nAn example of how to use raft as well as a set of [Jepsen](https://github.com/jepsen-io/jepsen) tests can be found [here](https://github.com/jmsadair/raft-example).\n\n# Contributing\n\nOther developers are encouraged to contribute to this project and pull requests are welcome. Please read\nthese [guidelines](.github/CONTRIBUTING.md) if you are interested in contributing.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjmsadair%2Fraft","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjmsadair%2Fraft","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjmsadair%2Fraft/lists"}