Documenting changes between versions beginning from v0.3.0
safir env
now lists all existing environments and indicates the currently loaded one
- Reduced binary size - no other changes
- Added new command to display the currently loaded environment
-
SQLite DB support
- Safir now supports using either a JSON file as storage or an SQLite database
- Activate this by running
safir mode database
orsafir mode file
-
Environments
- Safir now supports storing Key-Value pairs in specific environments
- Calling
safir use [environment-name]
will activate the specific environment - New environments are created empty and stored KV pairs will remain in this environment
- A default environment called
default
is used initially - Old stores from previous versions will be ported to this new format automatically
THIS IS A BREAKING CHANGE
The entire safir
project has been overhauled and brought back to it's original (and simple) purpose: display Key-value pairs.
When working on the whole project, it became clear to me that it was growing way out of control.
Initially it was to be an in-memory version (similar to Redis) but an on-disk storage solution was developed first.
The in-memory version spawned a whole load of side-projects (rubin
for one) but in doing so, it became an over-engineered beast.
At it's heart, safir
was simply meant to be a small program to store key-value pairs and retrieve them later - that's it!
So when I rewrote it in Go for fun, I realised that it was far too complex and could just be a simple command-line tool with simple commands.
So here we are, it's back to it's original "mindset" and is now far simpler, just storing KV pairs on disk. No additional libraries, no in-memory versions; just a simple KV store.
The other versions are still available but are no longer maintained and this will be the "final" form going forward.
Sorry for any inconvenience and hope you enjoy the more simpler version!
- Overhauled project to be simpler with no crazy, custom-built backend solutions
- No pretty output, just displays the KV in the format
[key]="[value]"
- No configs, just a JSON file stored at
$HOME/.safirstore/safirstore.json
- All previous commands still work as they did before (minus the additional ones for in-memory storage)
Headless mode!
You can now run safir in "headless" mode which removes all the fancy formatting for output
This will allow you to evaluate safir output directly in the terminal.
This also persist as a config setting saved to ~/.safirstore/safir.cfg
Changes to the internal code structure, no changes to operation
Something happened here but not major...
Removed the Safir Memcache and moved it to its own project.
Addition of the Memcache functionality was making everything a bit messy to best to separate them both. They still operate the same, just different projects for each.
Any changes here wil lbe made in the Memcache version also.
- Removal of Memcache
- Technically a reversion but meh
Added the ability to operate Safir as a Memcache server (storing contents in-memory instead of on disk). Requires the Rubin CLI to be installed.
The Memcache service operates using TCP sockets to communicate with the Rubin server to access and update storage.
It operates on localhost
or 127.0.0.1
and on port 9876
.
It works in the same fashion as Safir and does not update the store on disk when activated.
Initialisation and cleanup is handles with the start
and stop
commands.
- New memcache option available for using Safir as an in-memory store
- Minor edits and bugfixes
BREAKING CHANGE: A newer version of Rubin
is now used which is incompatible with older versions of Safir.
Attempting to use Safir with older stores will now result in a panic.
Save your older store somewhere and manually remove the old .safirstore
directory.
This should allow continued usage.
- Updated verison of
Rubin
to newer version.
No breaking changes, just an update of the backend used for file creation and maintenance. Due to this allowing more extended work going forward, bumped up to v0.3.0
- Changed backend file handling to use the Rubin crates instead of a custom solution