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 git+https://github.com/kfurtak1024/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  g 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.

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 write 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.
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.14. uv installs the right interpreter for you, so nothing depends on what your system happens to ship.

As a tool

$ uv tool install git+https://github.com/kfurtak1024/zecret
$ zecret

Not on PyPI yet β€” until then, install straight from the repository.

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.

Keys

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

KeyWhereDoes
nentry listWrite about today
gentry listWrite about another day
enterentry listOpen the selected day
dentry listDelete the selected day's entry
/entry listSearch
sentry listSettings: theme and master password
?entry listHelp
qentry listQuit
ctrl + seditorSave and return
escanywhereBack