zecret.

An encrypted terminal diary

One entry a day, kept in a single encrypted file that only you can open. No server, no account, no sync, no telemetry β€” there is nowhere for your writing to go.

uv tool install zecret
Source on GitHub
Zecret β€” 8 entries
  August 2026 Β· 5 entries
  Thu 13   First frost on the windscreen. Scraped it off with a librar…
  Wed 12   Notes on rereading Bachelard: the drawer chapter still does…
  Tue 11   Kitchen notes. The sourdough finally behaved β€” less water,…
  Mon 10   A letter I did not send. Wrote it out anyway, which is most…
  Sun 09   Tuesday. Nothing happened and I am writing that down on pur…

  July 2026 Β· 3 entries
  Fri 31   Walked the long way back along the canal. The herons have w…
  Tue 28   Finished the tax forms, badly. Rewarded myself with an appl…
  Sat 25   Rain all day. Read two chapters and slept like something hi…
n Today  a Another day  d Delete  / Search  s Settings  ? Help  q Quit

A diary, not a note app

The date is the entry. Open a day you have already written and you continue it, rather than starting a second page about the same afternoon.

One entry a day

Each day is a page, named by its date. Reopening a day continues it; there is no way to file two entries against one afternoon.

Encrypted at rest

Argon2id key derivation and AES-256-GCM, with every day's entry encrypted independently under its own nonce.

Instant search

Your entries are already decrypted in memory for the session, so filtering happens as you type and nothing touches the disk.

One portable file

Back it up by copying it. Without your password it is useless to whoever ends up holding it.

Light and dark

Eight themes, chosen in settings and remembered β€” including the lock screen, before the diary is even open.

Locks itself

Walk away and the diary closes behind you, asking for your password again. A half-written entry holds it open rather than being thrown away by a timer.

Covers the page

Writing on a train? One key puts every word behind a bar except the one your cursor is touching. It hides what you have already written — the word you are typing is revealed as you type it — and the text underneath is untouched, so what you save is what you wrote.

Offline by design

No networking of any kind, in any code path. Nothing to opt out of, and nothing to audit for leaks.

What protects it

The parts worth checking before you trust anything with a diary.

Key derivation
Argon2id β€” time_cost 3, 64 MiB, parallelism 4 β€” with a random 16-byte salt per diary. Your password is never stored; the derived key never touches disk.
Encryption
AES-256-GCM with a fresh random nonce for every single encryption. Each day is encrypted independently, so editing one never re-encrypts the others.
Integrity
Tampering with a stored entry, or a wrong password, fails authentication and is reported as an error β€” never as an empty or partial diary. The header carries an encrypted verifier, so that holds even for a diary with no entries yet.
Durability
Saves are atomic: temp file, fsync, then rename over the original. An interrupted save cannot leave a half-written diary, and the file is created 0600.
Two windows open
A second Zecret on the same file is detected before anything is written, so one session cannot silently overwrite what the other just saved. Creating a diary claims the path in the same indivisible step that writes it, so two first runs cannot land on top of each other either.
Plaintext
Never written to disk β€” not as temp files, not as logs, not for crash recovery.

Two things it does not do. Anyone holding the file can see which days you wrote on, though not a word of what they say β€” the dates are the index, and indexes have to be readable to be used. And there is no password recovery, by design: nobody, including you, can open the file without the password.

Install

Zecret needs Python 3.13 or newer. uv installs a suitable interpreter for you, so nothing depends on what your system happens to ship.

As a tool

$ uv tool install zecret
$ zecret

uv fetches a suitable Python along with it. pipx install zecret and pip install zecret work too, on 3.13 or newer.

From a checkout

$ git clone https://github.com/kfurtak1024/zecret
$ cd zecret
$ uv sync
$ uv run zecret

Where the diary lives

$ zecret --path /some/where.enc

By default ~/.zecret/diary.enc, overridable with --path or ZECRET_DIARY_PATH. On first launch Zecret asks you to choose a master password and creates the file. Settings follow you rather than the diary, so a second diary keeps your theme β€” unless you give that run preferences of its own with --config. zecret --help lists both flags and both environment variables; zecret --version says which Zecret you have without opening the diary.

Keys

Press ? in the app for the same list, always current.

KeyWhereDoes
nentry listWrite about today
aentry listWrite about another day
enterentry listOpen the selected day
dentry listDelete the selected day's entry
rentry listRe-read the file, picking up another Zecret's writing
/entry listSearch
sentry listSettings: theme, locking, master password
ctrl + lentry list, editorLock the diary without quitting β€” saves the day you are writing first
?entry listHelp
qentry listQuit
ctrl + seditorSave, and carry on writing
ctrl + reditorCover the writing, leaving only the word you are on
escanywhereBack

ctrl + q quits from anywhere, including a screen with a password box on it where a bare q would only be typed. It asks first if you are part-way through writing a day, exactly as backing out of that day does β€” and either question offers to save the day on the way out, so the choice is never between losing the last paragraph and staying put.

Getting around a long diary: j and k or the arrow keys move a day at a time, g and G (or home and end) jump to the newest and oldest entries, and the page keys move a screenful. None of these crowd the bar at the bottom; all of them are listed under ?.

Inside a day, the editor answers to the usual text-editing keys β€” ctrl + home and ctrl + end for the two ends of the entry, ctrl + a to select all of it, and the rest of what your fingers already know. Those are the one thing ? does not list: it is a page about the diary, and these mean here exactly what they mean everywhere else.