What blk/txt
actually does.
blk/txt turns messy text into searchable operational memory. Ingest notes, logs, tickets, Markdown, and other text-shaped files, then explore extracted entities, timelines, charts, and full-text search from a clean web lens. It is not a notes app — it is a compiler and indexer for text you already write.
The metaphor
What it does
What it parses
Text files, Markdown, logs, ticket notes, snippets, CSV/YAML-like text — anything text-shaped. Files split into dated blocks while the original source stays untouched.
Entity extraction
A configurable dictionary of regex patterns pulls out entities — tickets, dates, tags, services, environments, URLs, your own custom references — and links each match back to its block.
Ticket timelines
Every entity becomes clickable. A timeline page gathers every parsed block where an entity appears, in chronological order with date, source, and surrounding context.
Charts, stats & heatmaps
Aggregations computed over the compiled SQLite data — entry counts by day, trending entities, and an activity heatmap of when and how much you wrote.
Why SQLite
The compiled memory: a single, portable, zero-server file that's fast to query, easy to back up, and trivial to rebuild from source at any time.
Source stays canonical
The database is always derived. Your raw text is the source of truth — blk/txt can rebuild the entire index deterministically and never overwrites your original files.
How you run it
Self-host it and there's no account at all — one file, nothing to sign into. Prefer not to run infrastructure? Use it hosted behind your own login: every account's notes are isolated from every other, so you can pick up work from any device.
Built with
- Python 3.10+, Flask, SQLAlchemy
- Typer CLI (
blktxt), Rich - SQLite