A personal key value store 🛼

Skate

A nice rendering of a roller skate with the words ‘Charm Skate’ next to it
Latest Release Build Status

A personal key-value store. 🛼

Skate is simple and powerful. Use it to save and retrieve anything you’d like—even binary data. It’s fully encrypted, backed up to the cloud (that you can self-host if you want) and can be synced with all your machines.

here-it-is.jpg # Unicode also works, of course skate set 猫咪 喵 skate get 猫咪 # For more info skate --help">
# Store something (and sync it to the network)
skate set kitty meow

# Fetch something (from the local cache)
skate get kitty

# What’s in the store?
skate list

# Pull down the latest data
skate sync

# Spaces are fine
skate set "kitty litter" "smells great"

# You can store binary data, too
skate set profile-pic < my-cute-pic.jpg
skate get profile-pic > here-it-is.jpg

# Unicode also works, of course
skate set 猫咪 喵
skate get 猫咪

# For more info
skate --help

Installation

Use a package manager:

# macOS or Linux
brew tap charmbracelet/tap && brew install charmbracelet/tap/skate

# Arch Linux (btw)
yay -S skate

# Nix
nix-env -iA nixpkgs.skate

Or download it:

  • Packages are available in Debian and RPM formats
  • Binaries are available for Linux, macOS, and Windows

Or just install it with go:

go install github.com/charmbracelet/skate@latest

Other Features

Databases

Sometimes you’ll want to separate your data into different databases:

# Database are automatically created on demand
skate set secret-boss-key@work-stuff password123

# Most commands accept a @db argument
skate set "office rumor"@work-stuff "penelope likes marmalade"
skate get "office rumor"@work-stuff
skate list @work-stuff

# Oh no, the boss is coming!
skate reset @work-stuff

Linking

One of the most powerful features of Skate is its ability to link two machines together so they have access to the same data. To link two machines together just run:

skate link

And follow the instructions. Keep in mind that you'll need access to both machines.

Syncing

When you run skate set, data is encrypted and synced to the network. When you get, however, data is loaded from the local cache. To fetch any new data from the server just run skate sync.

Examples

Here are some of our favorite ways to use skate.

Keep secrets out of your scripts

skate set gh_token GITHUB_TOKEN

#!/bin/bash
curl -su "$1:$(skate get gh_token)" \
    https://api.github.com/users/$1 \
    | jq -r '"\(.login) has \(.total_private_repos) private repos"'

Keep passwords in their own database

skate set [email protected] PASSWORD
skate get [email protected]

Use scripts to manage data

#!/bin/bash
skate set "$(date)@bookmarks.db" $1
skate list @bookmarks.db

What do you use skate for? Let us know.

Self-Hosting

Skate is backed by the Charm Cloud. By default it will use the Charm hosted cloud, but it’s incredibly easy to self-host, even if that’s just on your local network. For details, see the Charm docs.

Hey, Developers

Skate is built on charm/kv. If you’d like to build a tool that includes a user key value store, check it out.

License

MIT


The Charm logo

Charm热爱开源 • Charm loves open source

Owner
Charm
We build tools to make the command line glamorous
Charm
Comments
  • No release tarball for amd64?

    No release tarball for amd64?

    Hi. In releases, why isn't there a tarball for the amd64 build? There is one for every other architecture (apart from the fringe 386). The most popular architecture is surely amd64?

    Missing files:

    • skate_0.2.1_linux_386.tar.gz
    • skate_0.2.1_linux_386.tar.gz.sbom
    • skate_0.2.1_linux_arm64.tar.gz
    • skate_0.2.1_linux_arm64.tar.gz.sbom

    I would like to have an amd64 tarball if possible, ideally. I'm going to have to extract from the debian package in my workflow for the time being, but could this please be added?

  • `failed crypt check` error

    `failed crypt check` error

    This isn't the first time I've rebooted my (macOS 12.2.1) client, but after rebooting today a skate get or skate list command responds with this:

    ➜ skate list         
    Error: failed crypt check
    Usage:
       list [@DB] [flags]
    
    Flags:
      -d, --delimiter string   delimiter to separate keys and values (default "\t")
      -h, --help               help for list
      -k, --keys-only          only print keys and don't fetch values from the db
      -r, --reverse            list in reverse lexicographic order
      -v, --values-only        only print values
    
    failed crypt check
    

    My SSH key works fine elsewhere. Another (Linux) host I hooked up returns the same error.

  • Added mention of CHARM_HOST env variable for self-hosting

    Added mention of CHARM_HOST env variable for self-hosting

    I added a small mention of the CHARM_HOST environment variable to the README under the self-hosting section. This should make it easier for people to understand how to set up their self-hosted instance of Charm Cloud and Skate :)

    thanks for maintaining such a great and useful project 🥇

  • Skate commands failing on Mac 12.2.1

    Skate commands failing on Mac 12.2.1

    When running any skate command (on multiple different Macbooks) I get a panic and failure. This worked on first install, haven't used skate in a few weeks, and now it is failing.

    Skate v0.1.4 installed via homebrew, MacOS 12.2.1.

    Example command: skate list

    Output:

    panic: runtime error: invalid memory address or nil pointer dereference
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0x14f1426]
    
    goroutine 1 [running]:
    github.com/dgraph-io/badger/v3.(*DB).MaxVersion(0xc0006f8000)
    	/home/runner/go/pkg/mod/github.com/dgraph-io/badger/[email protected]/db.go:373 +0x46
    github.com/charmbracelet/charm/kv.(*KV).Sync(0xc0005cc3c0)
    	/home/runner/go/pkg/mod/github.com/charmbracelet/[email protected]/kv/kv.go:109 +0x25
    main.list(0x1f61b60, {0x1f9ea30, 0x0, 0x0})
    	/home/runner/go/pkg/mod/github.com/charmbracelet/[email protected]/main.go:150 +0x12b
    github.com/spf13/cobra.(*Command).execute(0x1f61b60, {0x1f9ea30, 0x0, 0x0})
    	/home/runner/go/pkg/mod/github.com/spf13/[email protected]/command.go:842 +0x60e
    github.com/spf13/cobra.(*Command).ExecuteC(0x1f610e0)
    	/home/runner/go/pkg/mod/github.com/spf13/[email protected]/command.go:950 +0x3ad
    github.com/spf13/cobra.(*Command).Execute(...)
    	/home/runner/go/pkg/mod/github.com/spf13/[email protected]/command.go:887
    main.main()
    	/home/runner/go/pkg/mod/github.com/charmbracelet/[email protected]/main.go:283 +0x25
    
  • Info about difference with `charm kv`

    Info about difference with `charm kv`

    What I miss in the readme, is a bit of explanation what the difference is between skate and the charm kv command.

    They seem mostly the same. The only difference I can see, by doing a charm fs tree, is that they create different files. So assume the database they use is the only difference? Would be nice to see some background info in the readme.

  • chore(deps): bump actions/setup-go from 2 to 3

    chore(deps): bump actions/setup-go from 2 to 3

    Bumps actions/setup-go from 2 to 3.

    Release notes

    Sourced from actions/setup-go's releases.

    Update actions/cache version to 3.0.0

    In scope of this release we updated actions/cache package as the new version contains fixes for caching error handling

    v3.0.0

    What's Changed

    Breaking Changes

    With the update to Node 16, all scripts will now be run with Node 16 rather than Node 12.

    This new major release removes the stable input, so there is no need to specify additional input to use pre-release versions. This release also corrects the pre-release versions syntax to satisfy the SemVer notation (1.18.0-beta1 -> 1.18.0-beta.1, 1.18.0-rc1 -> 1.18.0-rc.1).

    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-go@v3
        with:
          go-version: '1.18.0-rc.1' 
      - run: go version
    

    Add check-latest input

    In scope of this release we add the check-latest input. If check-latest is set to true, the action first checks if the cached version is the latest one. If the locally cached version is not the most up-to-date, a Go version will then be downloaded from go-versions repository. By default check-latest is set to false. Example of usage:

    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-go@v2
        with:
          go-version: '1.16'
          check-latest: true
      - run: go version
    

    Moreover, we updated @actions/core from 1.2.6 to 1.6.0

    v2.1.5

    In scope of this release we updated matchers.json to improve the problem matcher pattern. For more information please refer to this pull request

    v2.1.4

    What's Changed

    New Contributors

    Full Changelog: https://github.com/actions/setup-go/compare/v2.1.3...v2.1.4

    v2.1.3

    • Updated communication with runner to use environment files rather then workflow commands

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • list-dbs command

    list-dbs command

    The list-dbs command, which is briefly referenced in the README, does not work.

    I'm using the latest version (v0.1.5), installed on Arch via Pacman. I also attempted to run the command through the Docker image.

    Here is my input and output:

    $ skate list-dbs
    Error: unknown command "list-dbs" for ""
    

    This greatly limits the usefulness of the program, since I would then need to use a separate file/database to keep track of the skate databases...

    Notably, this command is absent in the output of skate --help:

    Usage:
       [flags]
       [command]
    
    Available Commands:
      delete      Delete a key with an optional @ db.
      get         Get a value for a key with an optional @ db.
      help        Help about any command
      link        Link multiple machines to your Charm account
      list        List key value pairs with an optional @ db.
      reset       Delete local db and pull down fresh copy from Charm Cloud.
      set         Set a value for a key with an optional @ db.
      sync        Sync local db with latest Charm Cloud db.
    
    Flags:
      -h, --help      help for this command
      -v, --version   version for this command
    
    Use " [command] --help" for more information about a command.
    
  • Ehancement: Improve skate list

    Ehancement: Improve skate list

    if we have some keys that got set from files

    like

     skate set key1 < test1.log
     skate set key2 < test2.log
    

    When we do skate list , it is very cumbersome to look it since the entire file contents will be displayed for all such files.

    Instead either provide:

    skate list keys ===> only display keys or skate list ===> should not display the value of multi-line values and only show them when requested using skate get key1 or something like that.

    for example look at the following output: It is hard to figure out which is the key and which is the value.

    memutil fda GROUP STATS: Mon Jan 25 22:26:13 2021 Start Group ID : 0 No. of levels : 12 Unit : MB Inclusion filter : (all) Exclusion filter : (none) Selected columns : gid:name:parGid:min:max:eMin:flags

  • Is it really fully encrypted ?

    Is it really fully encrypted ?

    Hello,

    I wondering if the code of skate is really fully encrypted like it's mentioned in the README.md file because in the source code it's using the method OpenWithDefaults https://github.com/charmbracelet/skate/blob/main/main.go#L304 and doesn't refers to OptionsWithEncryption like it is here https://github.com/charmbracelet/charm/blob/main/kv/client.go#L171

    Can you explain how it's working ?

    Thank you very much.

  • chore(deps): bump actions/checkout from 2 to 3

    chore(deps): bump actions/checkout from 2 to 3

    Bumps actions/checkout from 2 to 3.

    Release notes

    Sourced from actions/checkout's releases.

    v3.0.0

    • Updated to the node16 runtime by default
      • This requires a minimum Actions Runner version of v2.285.0 to run, which is by default available in GHES 3.4 or later.

    v2.4.2

    What's Changed

    Full Changelog: https://github.com/actions/checkout/compare/v2...v2.4.2

    v2.4.1

    • Fixed an issue where checkout failed to run in container jobs due to the new git setting safe.directory

    v2.4.0

    • Convert SSH URLs like org-<ORG_ID>@github.com: to https://github.com/ - pr

    v2.3.5

    Update dependencies

    v2.3.4

    v2.3.3

    v2.3.2

    Add Third Party License Information to Dist Files

    v2.3.1

    Fix default branch resolution for .wiki and when using SSH

    v2.3.0

    Fallback to the default branch

    v2.2.0

    Fetch all history for all tags and branches when fetch-depth=0

    v2.1.1

    Changes to support GHES (here and here)

    v2.1.0

    ... (truncated)

    Changelog

    Sourced from actions/checkout's changelog.

    Changelog

    v3.0.2

    v3.0.1

    v3.0.0

    v2.3.1

    v2.3.0

    v2.2.0

    v2.1.1

    • Changes to support GHES (here and here)

    v2.1.0

    v2.0.0

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • chore(deps): bump golangci/golangci-lint-action from 2 to 3

    chore(deps): bump golangci/golangci-lint-action from 2 to 3

    Bumps golangci/golangci-lint-action from 2 to 3.

    Release notes

    Sourced from golangci/golangci-lint-action's releases.

    v3.0.0

    What's Changed

    New Contributors

    Full Changelog: https://github.com/golangci/golangci-lint-action/compare/v2...v3.0.0

    Bump version v2.5.2

    Bug fixes

    • 5c56cd6 Extract and don't mangle User Args. (#200)

    Dependencies

    • e3c53fe bump @​typescript-eslint/eslint-plugin (#194)
    • 3b9f80e bump @​typescript-eslint/parser from 4.18.0 to 4.19.0 (#195)
    • 9845713 bump @​types/node from 14.14.35 to 14.14.37 (#197)
    • e789ee1 bump eslint from 7.22.0 to 7.23.0 (#196)
    • f2e9a96 bump @​typescript-eslint/eslint-plugin (#188)
    • 818081a bump @​types/node from 14.14.34 to 14.14.35 (#189)
    • 6671836 bump @​typescript-eslint/parser from 4.17.0 to 4.18.0 (#190)
    • 526907e bump @​typescript-eslint/parser from 4.16.1 to 4.17.0 (#185)
    • 6b6ba16 bump @​typescript-eslint/eslint-plugin (#186)
    • 9cab4ef bump eslint from 7.21.0 to 7.22.0 (#187)
    • 0c76572 bump @​types/node from 14.14.32 to 14.14.34 (#184)
    • 0dfde21 bump @​typescript-eslint/parser from 4.15.2 to 4.16.1 (#182)
    • 9dcf389 bump typescript from 4.2.2 to 4.2.3 (#181)
    • 34d3904 bump @​types/node from 14.14.31 to 14.14.32 (#180)
    • e30b22f bump @​typescript-eslint/eslint-plugin (#179)
    • 8f30d25 bump eslint from 7.20.0 to 7.21.0 (#177)
    • 0b64a40 bump @​typescript-eslint/parser from 4.15.1 to 4.15.2 (#176)
    • 973b3a3 bump eslint-config-prettier from 8.0.0 to 8.1.0 (#178)
    • 6ea3de1 bump @​typescript-eslint/eslint-plugin (#175)
    • 6eec6af bump typescript from 4.1.5 to 4.2.2 (#174)

    v2.5.1

    Bug fixes:

    • d9f0e73 Check that go.mod exists in reading the version (#173)

    v2.5.0

    New Features:

    • 51485a4 Try to get version from go.mod file (#118)

    ... (truncated)

    Commits
    • 537aa19 Expire cache periodically to avoid unbounded size (#466)
    • f70e52d build(deps): bump @​actions/core from 1.6.0 to 1.8.0 (#468)
    • a304692 build(deps-dev): bump @​typescript-eslint/eslint-plugin (#469)
    • eeca7c5 build(deps-dev): bump eslint from 8.14.0 to 8.15.0 (#467)
    • dfbcd2a build(deps): bump github/codeql-action from 1 to 2 (#459)
    • 4421331 build(deps-dev): bump @​typescript-eslint/parser from 5.20.0 to 5.22.0 (#464)
    • 5e6c1bb build(deps-dev): bump typescript from 4.6.3 to 4.6.4 (#461)
    • 44eba43 build(deps-dev): bump @​typescript-eslint/eslint-plugin (#460)
    • 358a5e3 build(deps-dev): bump @​typescript-eslint/eslint-plugin (#457)
    • b9c65a5 build(deps-dev): bump @​typescript-eslint/parser from 5.19.0 to 5.20.0 (#455)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • feat(deps): bump github.com/dgraph-io/badger/v3 from 3.2103.4 to 3.2103.5

    feat(deps): bump github.com/dgraph-io/badger/v3 from 3.2103.4 to 3.2103.5

    Bumps github.com/dgraph-io/badger/v3 from 3.2103.4 to 3.2103.5.

    Release notes

    Sourced from github.com/dgraph-io/badger/v3's releases.

    Badger DB v3.2103.5

    We release Badger CLI tool binaries for amd64 and now arm64. This release does not involve any core code changes to Badger. We added a CD job for building Badger for arm64.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Master Key

    Master Key

    Though Skate is encrypted, and it is using Charm Cloud, a master key feature should be added. Most encrypted key value stores use this to decrypt data.

    Implementation

    This could be implemented in a couple of ways:

    • An extra encryption layer, on top of the initial encryption.
    • An optional replacement of the initial encryption.

    Purpose

    This would allow for some great things like password management and open up the possibility of #61

    Downsides

    This could add an extra layer of complexity. Also, having 2 layers of encryption could slow down Skate a lot, which may outweigh the benefits of this feature.

  • skate link freezes

    skate link freezes

    After I type skate link on one device and the code on another device I get "Link request from:" dialog with yes and no buttons. I can switch between them by using arrow keys. Enter to select didn't work, but after I pressed Y the bash got frozen, arrow keys no longer work and even Ctrl+C doesn't have any effect.

    On one device I have raspbian and on another arch.

  • "too many open files" error

    I've been using skate on macOS for a few months, and recently moved to a local charm server running on Linux. I had around 400 items in a database that I exported with skate list. I've been importing them a couple of dozen at a time, and decided to import the rest today. I was getting a too many open files error. I upgraded to latest. The local charm server is now at 0.12.4 and skate is at 0.2.1. The error reporting has changed, but the result is still "too many open files".

    Here is the (somewhat redacted) new error:

    $ skate set ${KEY}@database.db "${VALUE}"
    Error: Opening file: "/Users/smarj/Library/Application Support/charm/«LINUXSERVER»/kv/database.db/000651.sst" error: open /Users/smarj/Library/Application Support/charm/«LINUXSERVER»/kv/database.db/000651.sst: too many open files
    unable to open: /Users/smarj/Library/Application Support/charm/«LINUXSERVER»/kv/database.db/000651.sst
    github.com/dgraph-io/ristretto/z.OpenMmapFile
    	/home/runner/go/pkg/mod/github.com/dgraph-io/[email protected]/z/file.go:80
    github.com/dgraph-io/badger/v3.newLevelsController.func1
    	/home/runner/go/pkg/mod/github.com/dgraph-io/badger/[email protected]/levels.go:145
    runtime.goexit
    	/opt/hostedtoolcache/go/1.18.5/x64/src/runtime/asm_amd64.s:1571
    Usage:
      skate set KEY[@DB] VALUE [flags]
    
    Flags:
      -h, --help   help for set
    
    Opening file: "/Users/smarj/Library/Application Support/charm/«LINUXSERVER»/kv/database.db/000651.sst" error: open /Users/smarj/Library/Application Support/charm/«LINUXSERVER»/kv/database.db/000651.sst: too many open files
    unable to open: /Users/smarj/Library/Application Support/charm/«LINUXSERVER»/kv/database.db/000651.sst
    github.com/dgraph-io/ristretto/z.OpenMmapFile
    	/home/runner/go/pkg/mod/github.com/dgraph-io/[email protected]/z/file.go:80
    github.com/dgraph-io/badger/v3.newLevelsController.func1
    	/home/runner/go/pkg/mod/github.com/dgraph-io/badger/[email protected]/levels.go:145
    runtime.goexit
    	/opt/hostedtoolcache/go/1.18.5/x64/src/runtime/asm_amd64.s:1571
    

    I have 367 keys in the database now, but the open file limit was set to 256. I ran ulimit -n 2048. It's almost like skate keeps recently added keys open, because I hadn't seen this before with more keys added slowly (3-10 per day) than the open file limit.

  • feat: add option for stylized output

    feat: add option for stylized output

    Changes

    • [x] add styling to skate output get, list, etc with -p flag
    • [x] keep option for no styling (default)

    Related Issues

    https://github.com/charmbracelet/skate/issues/35

    Note

    Formatted output does not support custom delimiters

    dark-mode-preview
Distributed reliable key-value store for the most critical data of a distributed system

etcd Note: The master branch may be in an unstable or even broken state during development. Please use releases instead of the master branch in order

Dec 28, 2022
Distributed cache and in-memory key/value data store. It can be used both as an embedded Go library and as a language-independent service.

Olric Distributed cache and in-memory key/value data store. It can be used both as an embedded Go library and as a language-independent service. With

Jan 4, 2023
a persistent real-time key-value store, with the same redis protocol with powerful features
a persistent real-time key-value store, with the same redis protocol with powerful features

a fast NoSQL DB, that uses the same RESP protocol and capable to store terabytes of data, also it integrates with your mobile/web apps to add real-time features, soon you can use it as a document store cause it should become a multi-model db. Redix is used in production, you can use it in your apps with no worries.

Dec 25, 2022
GhostDB is a distributed, in-memory, general purpose key-value data store that delivers microsecond performance at any scale.
GhostDB is a distributed, in-memory, general purpose key-value data store that delivers microsecond performance at any scale.

GhostDB is designed to speed up dynamic database or API driven websites by storing data in RAM in order to reduce the number of times an external data source such as a database or API must be read. GhostDB provides a very large hash table that is distributed across multiple machines and stores large numbers of key-value pairs within the hash table.

Jan 6, 2023
Pogreb is an embedded key-value store for read-heavy workloads written in Go.
Pogreb is an embedded key-value store for read-heavy workloads written in Go.

Embedded key-value store for read-heavy workloads written in Go

Dec 29, 2022
CrankDB is an ultra fast and very lightweight Key Value based Document Store.

CrankDB is a ultra fast, extreme lightweight Key Value based Document Store.

Apr 12, 2022
yakv is a simple, in-memory, concurrency-safe key-value store for hobbyists.
yakv is a simple, in-memory, concurrency-safe key-value store for hobbyists.

yakv (yak-v. (originally intended to be "yet-another-key-value store")) is a simple, in-memory, concurrency-safe key-value store for hobbyists. yakv provides persistence by appending transactions to a transaction log and restoring data from the transaction log on startup.

Feb 24, 2022
Multithreaded key value pair store using thread safe locking mechanism allowing concurrent reads
Multithreaded key value pair store using thread safe locking mechanism allowing concurrent reads

Project Amnesia A Multi-threaded key-value pair store using thread safe locking mechanism allowing concurrent reads. Curious to Try it out?? Check out

Oct 29, 2022
ShockV is a simple key-value store with RESTful API
ShockV is a simple key-value store with RESTful API

ShockV is a simple key-value store based on badgerDB with RESTful API. It's best suited for experimental project which you need a lightweight data store.

Sep 26, 2021
A rest-api that works with golang as an in-memory key value store

In Store A rest-api that works with golang as an in-memory key value store Usage Fist of all, clone the repo with the command below. You must have gol

Oct 24, 2021
Distributed key-value store
Distributed key-value store

Keva Distributed key-value store General Demo Start the server docker-compose up --build Insert data curl -XPOST http://localhost:5555/storage/test1

Nov 15, 2021
Simple in memory key-value store.

Simple in memory key-value store. Development This project is written in Go. Make sure you have Go installed (download). Version 1.17 or higher is req

Nov 6, 2021
A simple in-memory key-value store application
A simple in-memory key-value store application

vtec vtec, is a simple in-memory key-value store application. vtec provides persistence by appending transactions to a json file and restoring data fr

Jun 22, 2022
Biscuit is a multi-region HA key-value store for your AWS infrastructure secrets.

Biscuit Biscuit is a simple key-value store for your infrastructure secrets. Is Biscuit right for me? Biscuit is most useful to teams already using AW

Nov 10, 2022
An in-memory key:value store/cache (similar to Memcached) library for Go, suitable for single-machine applications.

go-cache go-cache is an in-memory key:value store/cache similar to memcached that is suitable for applications running on a single machine. Its major

Jan 3, 2023
NutsDB a simple, fast, embeddable and persistent key/value store written in pure Go.
NutsDB a simple, fast, embeddable and persistent key/value store written in pure Go.

A simple, fast, embeddable, persistent key/value store written in pure Go. It supports fully serializable transactions and many data structures such as list, set, sorted set.

Jan 9, 2023
KV - a toy in-memory key value store built primarily in an effort to write more go and check out grpc

KV KV is a toy in-memory key value store built primarily in an effort to write more go and check out grpc. This is still a work in progress. // downlo

Dec 30, 2021
PrimeKV is a Secure, REST API driven Key/Value store.

PrimeKV PrimeKV is a Secure, REST API driven Key/Value store. Features 100% In-memory. Encrypted by default, All stored values are bi-directionally en

Jan 10, 2022
Dokvs - This project aims to provide document-store capabilities, built over key-value persisted backends

This project aims to provide document-store capabilities, built over key-value persisted backends. It is built in Go using the new generics features to expose a friendly, type-safe API.

Apr 25, 2022