ntropy
An opinionated Markdown note-taking and management CLI where metadata, not folders, is the filing system. No database, no proprietary app, no folder hierarchy to maintain by hand: plain Markdown files and their frontmatter.
The short version: write Markdown, tag it, and let ntropy do the filing. Fuzzy full-text search, a query language, browsable views materialized straight into your filesystem, editor-native link and tag completion over LSP, PDF and website export, and no database pretending to be a note app.
The documentation lives at https://ntropy.westhoffswelt.de; this file is the entry point: install, first steps, and how to work on ntropy itself.
Why I built this
I live on the command line and in Neovim, and every note app I tried wanted me
back inside its own (usually graphical) UI to make sense of files it nominally
stored as plain text. I wanted the inverse: notes that are just Markdown
files, a CLI to manage them, and nothing stateful in between. ntropy is the
heavily opinionated result. Notes live flat in one vault, a note's identity is
a stable ULID rather than its title, and any hierarchy you browse is a derived
projection of the frontmatter instead of the canonical storage. Switching vaults
is cheap, one for work, one for private, or a per-project vault pinned by a
.ntropy-vault file in a repo, so documenting a project is the same motion as
any other note. It scratched my itch; maybe it scratches yours.
Installation
Pre-built binaries
Pre-built binaries are available on the GitHub Releases page for macOS (Apple Silicon & Intel) and Linux (x86_64 & aarch64, statically linked).
[!NOTE] ntropy supports macOS and Linux. Windows is not supported; see Limitations.
Quick start
# Scaffold a vault (this also seeds a by-tag view)
# Create a note from a template and open it in your editor
# Open today's daily note (created on first use each day)
# Find and open notes: full query language, fuzzy picker when several match
New notes are stamped out from
templates;
today has its own daily template; and search speaks a small
query language,
opening an
interactive picker
when more than one note matches.
You never have to tell ntropy which vault you mean from inside one; it finds it for you.
Documentation
The full documentation is a website that ntropy exports from the vault under
docs/website/
in this repository, so it reads the same as any vault you publish yourself:
- Getting started: installation, first steps, a tour, and the command reference.
- Notes and the vault: the note format, Markdown, templates, finding the vault, views, encryption, and configuration.
- Finding notes: the query language and the interactive picker.
- Publishing: rendering to PDF and HTML, document themes, exporting a website, and site themes with their templates.
- Integrations: the language server, scripting and the shell, and the agent skill.
- Development: building ntropy, its limitations, and the design records.
The design itself is recorded as decision records under
docs/adr/
and narrative documents under
docs/design/.
Development
Common tasks are wrapped as just recipes
(just --list):
The browser-side code of the site export lives in site/ and is built
with Bun; just site-build writes the result to
src/site/dist/, which is committed. cargo build never runs Bun.
Tests use insta snapshots across all layers (ADR 0021).
When a change alters output, the snapshot assertions fail and write .pending-snap
files; review and accept them with cargo-insta:
Project page
The project page at https://ntropy.westhoffswelt.de is the documentation
vault under docs/website/, exported by ntropy itself. A push to main that
touches docs/website/, and every release, rebuilds and deploys it through
.github/workflows/pages.yml,
which exports the vault with the newest released binary; CI exports it with
the commit's own build, so a change that breaks the export fails there
first. To build it with your working copy:
The vault is an ordinary ntropy vault: ntropy --vault docs/website new,
search, and write work on it, and its .ntropy/config.toml holds the
site's title, front page, and sidebar root. The demo recording in
docs/website/assets/ is produced by docs/vhs/record.sh
(see docs/vhs/README.md).
License
ntropy is licensed under the Mozilla Public License 2.0. See LICENSE.
Copyright (c) 2026 Jakob Westhoff jakob@westhoffswelt.de