Skip to content

JournalKit

JournalKit turns a YAML description of a journal page into print-ready SVG and PDF. You list the modules a page should have — a date field, a heading, a dotted box, a checklist — and it lays them out on a grid.

pipx install journalkit
journalkit init my-journal && cd my-journal
journalkit build --pdf

A daily page and a weekly page rendered by JournalKit

Two pages from the example project, rendered to PNG.

The daily page, printed and bound in a ring binder The weekly page, printed

The same pages printed, trimmed and punched for a ring binder.

Where to start

  • Tutorial: install, build the starter project, add a page, write a module. About twenty minutes.
  • Guides: how to do particular things.
  • Reference: every command, key and parameter.
  • Explanation: why it works the way it does.

What a document looks like

templates/daily.yaml
document: daily
page:
  size: [105, 170]
  margins: {top: 2.5, bottom: 7.5, inner: 15, outer: 5}
grid:
  module: 2.5
  dots: {spacing: 5, origin: [0, 2.5]}
templates:
  front:
    side: right
    content:
      - {type: fields, columns: [{label: DATE, width: 25}, {label: "LOC."}]}
      - {type: heading, text: MORNING, icon: sunrise}
      - {type: box, label: NOTES, height: fill, dots: true}
      - {type: checklist, rows: 3}
pages: [front]

A project is a directory with a templates/ folder of files like this, and optionally modules/ for your own module types in Python and icons/ for your own SVG icons.

Requirements

Python 3.10 or newer. PDF and PNG output use Inkscape, and multi-page PDFs also use Ghostscript; SVG output needs neither.

BSD 3-Clause License.