Skip to main content

›_ jotline

A little room to think. A keyboard-first terminal app for Linux and macOS for capturing thoughts, writing, and connecting notes. Inspired by the quick-capture spirit of Drafts, with an original terminal interface.

Jotline terminal workspace

Jotline opens to a blank page. The note list, formatting toolbar and hint stay hidden until Ctrl+F (search) or Ctrl+O (open a note); F8 toggles them. Start typing; your writing saves automatically to local Markdown files, with no account and no cloud. Press Ctrl+P when you want to do something with it. The same notes are a shell command away, so a thought can go in from a hotkey or a script and come out as a task list, a search result or HTML.

Install

Linux and macOS. Python 3.11+. Git is not required. Windows is out of scope. The same package is published for every supported OS.

uv tool install jotline
jotline

pipx install jotline works too. To install from a GitHub Release (checksum-verified wheel), use the one-liner:

curl -fsSL https://github.com/CaulShiver/jotline/releases/latest/download/install.py | python3

To update, re-run the installer with --force (or uv tool install --force jotline). Run jotline backup first. Uninstall with uv tool uninstall jotline or pipx uninstall jotline; your vault remains on disk. See the install, update and rollback guide for checksums, pip, and the encryption extra, and supported platforms for the OS contract.

For development (requires Git):

git clone https://github.com/CaulShiver/jotline.git
cd jotline
uv sync --extra dev
uv run jotline
uv run pytest

Your first notes in five minutes

  1. Launch. Run jotline. On an empty vault the quick start walkthrough opens once; Esc closes it.
  2. Type. The page is already a note. It saves as you write; there is no title, folder or tag to fill in.
  3. Start another. Ctrl+N begins a new thought.
  4. Find it again. Ctrl+F, type a word or a #tag, then Enter opens the top result with the cursor ready to write. Down walks the list; Esc clears the search.
  5. Link. Type [[ and pick a note. Ctrl+G follows the link under the cursor, and Alt+K shows what links here.
  6. Log the day. Ctrl+D opens today's daily log. Add tasks as - [ ] Call Sam; Ctrl+L ticks the one on the current line.
  7. Look up a key. F1 shows every key in effect, including your own changes. Ctrl+R reopens recent notes; Ctrl+Q saves and quits.

Everything else is in Ctrl+P: type a few letters of what you want, such as export, history or template. Settings are on Ctrl+, (or Ctrl+P → Settings if your terminal does not send it).

The everyday loop

  1. Capture with Ctrl+N or jotline capture from anywhere.
  2. Log the day with Ctrl+D.
  3. Connect durable ideas with [[links]] and Extract selection to new note.
  4. Review with Process next inbox note and Start weekly review.

These are optional practices, not a compulsory system; an inbox and search are enough to start. See writing and review.

Where your notes live

Notes are plain .md files in one folder, the vault:

Platform Default vault
Linux ~/.local/share/jotline/notes (under $XDG_DATA_HOME when set)
macOS ~/Library/Application Support/jotline/notes

jotline path prints the active location. Set JOTLINE_VAULT to use another folder by default, or pass --vault PATH to any command. Settings, history and backups sit beside your notes in hidden .jotline-* files. See your vault for what is stored where, filesystem requirements and encryption.

From the shell

jotline capture "A thought before I forget"     # Saved to inbox: A thought before I forget (3f9a8c21)
echo "half an idea" | jotline capture           # piped: prints only the note ID
jotline capture --daily "- [ ] Send the outline"
jotline list '#work'                            # or: jotline search '#work'
jotline open milk                               # exact title or ID, else the best title match
jotline tasks --due today
jotline done 3f9a8c21:4
jotline export last --output plan.html

capture with no text opens a small editor (Ctrl+S saves, Esc cancels); bind it to a hotkey with jotline desktop install on Linux (quick capture). At a terminal it confirms in words; piped or redirected, it prints the bare ID. Wherever a command takes a note you can give a 4+ character ID prefix, the exact title, or last. Global options such as --vault and --workspace work before or after the command. See Jotline from the shell for every command, --json output and environment variables.

If something goes wrong

  • A note changed or vanished: Ctrl+P → History of this note restores an earlier version as a new note. Trashed notes come back from the Trash collection; there is no permanent delete.
  • Whole vault: a ZIP backup is made each day you edit, in .jotline-backups/ (jotline backups lists them; jotline backup makes one now).
  • Something seems off: jotline doctor checks the vault and says what to fix.

Save conflicts, recovery copies and sync are covered in importing and recovering and your vault.

More

Guide What it covers
Keyboard Every default key, the search box, rebinding, terminal caveats (Ctrl+,, Option-as-Meta, tmux)
Writing and review The everyday loop, links, tasks, find and replace, templates, $EDITOR
Markdown editing Formatting, lists, preview, and the outliner
Find your way around Sidebar, search syntax, saved views, tags and workspaces
Settings Themes, editor, layout, autosave, daily template
Jotline from the shell Every command, global options, scripts, completion, environment variables
Quick capture The capture editor, desktop hotkeys, JOTLINE_TERMINAL
Your vault Location, files, durability, history, backups, encryption
Importing and recovering Files, folders, Drafts exports, save conflicts
Sync Git or Syncthing with your own remote
Local actions Recipes, the builder, sharing, jotline run
Note list menu Moving and trashing with the mouse
Omarchy Following the desktop theme
Install and platforms Checksums, updates, rollback, uninstall

Status

Version 0.9.11 is an early release: Markdown source editing, an inline outliner, rendered preview, configurable local actions, and guided import and recovery. See CHANGELOG.md and ROADMAP.md. Full Vim emulation, cloud sync, plugins and dictation remain future work. IME composition and screen readers need filled native reports for 1.0; see the terminal and accessibility checklist and release verification for what is tested.

Contributing

Bug reports and focused pull requests are welcome. The package version is sourced from src/jotline/__init__.py; release builds and jotline --version use that same value. See CONTRIBUTING.md for development and release checks, ROADMAP.md for starter contributions, and SECURITY.md for private vulnerability reporting. Past reviews: multi-model review and September 12 hardening pass. Licensed under MIT.

Metadata

Release files for jotline 0.9.11

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jotline 0.9.11
File Size Uploaded
jotline-0.9.11.tar.gz 552.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for jotline 0.9.11
File Interpreter ABI Platform
jotline-0.9.11-py3-none-any.whl Python 3 none any Details

Total release size: 763.3 kB

Release files / jotline-0.9.11.tar.gz

Download URL jotline-0.9.11.tar.gz
Size 552.0 kB
Tags Source
SHA-256 checksum
How to use checksums
e9725821a7b5cc65a4fcf2fc0b8e7419bdb5fca3b2e9a6212f976f612ed51447
BLAKE2b-256 checksum
How to use checksums
e2b2ffdc4c9a9f77590b0f25e98cf32b943fa1d326f501e18439c2723027b2c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release files / jotline-0.9.11-py3-none-any.whl

Download URL jotline-0.9.11-py3-none-any.whl
Size 211.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0c23bb1c453b40122192e6ef0b3175b1ee29f1bb0cf5f89b7316a5c7fa892c36
BLAKE2b-256 checksum
How to use checksums
68f3f242168fce6bf6a8983013feb32951dbd625816501fd5ffb65d7702a88b9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release history Release notifications | RSS feed

0.9.12

2 release files

This release

0.9.11 This release

2 release files

0.9.9

2 release files

0.9.8

2 release files

0.9.7

2 release files

0.9.6

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page