{"id":36546607,"url":"https://github.com/perlogix/cave","last_synced_at":"2026-01-15T02:39:33.100Z","repository":{"id":41510119,"uuid":"257684438","full_name":"perlogix/cave","owner":"perlogix","description":"CAVE is a master-less, distributed, DHT-based key-value database.","archived":false,"fork":false,"pushed_at":"2023-02-25T01:59:56.000Z","size":184219,"stargazers_count":8,"open_issues_count":4,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-01-12T13:08:59.053Z","etag":null,"topics":["dht","kv-store","masterless","mesh","secrets-management","security-tools"],"latest_commit_sha":null,"homepage":"https://cave.sh","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/perlogix.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}},"created_at":"2020-04-21T18:41:15.000Z","updated_at":"2024-03-29T16:11:31.000Z","dependencies_parsed_at":"2024-02-01T04:45:23.819Z","dependency_job_id":"e1f1e30d-7480-43cf-93be-ab39f3017632","html_url":"https://github.com/perlogix/cave","commit_stats":null,"previous_names":["yeticloud/cave"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/perlogix/cave","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/perlogix%2Fcave","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/perlogix%2Fcave/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/perlogix%2Fcave/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/perlogix%2Fcave/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/perlogix","download_url":"https://codeload.github.com/perlogix/cave/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/perlogix%2Fcave/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28441394,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-15T00:55:22.719Z","status":"online","status_checked_at":"2026-01-15T02:00:08.019Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["dht","kv-store","masterless","mesh","secrets-management","security-tools"],"created_at":"2026-01-12T06:05:05.867Z","updated_at":"2026-01-15T02:39:33.091Z","avatar_url":"https://github.com/perlogix.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"logo.png\" width=\"300px\"\u003e\n\n### A cloud-native, distributed, master-less, secrets-capable key-value database\n\n# What is CAVE?\nCave is a reaction to the technologies on the market in both COTS and OSS worlds. We identified a need to have a fast, reliable, cloud-native key-value database that doesn't require a lot of configuration or workarounds to make a master/worker model...work. \n\n# What is it not?\nCave is not ACID compliant and makes no write guarantees. \n\n# How does it work?\nCave is based on a DHT network. Cluster peers are discovered by sharing lists of peers with other peers, this means that a node only needs to \"see\" a single node of a cluster in order to fully join and connect with the rest of the cluster. \nAll updates (writes and deletes) to the database are broadcast across the network, each peer listens for updates and applies them as they come in. \n\n# Going Deeper\n\n### Building\nCave can be built by running `make build`\n\n### Configuration\nConfiguration happens one of three ways:\n* Config file\n* Environment variables\n* Command-line arguments\n\nCommand-line arguments take precedence over all other methods. \nYou can get a full list of configuration parameters by running `cave --help`\n\n### Running\nTo start Cave in single-node development mode, simply run `cave --mode=dev`. This will start a new single-node database on your local machine.\n\nTo start Cave in \"production\" mode, you must supply the `--mode=prod` flag, otherwise it will default to single-node \"development\" mode. When running in \"production\" mode, the new database instance will attempt to discover peers and sync the cluster database state. If it is unable to find peers it will assume it is the first node to come up and generate a new cluster id, shared keys, and other items.\n\n### Monitoring\nCave comes with a ton of exported Prometheus metrics. They can be scraped at the `/api/v1/perf/metrics` endpoint.\n\n### Interacting with Cave\nCave can be used via the REST API. Full API spec will be provided below. In general, there are a few things to remember:\n\n* All API requests are done with the `/api/v1/` prefix.\n* When reading or writing a secret, you must supply the `secret=true` URL parameter in order to encrypt/decrypt the secret\n\n\n# API\n\n## KV\n\n### /api/v1/kv/[path/.../path]/keyname\n```\nMethods: GET, POST, DELETE\nGET - Getting a path and key name will read that path and key name from the db\nPOST - POSTing data to a path and key name will store data at that path and key name\nDELETE - DELETE will delete a key and value at a given path name\n```\n\n## PERF\n\n### /api/v1/perf/logs\n```\nMethods: GET\nEndpoint to get node logs (if enabled)\n```\n\n### /api/v1/perf/metrics\n```\nMethods: GET\nPrometheus endpoint\n```\n\n### /api/v1/perf/dashboard\n```\nMethods: GET\nReturns JSON configuration for a Cave-specific Grafana dashboard\n```\n\n## SYSTEM\n\n### /api/v1/system/config\n```\nMethods: GET\nReturns system configuration as JSON\n```\n\n### /api/v1/system/info\n```Methods: GET\nReturns system information as JSON\n```\n\n\n# Web UI\nCave has a _very_ rudimentary web UI that allows you to browse the key-value store and see which nodes are active. \nThe UI can be accessed by going to\n```\nhttps://cave_host:port/ui/\n```\n\n# Roadmap\nCave is very much a work in progress. Please bear with us as we work to improve it. Our proposed development roadmap is as follows:\n\n* Implement plug-in system with YetiCloud Airboss\n* Migrate cluster communication to JSON-RPC\n* Periodic re-sync between nodes\n* API\n  * DB export\n  * mgmt API\n  * auth api\n* Testing\n* Enforce key locking\n* cloud discovery (AWS, GCP, Azure)\n* audit trail logging\n\n# Contributing\nContributors are welcome! Please be respectful of the source and the other contributors. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fperlogix%2Fcave","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fperlogix%2Fcave","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fperlogix%2Fcave/lists"}