#command-line-tool #habit-tracking #genee

bin+lib genee

A habit tracker app with command-line interface

7 releases (breaking)

0.8.0 Jan 28, 2024
0.7.0 Jan 20, 2024
0.6.0 Jun 10, 2023
0.4.1 Dec 5, 2021
0.1.2 Jul 11, 2021

#362 in Database interfaces

Download history 1/week @ 2023-11-03 6/week @ 2023-11-10 2/week @ 2023-11-17 15/week @ 2023-11-24 12/week @ 2023-12-01 11/week @ 2023-12-08 10/week @ 2023-12-22 5/week @ 2024-01-05 1/week @ 2024-01-12 38/week @ 2024-01-19 43/week @ 2024-01-26 17/week @ 2024-02-02 18/week @ 2024-02-09 110/week @ 2024-02-16

188 downloads per month

MIT license

1.5K SLoC


Crates.io Docs.rs CI

genee is a simple habit tracker program for the command line


  • Daily tracking of habits 📅
  • Open storage format: SQLite database 📄
  • Pretty diagrams to compare successive periods of habit data 📊
  • Store default settings persistently 💾


  1. Figure out the list of habits to track. In this example, we would like to restrict our gaming binges and increase the frequency of our piano exercise sessions. GAM stands for gaming, whereas PNO stands for the instrumental practice.
  2. Download the latest release from this repository.
  3. Using the downloaded executable, create a new data file to store the diary data. Specify the list of habit abbreviations to use in this file: genee new GAM,PNO
  4. Each day, fill in whether you practiced the particular habits the previous day or not. This can be done by invoking genee fill. This is followed by a prompt for each habit.
  5. After the fill command, the program displays the habit data of the current period (e.g. the number of habit occurences in the last 30 days) compared to the last period (the number of habit occurences between 30 and 60 days before now). This can be used to check whether our change of habits (picking up new habits, dropping bad ones) are on track or not.

Example output diagram

Full helptext

genee X.Y.Z
A habit tracker app with command-line interface


    -h, --help       Prints help information
    -V, --version    Prints version information

    -d, --datafile <datafile>
            Path to the diary file. When not provided, its value is loaded from persistent configuration file

    -g, --graph-days <graph-days>
            How many days each period should contain. When not provided, its value is loaded from persistent
            configuration file
    -f, --list-most-frequent-days <list-most-frequent-days>
            Specifies the number of most frequent daily habit compositions over the specified period

    -l, --list-previous-days <list-previous-days>
            Specifies the number of days from the diary that should be printed in a tabular format

        --max-displayed-cols <max-displayed-cols>
            Specifies the maximum allowed width of the terminal output. When not provided, its value is loaded from
            persistent configuration file
    -p, --past-periods <past-periods>
            Specifies the number of displayed periods when graphing the diary data. When not provided, its value is
            loaded from persistent configuration file

    add-category     Adds or unhides a category
    export           Writes the contents of the datafile into a new datafile. Useful to convert between formats
    fill             If set, habit information for all the missing days is queried between --from-date and
                     yesterday. If --from-date is not set, all the missing days are queried between the first entry
                     in the diary and yesterday. If there is no entry in the diary, only yesterday is queried
    graph            Displays the habit data according to the specified options to the terminal
    help             Prints this message or the help of the given subcommand(s)
    hide-category    Hides a category
    insert           Queries for habit information on the specified date
    list-config      Prints the persistent configuration
    new              Provide a comma separated list of habit categories. A new diary file is created at the
                     specified --datafile path
    save-config      Saves the specified options to persistent configuration


genee builds with the standard Rust toolchain:

git clone https://github.com/mfep/genee.git
cd genee
cargo build --release




~530K SLoC