email rss
imag 0.6.0
Feb 10, 2018
4 minutes read

First of all (same as with the 0.5.0 release): This is not production-ready software. Use at your own risk! Make sure you have backups

What’s in there

You might have noticed that there is something missing with the above warning. With the 0.5.0 release and prior releases, we had a note in the warning saying

There are bugs. This is not perfect. This is alpha quality or pre-alpha quality software!

And we do not have that anymore.

That’s because I am confident now to use imag for my personal data. I do not necessarily recommend imag to all users, but if you want to try it, go ahead! With the 0.6.0 release, I will start using imag myself. This is a big step for me.

  • 204 commits
  • 46 merge-commits / 158 non-merge commits
  • 1 contributor (That was me. We need more!)
  • 363 files changed
  • 3799 insertions(+), 2211 deletions(-)

Some more statistics about the codebase (thank you, tokei), because why not:

 Language            Files        Lines         Code     Comments       Blanks
 CSS                     1           27           24            0            3
 Makefile                1          161           97           29           35
 Markdown              142         3441         3441            0            0
 Nix                     2           98           77            0           21
 Rust                  277        31519        19916         6600         5003
 Shell                  12          419          235          101           83
 TOML                   55         2278         1577          272          429
 Total                 490        37943        25367         7002         5574

In the following sections I will explain what changed for users. For a complete list of changes (also library-wise), have a look at the CHANGELOG file in the repository or the changelog section below.

New tools

  • imag-init was introduced. Albeit only usable by direct call and not via imag init (note the missing dash), it was introduced as simple setup-script-like tool. It creates the imag store and dumps in the default configuration. It also initializes a git repository, if wanted.
  • imag-log as a thin layer above imag-diary. A “log” is considered a lightweight blog, like when you “dump in” single lines of text.
  • imag-edit as simple tool for editing contents of an imag entry (or headers)

New features

  • imag-diary is now able to create per-second entries. This was necessary for the imag-log tool, but was also included in the imag-diary command.
  • imag-timetrack stop (without mentioning any tags) stops all running tags now
  • imag-timetrack list uses an ASCII-table now.


  • The imag command prints the error message that the called subcommand filed to stderr now. Was stdout before.
  • Before it was necessary to fix links by hand after moving an entry with imag mv. This works automatically now.

The release process

The release was done with our script which was added for that purpose.

It worked as smoothly as we expected.

What’s coming

The 0.7.0 milestone already exists and there are a lot of things already added to it.

When will I be there? The next version will be there if its ready. Honestly I don’t know. We have a lot of things to tackle and this is growing to be a really huge project, especially for a one-man-show, which it almost is, still.


Finally, here again the changelog. You can also find it in the repository.

  • Major changes
    • The config infrastructure of libimagstore was removed, as it was unused.
    • The iterators of libimagstore were improved and are now abstract over all iterator types. For example, all iterators over StoreId can now be transformed into a StoreGetIterator.
    • imag-log was introduced
    • imag-init was introduced
    • libimagdiary supports second-granularity now.
    • libimagstore::store::Store::retrieve_copy was renamed to libimagstore::store::Store::get_copy, which describes the semantics of the function way better.
    • libimagentryutil was introduced, a library for helpers for libimagstore::store::Entry handling and writing extension-writing.
    • imag-edit was introduced
    • imag-diary got second-granularity support in the CLI.
  • Minor changes
    • Internals were refactored from matching all the things into function chaining
    • The toml-query dependency was updated to 0.5.0
    • imag-timetrack list lists with a table now
    • imag-timetrack stop now stops all running tags if none are specified
    • The toml-query dependency was updated to 0.6.0
    • ResultExt::map_err_trace_exit() was removed in favour of ResultExt::map_err_trace_exit_unwrap().
    • imag-view shows content by default now. Use -C to hide the content.
    • kairos dependency was updated to 0.1.0
  • Bugfixes
    • libimagbookmark contained a type which wrapped a FileLockEntry from libimagstore. This was considered a bug and was fixed.
    • We depended on a crate which was licensed as GPLv2, which would yield imag GPL as well. The dependency was removed.
    • The imag crate prints the “command filed” error message to stderr now. It also prefixes the subcommand with imag-<command> for better user experience.
    • libimagnotes did not set the note name in the header of the note.
    • imag-mv automatically fixes links when moving an entry in the store.
    • imag-log listed non-log entries (normal diary entries) before, was changed to only list log entries.

Back to posts