Encrypted, extensible command line note app with sync backends
Project description
Notr
Encrypted, lightning-fast CLI notes with a modern TUI experience and pluggable sync backends.
Highlights
- End-to-end encryption – every note is encrypted with AES-256-GCM before touching disk.
- Rich CLI UX – colourful output, fuzzy search, notebook-aware completions, and ergonomic shortcuts powered by Click + Rich.
- Intelligent sync – per-note merges with UUID tracking, conflict-safe tombstones, and optional auto-sync.
- Extensible architecture – ships with local filesystem and WebDAV backends; new backends slot in via a single interface.
Installation
pipx install notr
# or
pip install notr
Upgrade with pipx upgrade notr (or pip install --upgrade notr).
Quick Start
# Initialise the secure store and select a backend
notr init
# Add your first note (opens $EDITOR when text omitted)
notr add Work
# Browse notebooks and notes
notr view # notebooks
notr view Work # notes in “Work”
# Search across everything (fuzzy search included)
notr find meeting
notr ffind "meetng"
# Merge local/remote state (auto-sync can do this for you)
notr sync
Every command provides --help, and short aliases exist (for example notr a for notr add).
Everyday Commands
| Command | Purpose |
|---|---|
notr add [NOTEBOOK] [TEXT] |
Create a note (opens $EDITOR if TEXT omitted; --file seeds from a file). |
notr view [NOTEBOOK] [ID] |
List notebooks, list notes, or render a note as pretty Markdown. |
notr edit NOTEBOOK ID |
Edit an existing note in your editor. |
notr move FROM ID TO |
Move a note between notebooks. |
notr find [-b NOTEBOOK] QUERY |
Case-insensitive search within a notebook or globally. |
notr ffind [-b NOTEBOOK] QUERY |
Fuzzy search powered by RapidFuzz. |
notr sync |
Merge local and remote changes with spinner + summary output. |
notr backend login/logout/status |
Manage backend credentials and health. |
notr login/logout |
Cache or forget the decrypted master password for the current session. |
notr changemaster |
Rotate the master password without re-encrypting notes manually. |
Sync & Security
- The master password never leaves your machine. A PBKDF2-derived key wraps a randomly generated master key used for note encryption.
- Backends only see encrypted SQLite pages. Credentials live in the OS keyring when available (with a locked-down file fallback).
- Sync compares notebooks/notes with stable UUIDs, merging only what changed. Tombstones ensure deletions propagate safely. The first sync against an older database migrates it automatically.
- Enable automatic syncing after mutating commands by setting
"autosync": truein~/.config/notr/config.json.
Configuration
- Config file:
~/.config/notr/config.json(override viaNOTR_CONFIG_PATH). - Encrypted database:
~/.local/share/notr/notr.db(override viaNOTR_DB_PATH). - Tweak defaults within the
optionssection (editor, viewer, timestamps, auto-sync, conflict handling).
Built-in Backends
- local – keeps an encrypted copy in a directory you control (perfect for offline backups or sync tools like Syncthing).
- webdav – syncs against any WebDAV endpoint using
PUT/GET/HEAD, with graceful error messaging and spinner feedback.
To add a backend, subclass Backend in notr/backends/ and register it in notr/backends/base.py.
Shell Completion
Generate completion scripts and source them from your shell startup:
notr completion bash > ~/.config/notr/notr.bash
notr completion zsh > ~/.config/notr/notr.zsh
notr completion fish > ~/.config/fish/completions/notr.fish
Restart your shell (or exec $SHELL) to activate completions.
Contributing & Support
- Report bugs or request features: https://github.com/kimusan/notr/issues
- Ready to contribute? Read CONTRIBUTING.md.
License
Released under the MIT License. Crafted with care by Kim Schulz and the community.
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 notr-1.0.0.tar.gz.
File metadata
- Download URL: notr-1.0.0.tar.gz
- Upload date:
- Size: 26.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
72f18483a106eddcfb3e496edc5550ce88602f0b22bfee2e35ecad82729a164f
|
|
| MD5 |
df1231dc31be60ef528c8aa3c44ac7d2
|
|
| BLAKE2b-256 |
6ccc4c376baad474fe6221837e5ede96d37d60f440de39ed69b338e34bd9357d
|
Provenance
The following attestation bundles were made for notr-1.0.0.tar.gz:
Publisher:
python-publish.yml on kimusan/notr
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
notr-1.0.0.tar.gz -
Subject digest:
72f18483a106eddcfb3e496edc5550ce88602f0b22bfee2e35ecad82729a164f - Sigstore transparency entry: 586825741
- Sigstore integration time:
-
Permalink:
kimusan/notr@8b34539a0f1596aece7b7ad56b3233610f9cf675 -
Branch / Tag:
refs/tags/1.0.0 - Owner: https://github.com/kimusan
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@8b34539a0f1596aece7b7ad56b3233610f9cf675 -
Trigger Event:
release
-
Statement type:
File details
Details for the file notr-1.0.0-py3-none-any.whl.
File metadata
- Download URL: notr-1.0.0-py3-none-any.whl
- Upload date:
- Size: 30.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f6d89095a9036ffb42310dc9c4e865057aad3a0d2c77aa0d39483d80b6929c8c
|
|
| MD5 |
5575b8cae9522e2f2245a89422662c41
|
|
| BLAKE2b-256 |
4c6be2ab9fe87604b56b6a8627be76c1fa1c1ed538212e2d1a53563d2a608851
|
Provenance
The following attestation bundles were made for notr-1.0.0-py3-none-any.whl:
Publisher:
python-publish.yml on kimusan/notr
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
notr-1.0.0-py3-none-any.whl -
Subject digest:
f6d89095a9036ffb42310dc9c4e865057aad3a0d2c77aa0d39483d80b6929c8c - Sigstore transparency entry: 586825742
- Sigstore integration time:
-
Permalink:
kimusan/notr@8b34539a0f1596aece7b7ad56b3233610f9cf675 -
Branch / Tag:
refs/tags/1.0.0 - Owner: https://github.com/kimusan
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@8b34539a0f1596aece7b7ad56b3233610f9cf675 -
Trigger Event:
release
-
Statement type: