hlog — A simple, ncurses-based amateur radio contact logger

hlog is made up of two programs—hlog and hlog-contest. They share the same "database" so one uses both just not at the same time :)

Features common to both programs include:


The hlog program is intended for casual logging of contacts. It uses a purely keyboard-driven interface using short commands. This makes it easy to enter different pieces of information into the log in whatever order they may be received. The interface supports multiple tabs allowing the operator to partially fill out the entries for multiple contacts and complete them in any order. (Think failing to break through a pileup and wanting to come back and try again in a few minutes.)

annotated screenshot


The hlog-contest program is intended for fast-paced contest logging. Regardless of whether it is an actual contest (e.g., NEQP or ARRL-VHF-JAN) or a non-contest activity that results in a lot of contacts (e.g., SOTA or POTA).

Much like hlog, hlog-contest uses a keyboard-driven interface but instead of commands it present the operator with a contest-specific form with the tab key navigating between them and enter completing and saving the entry.

Additionally, hlog-contest listens for WSJT-X log messages and convers them log entries. This allows completely automatic logging of WSJT-X contacts.

annotated screenshot


You can get the latest version, or just browse older versions.

If you wish to give the latest development code a try, you can use Mercurial to clone the repository https://hg.sr.ht/~jeffpc/hlog (mirror).


To build hlog you must have:

Once you have the prerequisites, you can build hlog by running:

$ cmake . -DCMAKE_INSTALL_PREFIX=/prefix
$ make
# make install

This will install the binaries under the specified prefix. Alternatively, you can skip the last step and run the programs directly from the build directory.

Note: If libjeffpc is not installed in a location that's part of the compiler and linker search path, you'll have to give cmake a hint where to find it. You do this by defining these as necessary:

  - WITH_JEFFPC_LIB=x      - directory containing libjeffpc.so
  - WITH_JEFFPC_INCLUDES=x - directory containing jeffpc/jeffpc.h
  - WITH_JEFFPC=x          - same as setting WITH_JEFFPC_LIB=x/lib and

For example:

$ cmake . -DWITH_JEFFPC=/opt/jeffpc <...other cmake args...>

Configuring & running

Once you have everything built, you can run it:

$ hlog <path to data directory>
$ hlog-contest -c <contest name> <path to data directory>

The data directory is where hlog stores all the QSO information, a copy of the "country" database, and the config file about who you ("de station") are.

The easiest way to generate the data directory is to use the included init-data.sh shell script. This creates the directory along with the three mandatory subdirectories, generates a dummy config file, and fetches the current country database, current POTA park list, and current SOTA summit list from the internet. Afterwards, you can open the config file (config.lua) in a text editor and tweak to taste.

The values specified in the fill_template function in the config file are defaults and you can override them when interactively while running hlog.

Because the config file is technically a Lua script, there is no limit to the kind of processing one can do. For example, it is possible to interactively prompt the user to identify the current location.

The README file included in the source tarball contains information about other configuration file options supported.


Once hlog is running, you use simple commands to set the various fields on the QSO.

In general, the more common commands try to be short, so one is not forced to type long strings in the middle of a contact. As a result, many commands are only one or two characters long. While many of the commands are intuitive, in most cases the field label underlines the characters of the label that make up the command.

For more information about the available commands and more of the design philosophy, look at the README file included in the source tarball.


If you have any questions or suggestions please direct them to jeffpc@josefsipek.net or use one of the other contact methods. If you found a bug, either use these contact methods to let me know about it, or file a bug.

You may want to check out the hlog mailing lists.