The unreliable key-value store


Originally, from my article "Why you should build your own NoSQL Database". BoJack is a bit mature now, yet missing several important features:

  • Cluster-friendliness
  • Security Layer (#34)
  • Unix Socket support (#48)

Feel free to share your thoughts and contribute.



  • The latest version of Crystal (0.24.x)
  • LLVM development files


  1. Clone the repo: git clone
  2. Switch to repo-directory: cd bojack
  3. Build: make install (sudo for linux users)


  1. Start the server, run: bojack server
  2. Connect a client, in another tab, run: bojack client
$ bojack console
> set food 🍣
> get food
> ping

By default BoJack runs at



Currently the command-line interface supports two commands: server and console.

bojack <server/console> <flags>


|flag|description|| |---|---|---| |--hostname|Hostname the server will run|| |--port|Port the server will run|5000| |--log|Path for a log file|STDOUT| |--log-level|Level of messages logged|DEBUG = 0, INFO = 1 (default), WARN = 2, ERROR = 3, FATAL = 4|


|flag|description|default| |---|---|---| |--hostname|Hostname this console will connect|| |--port|Port this console will connect|5000|


List of available commands for BoJack

|command|description|params|example|return| |---|---|---|---|---| |set| sets a key with the given name and value | key, value | set foo bar | the value of the key "bar" | |increment| increments the given key value by 1| key | increment foo | the value of the key "foo" incremented | |get| gets the value of the given value | key | get foo | the value stored at the key, "bar" | |delete| deletes the given key | key, * | delete foo, delete * | the value at the deleted key "bar" or every key in the database, if "*" is given instead of a key | |append| add one or more values to the end of a list | key, value | append list foo,bar | the list resulted | |pop| retrieve the last item of the list | key | pop foo | the last value stored at the list, "foo" | |size| return the number of stored items | -- | size | the value of stored keys in memory | |ping| checks the server | -- | ping | pong if everything is correct |


Want to use BoJack with your language? Currently, we support:

  • Crystal - Thanks to @hugoabonizio
  • Python - Thanks to @mauricioabreu
  • Ruby - Thanks to @hugoabonizio
  • Elixir - Thanks to @veelenga


Found a bug? Have a suggestion? Please open an issue.

Want to contribute? Take a look at our open issues and make sure you follow our guide.


Check the License here.

Github statistic:
  • 84
  • 8
  • 6
  • 11
  • 1 day ago


MIT License