Skip to main content

plain-text daily notes with optional encryption

Project description

duras

License

Daily notes as plain text files, with search and optional encryption.


Install

pip install duras

Requires Python 3.13+. No dependencies. gpg optional for encrypted notes.


Quick start

duras               # open today's note in $EDITOR
duras append "fix login bug #todo"
duras search todo
duras tags

Model

One note per day:

YYYY/MM/YYYY-MM-DD.dn
  • 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

Commands

open

duras               # today
duras open -1       # yesterday
duras open 2026-04-19
duras open -- +10   # pass +10 to $EDITOR (jump to line)

append

duras append "text"
duras append -d -1 "yesterday"
cat file | duras append -

- reads from stdin.

show

duras show
duras show -1

list / stats

duras list
duras list -n 0     # all notes
duras stats

Order: by filename (ISO date), not mtime.

search / tags

duras search error
duras search todo -i    # case-insensitive
duras tags              # all tags with counts
duras tags project      # notes containing #project

Literal match, not regex. Encrypted notes excluded.

export

duras export ~/backup
duras export ~/backup --encrypt

Creates a timestamped .tar.gz. --encrypt pipes through gpg; no plaintext archive is written.

other

duras path          # absolute path to today's note
duras dir           # notes root directory
duras today         # print today's date
duras audit         # validate directory structure
duras echo          # notes on this date in past years
duras near          # notes within ±3 days of today
duras mv 2026-04-17 2026-04-16

Encryption

duras -c open
duras -c append "secret"
duras -c show
  • uses system gpg
  • append -c is memory-only; no plaintext temp file
  • open -c writes a temp file to /dev/shm when available

Dates

YYYY-MM-DD   absolute
0            today
-1           yesterday
-7           one week ago

Future dates are rejected.


Environment

variable meaning
DURAS_DIR notes directory (default: ~/Documents/Notes)
EDITOR editor (fallback: nano, vi, ed)
DURAS_GPG_KEY GPG recipient (default: self)

Exit codes

code meaning
0 ok
1 error
2 not found
3 invalid input
4 external failure

Limits

  • encrypted notes are not searchable
  • depends on system gpg for encryption

Docs


Variants

duras

Standard variant for Unix-like systems. Uses system gpg. No dependencies.

duras_ashell

For iOS a-Shell mini. Uses PGPy (pure Python) instead of system gpg. No external binaries. Handles .asc keys directly; no keyring. Compatible encrypted format.


License

ISC

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

duras-1.0.7.tar.gz (13.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

duras-1.0.7-py3-none-any.whl (13.1 kB view details)

Uploaded Python 3

File details

Details for the file duras-1.0.7.tar.gz.

File metadata

  • Download URL: duras-1.0.7.tar.gz
  • Upload date:
  • Size: 13.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for duras-1.0.7.tar.gz
Algorithm Hash digest
SHA256 af164492f9b14c8f48ec57f2f11e648490081dd923f4881c3fc5fd3cf8578b2c
MD5 4aa102de0a8405cdb1bbc1a0647c5b0f
BLAKE2b-256 22087d043dcc56e413ba38204a35836244ea391c1cc77334899d6c05c9a0e1dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for duras-1.0.7.tar.gz:

Publisher: publish.yml on sduras/duras

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file duras-1.0.7-py3-none-any.whl.

File metadata

  • Download URL: duras-1.0.7-py3-none-any.whl
  • Upload date:
  • Size: 13.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for duras-1.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 ddfa9888617738bb8ffad220760f2ad1434394a3af7714640868055a64ba2e61
MD5 9c1268d54d5dc7a50d364cbf13c7b85c
BLAKE2b-256 de653d300d02ec5396c6db479cfcfe8690802ce9464b0d0251ab9a2c8a9ca626

See more details on using hashes here.

Provenance

The following attestation bundles were made for duras-1.0.7-py3-none-any.whl:

Publisher: publish.yml on sduras/duras

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page