ββββββββββββββββ ββββββββββββββ βββββββββββββββββ βββββββββββββββββββββββββββββββββββββββββββββββββ βββββ ββββββ βββ ββββββββββββββ βββ βββββ ββββββ βββ ββββββββββββββ βββ βββββββββββββββββββββββββββ βββββββββββ βββ ββββββββββββββββ ββββββββββ βββββββββββ βββ
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
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β¦
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.
| Key | Where | Does |
|---|---|---|
| n | entry list | Write about today |
| g | entry list | Write about another day |
| enter | entry list | Open the selected day |
| d | entry list | Delete the selected day's entry |
| / | entry list | Search |
| s | entry list | Settings: theme and master password |
| ? | entry list | Help |
| q | entry list | Quit |
| ctrl + s | editor | Save and return |
| esc | anywhere | Back |