{"id":26977177,"url":"https://github.com/phrozen/rivet","last_synced_at":"2025-06-22T15:34:26.792Z","repository":{"id":57599957,"uuid":"43471829","full_name":"phrozen/rivet","owner":"phrozen","description":"Rivet is a SaaS key/value store written in Go.","archived":false,"fork":false,"pushed_at":"2021-02-20T19:22:37.000Z","size":23,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-03T12:18:30.686Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phrozen.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}},"created_at":"2015-10-01T01:14:47.000Z","updated_at":"2021-02-20T19:22:40.000Z","dependencies_parsed_at":"2022-09-18T09:04:09.046Z","dependency_job_id":null,"html_url":"https://github.com/phrozen/rivet","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/phrozen/rivet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phrozen%2Frivet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phrozen%2Frivet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phrozen%2Frivet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phrozen%2Frivet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phrozen","download_url":"https://codeload.github.com/phrozen/rivet/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phrozen%2Frivet/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261314866,"owners_count":23140163,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2025-04-03T12:18:35.470Z","updated_at":"2025-06-22T15:34:21.745Z","avatar_url":"https://github.com/phrozen.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rivet\r\n\r\n**Rivet is in early stages and the API can change.**\r\n\r\nRivet is a SaaS key/value store written in Go using [Echo](https://github.com/labstack/echo) framework and [BoltDB](https://github.com/boltdb/bolt) and it is designed with simplicity and performance in mind.\r\n\r\n### Features\r\n\r\n+ Fast\r\n+ Simple to use\r\n+ No external dependecies\r\n+ Simple configuration\r\n+ User based storage\r\n+ Basic Authentication (preferably over SSL or private networking)\r\n+ Sessions based on token headers\r\n+ CORS configuration\r\n+ CRUD operations on keys with binary string values\r\n+ Database backups and Snapshots\r\n\r\n### Usage\r\n\r\nRivet provides a simple way to do CRUD operations on keys via a RESTFUL API.\r\n\r\nIt provides authentication based on login and a ```Session Token``` which can be securely passed to client side apps, this token can expire or be invalidated by the user any time. It provides user namespace which support **route like** keys.\r\n\r\nTo start using Rivet (after user has been created) the user must log in first to the endpoint:\r\n\r\n**[GET]** - **/login** (credentials via Basic Authentication)\r\n\r\nThis will return a ```Session Token``` which is used to make requests to the data store for as long as it is valid, token can expire, or can be invalidated logging out like:\r\n\r\n**[GET]** - **/logout** (credentials via Basic Authentication)\r\n\r\nOnce logged in the ```Session Token``` is used to query the RESTFUL API and must be present in every request as a ```X-Session-Token``` Header. This can be done directly in the client as the credentials are used (at best) once to gain access to the data. The token can also be passed around to services to access the store, and can be invalidated at any moment when the session is closed.\r\n\r\nAs a general rule, if you get a **[401] Unauthorized** Status Code, means your App should login and get a new ```Session Token``` from the endpoint.\r\n\r\n#### LIST\r\n```\r\n[GET] - /store/\u003cuser\u003e?limit=\u0026offset=\r\n```\r\nLists the keys on the user namespace up to ```Limit```, you can optionally pass ```Limit``` and ```Offset``` as URL variables, ```Offset``` is used for pagination and should be the last value of a previous call.\r\n\r\n### CRUD\r\n\r\nCRUD operations are done by calling the corresponding endpoints  to a key, **Rivet** is designed in a way that naturally uses route like keys for organization. For example, you can organize your data like:\r\n\r\n```\r\n/store/\u003cuser\u003e/profile\r\n/store/\u003cuser\u003e/profile/bio\r\n/store/\u003cuser\u003e/profile/address/billing\r\n...\r\n```\r\n\r\nIt is noted that with key/value data stores, *POST* and *PUT* operations realize the same operation. The only difference is that **Rivet** will respond with a **[201] Created** Status Code on a *POST* request if the key did not exist previously. This is useful if you need to keep track of your data in any way. *POST* and *PUT* requests expect the data to be in RAW format on the Body of the request.\r\n\r\n#### READ\r\n```\r\n[GET] - /store/\u003cuser\u003e/\u003ckey\u003e\r\n```\r\n\r\n#### CREATE\r\n```\r\n[POST] - /store/\u003cuser\u003e/\u003ckey\u003e\r\n```\r\n\r\n#### UPDATE\r\n```\r\n[PUT] - /store/\u003cuser\u003e/\u003ckey\u003e\r\n```\r\n\r\n#### DELETE\r\n```\r\n[DELETE] - /store/\u003cuser\u003e/\u003ckey\u003e\r\n```\r\n\r\n#### WEBSOCKET\r\n*(Not implemented yet)*\r\n\r\n### Todo\r\n+ Key Search/Prefix Search\r\n+ Websocket support\r\n+ Multiple Session Tokens/Read Only Tokens\r\n+ Admin web interface\r\n+ Database Stats/Logs\r\n+ Hot Swap\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphrozen%2Frivet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphrozen%2Frivet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphrozen%2Frivet/lists"}