{"id":32920362,"url":"https://github.com/githubvladimirt/dekvs","last_synced_at":"2026-03-05T12:02:05.410Z","repository":{"id":323365889,"uuid":"1092825076","full_name":"githubVladimirT/dekvs","owner":"githubVladimirT","description":"DEcentralised Key-Value Storage","archived":false,"fork":false,"pushed_at":"2026-02-24T20:44:07.000Z","size":182,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-24T20:56:40.857Z","etag":null,"topics":["decentralized","go","golang","golang-package","grpc-api","http-api","key-value-store","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":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/githubVladimirT.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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":"2025-11-09T11:46:14.000Z","updated_at":"2026-02-24T20:44:23.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/githubVladimirT/dekvs","commit_stats":null,"previous_names":["githubvladimirt/dekvs"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/githubVladimirT/dekvs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/githubVladimirT%2Fdekvs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/githubVladimirT%2Fdekvs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/githubVladimirT%2Fdekvs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/githubVladimirT%2Fdekvs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/githubVladimirT","download_url":"https://codeload.github.com/githubVladimirT/dekvs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/githubVladimirT%2Fdekvs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30123729,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T11:11:57.947Z","status":"ssl_error","status_checked_at":"2026-03-05T11:11:29.001Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["decentralized","go","golang","golang-package","grpc-api","http-api","key-value-store","raft","raft-consensus-algorithm"],"created_at":"2025-11-10T23:00:37.162Z","updated_at":"2026-03-05T12:02:05.405Z","avatar_url":"https://github.com/githubVladimirT.png","language":"Go","readme":"# Golang Decentralised Key-Value Storage\n\nA fault-tolerant, distributed key-value storage system built with Go, leveraging HashiCorp Raft for consensus and gRPC for communication.\n\n## Overview\n\nThis project implements a highly available key-value store that uses the Raft consensus algorithm to ensure consistency across multiple nodes. It supports dynamic cluster membership, automatic failure detection, and provides a simple gRPC-based API for interacting with the store.\n\nThe system is designed to be resilient against node failures and network partitions, making it suitable for environments requiring high availability and strong consistency.\n\n## Features\n\n- **Distributed Consensus**: Built on top of HashiCorp Raft for reliable leader election and log replication.\n- **gRPC API**: Fast and efficient communication between clients and nodes.\n- **Dynamic Membership**: Add or remove nodes from the cluster without downtime.\n- **Automatic Failure Detection**: Nodes that become unreachable are automatically detected and removed from the cluster.\n- **Key-Value Operations**: Basic `Put` and `Get` operations.\n- **Leader Redirection**: Clients can connect to any node, which will redirect writes to the current leader. (TODO)\n- **Reflection Support**: gRPC reflection enabled for easy debugging and introspection.\n- **Cross-Platform**: Runs on Linux, macOS, and Windows.\n\n---\n\n## Quick Start\n\n### Prerequisites\n\n- Go 1.19+\n- `protoc` compiler and `protoc-gen-go` / `protoc-gen-go-grpc` plugins.\n\n### Building\n```bash\ngo mod tidy\ngo build ./cmd/server\n```\n\n### Running a Cluster\n\n1. **Start the Leader Node**:\n\n```bash\n./server --id=node0 --raft-addr=127.0.0.1:9090 --grpc-port=8080 --join=false\n```\n\n2. **Start Follower Nodes** (in separate terminals):\n\n```bash\n./server --id=node1 --raft-addr=127.0.0.1:9091 --grpc-port=8081 --join=true\n./server --id=node2 --raft-addr=127.0.0.1:9092 --grpc-port=8082 --join=true\n```\n\n3. **Add Followers to the Cluster** (from leader's gRPC endpoint):\n\n```bash\ngrpcurl -plaintext -d '{\"id\":\"node1\",\"raft_addr\":\"127.0.0.1:9091\",\"grpc_addr\":\"127.0.0.1:8081\"}' localhost:8080 kv.KVService/AddPeer\ngrpcurl -plaintext -d '{\"id\":\"node2\",\"raft_addr\":\"127.0.0.1:9092\",\"grpc_addr\":\"127.0.0.1:8082\"}' localhost:8080 kv.KVService/AddPeer\n```\n\n4. **Perform Operations**:\n\n```bash\n# Put a key-value pair\ngrpcurl -plaintext -d '{\"key\":\"mykey\", \"value\":\"bXl2YWx1ZQ==\"}' localhost:8080 kv.KVService/Put\n\n# Get a value\ngrpcurl -plaintext -d '{\"key\":\"mykey\"}' localhost:8080 kv.KVService/Get\n```\n\n---\n\n## Architecture\n\n- **Raft Consensus**: Ensures all nodes agree on the order of operations.\n- **gRPC**: Handles client-server and inter-node communication.\n- **FSM (Finite State Machine)**: Applies commands to the local key-value store.\n- **Failure Detector**: Monitors node health and removes dead nodes.\n\n---\n\n## Planned Features\n\n- [ ] TTL for keys\n- [ ] Key versioning\n- [ ] Snapshots and restore\n- [ ] Batch operations\n- [ ] Prometheus metrics\n- [ ] Caching layer\n- [ ] Performance optimization under high load\n\n---\n\n## License\n\nDeKVS is Apache 2.0 licensed.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgithubvladimirt%2Fdekvs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgithubvladimirt%2Fdekvs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgithubvladimirt%2Fdekvs/lists"}