plain-text daily notes with optional encryption
Project description
duras
Daily notes as plain text files, with search and optional encryption.
Model
One note per day:
YYYY/MM/YYYY-MM-DD.dn
Properties:
- plain UTF-8 text
- filesystem is the index
- no database, no hidden state
- atomic writes
Encrypted note:
YYYY/MM/YYYY-MM-DD.dn.gpg
via the GNU Privacy Guard.
Scope
Fits:
- terminal-based workflows
- grep-based retrieval
- long-lived plain text notes
- optional encryption
Not a fit:
- sync system
- GUI / rich text editor
- query engine or database
Variants
duras
- system
gpg - no dependencies
- Unix-like systems
duras_ashell
- iOS a-Shell mini
- PGPy (pure Python)
- no external binaries
.asckey handling (no keyring)- compatible encrypted format
Usage
duras
duras append "note"
duras search term
Commands
open
duras open
duras open -1
duras open 2026-04-19
duras open -- +7
append
duras append "text"
duras append -d -1 "yesterday"
cat file | duras append -
- = stdin
Encryption
duras -c open
duras -c append "secret"
duras -c show
Notes:
- uses system
gpg - append is memory-only
- editor uses temp file
Search / tags
duras search error
duras search todo -i
duras tags
- literal match (not regex)
- encrypted notes excluded
Listing
duras list
duras list -n 0
duras stats
Order: filename (date), not mtime.
Export
duras export ~/backup
duras export ~/backup --encrypt
Creates archive; optional encryption avoids plaintext export.
Dates
YYYY-MM-DD absolute
0 today
-1 yesterday
+7 future
Future dates are rejected.
Environment
| var | meaning |
|---|---|
| DURAS_DIR | notes dir (default: ~/Documents/Notes) |
| EDITOR | editor fallback: nano / vi / ed |
| DURAS_GPG_KEY | encryption recipient |
Behavior
- one file per day
- plain + encrypted may coexist
- atomic writes
- no index layer
Exit codes
| code | meaning |
|---|---|
| 0 | ok |
| 1 | error |
| 2 | not found |
| 3 | invalid input |
| 4 | external failure |
Limits
- encrypted notes not searchable
- depends on
gpg
Docs
man duras- https://codeberg.org/duras/duras
License
ISC
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file duras-1.0.0.tar.gz.
File metadata
- Download URL: duras-1.0.0.tar.gz
- Upload date:
- Size: 12.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
47b6a2c09d028d10713cb491a166c83b5320363a44d1206916b71d0c622d7999
|
|
| MD5 |
03a145339bb1764a14f16e4c7a1ae5f9
|
|
| BLAKE2b-256 |
a6accaf57c1789d1615b1527035c7b091f765df0c86c008f62290a4739413c69
|
Provenance
The following attestation bundles were made for duras-1.0.0.tar.gz:
Publisher:
publish.yml on sduras/duras
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
duras-1.0.0.tar.gz -
Subject digest:
47b6a2c09d028d10713cb491a166c83b5320363a44d1206916b71d0c622d7999 - Sigstore transparency entry: 1340056158
- Sigstore integration time:
-
Permalink:
sduras/duras@0dd11e8275667ea2d18a2aeee732000358433766 -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/sduras
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0dd11e8275667ea2d18a2aeee732000358433766 -
Trigger Event:
push
-
Statement type:
File details
Details for the file duras-1.0.0-py3-none-any.whl.
File metadata
- Download URL: duras-1.0.0-py3-none-any.whl
- Upload date:
- Size: 12.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
523721aba77f817c55024ad463fe79b3681cc17ee7488115d1ebd6a2591cbc70
|
|
| MD5 |
e72722bceaf29e2ee7185f94db3569a2
|
|
| BLAKE2b-256 |
02fcc9734b6b7149c436e6801b7823499be1a19979af382de601bd1771076646
|
Provenance
The following attestation bundles were made for duras-1.0.0-py3-none-any.whl:
Publisher:
publish.yml on sduras/duras
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
duras-1.0.0-py3-none-any.whl -
Subject digest:
523721aba77f817c55024ad463fe79b3681cc17ee7488115d1ebd6a2591cbc70 - Sigstore transparency entry: 1340056163
- Sigstore integration time:
-
Permalink:
sduras/duras@0dd11e8275667ea2d18a2aeee732000358433766 -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/sduras
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0dd11e8275667ea2d18a2aeee732000358433766 -
Trigger Event:
push
-
Statement type: