created_at2022-03-06 14:19:04.567441
updated_at2022-09-22 06:13:57.431991
descriptionA refreshingly simple data-driven game engine and app framework




Key Value Services is a cli tools that help to you create your Key-Value store services.


I want to create a content sharing tool that is managed by only one person and readable by many people in a secure network environment, so that I can use some common content in the terminal.


cargo install key_value_service


This project is still in the early stage of development and is only used as a development tool. Do not use it for data storage in the production environment. If you have this requirement, I recommend that you use redis. Some APIs will undergo destructive changes without notice.


  1. Start kvs in your server
> kvs start
2022-03-18T15:59:26.503861Z  INFO starting with successfully!
  1. Login the kvs services from client
> kvs -r login
2022-03-18T16:05:05.022305Z  INFO Token: FAAAAAAAAACUH40t6d+A9jzhexGHktUINvWwL317xp1/AQAAFAAAAAAAAACrtlLcjeSqhMZCj5rnNn2hkf0K/w==
2022-03-18T16:05:05.022393Z  INFO Save Token file to: .kvs/token
  1. Create a private key value
> kvs create foo "hello world"

default, kvs will encrypt the value use your priv_key in local. Remote just judge the key's owner. The decryption process needs to be completed by the client itself.

  1. Read a key
> kvs read foo
hello world
  1. Create a public key value
> kvs create priv_foo "priv hello world" -p

If you just do. kvs will send the value and save value as plaintext in remote.

  1. Read a private key
> kvs cat priv_foo
priv hello world
  1. Delete a Key
> kvs delete priv_foo

You just can delete key that owner is you.

  1. Update a Key
kvs create priv_foo "this is change data"
kvs read priv_foo
this is change data
  1. show remote info
> kvs remote
  1. show local info
> kvs local
scope: 0x4d7153428dd617a410f114468d212a9cd1b7ccd0
  1. Read other scope key
> kvs read -s 0xad359ae3e478342ed2b5512ed7ff4ebb3ceb2dd test_pub
pub content
  1. Restart the kvs Server
> kvs restart
  1. Stop the kvs Server
> kvs stop
  1. remove all keys
> kvs list | awk -F '\t' '{print "kvs delete " $2}' | bash


Case1 sync info in one team

Your team have a big list of resource id.

# important_resource_id.txt

Some times, the team member need create the url by the big list.

# important_resource_urls.txt

Let's assume we have written a command line tool named transform to handle this case.

cat important_resource_urls.txt | transform

The question is, how do I share important_resource_urls.txt with other team members.

Granted, there are many ways to share it. But you can fast finish it if you use the kvs.

# create the key
kvs create important_resource_urls -f important_resource_urls.txt

# and then, other team member can use it.
kvs read important_resource_urls | transform

Case1 sync info in public

curl https://xxx/a.json | json "important" | kvs create important -f -p
kvs read important -s your_scope

Case2 prove yourself

You can tail your pub key to some website.

> kvs local
scope: 0x4d7153428dd617a410f114468d212a9cd1b7ccd0

Website will tail you a cipher text.

website: (your pub key) + (random value) -> (cipher text)

Now you can use kvs de command to decrypt the (cipher text)

> kvs de (cipher text)
(random value)

Tail the (random value) to website. you will prove yourself to website.

Road Map


  • add sync command to sync all file in one directory and use the relative directory as key.

  • add list command to list all key meta in your scope.

  • add restart command to restart the server.

  • add stop command to stop the server.

  • add set and get command to config some value in client local.

  • add set command to set the config in client local.

  • add --file option in create and upload command.

  • add the same option in sync command look like create update.

  • append show public key in kvs local.

  • add kvs de command to decrypt some content. use local private key by default.

  • add kvs en command to encrypt some content. use local public key by default.

  • remove --scope option in read, you can use kvs read your_scope:some_key to read a public key.

  • add kvs set whitelist command to set a whitelist.

  • add kvs search command to search some content in different repository.

  • fix --file option in create and upload command can be not give the filename, kvs will use the stdin content as value if you do that.

  • add server config to config the store backend.

  • add unit test and docs.

  • add github action to release the bin file.

  • refactor the Remote Action model.

  • refactor the aes session to be a aes stream.

  • config docker container.

  • ``


  • add the p2p in share key progress.
  • Build a free central storage node.
  • add upgrade command to sync the remote kvs cli to client local.
Commit count: 74

cargo fmt