Skip to main content

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.
notr export [options] Emit FZF-friendly TSV/JSON listings of notebooks or notes.
notr update NOTEBOOK ID [--file PATH] Apply note changes from stdin or a file (no editor launch).
notr notebook create NAME Ensure a notebook exists (safe to run repeatedly).

FZF integration

# pick a notebook, then fuzzy match its notes
notebook=$(notr export --scope notebooks --fields name --no-header | fzf)

notr export --scope notes --notebook "$notebook" \
  --fields "note_id,title" --no-header |
  fzf --delimiter "\t" --with-nth=2 --preview 'notr view '"$notebook"' {1} --plain'
# Fish shell variant
notr export --scope notebooks --fields name --no-header | \
  fzf | read --local notebook

notr export --scope notes --notebook "$notebook" --fields "note_id,title" --no-header \
  | fzf --delimiter "\t" --with-nth=2 --preview "notr view \"$notebook\" {1} --plain"

notr export supports TSV (default) and JSON; use --fields to choose columns (for example --fields name or --fields title,preview). More recipes live in docs/FZF-INTEGRATION.md.

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": true in ~/.config/notr/config.json.

Configuration

  • Config file: ~/.config/notr/config.json (override via NOTR_CONFIG_PATH).
  • Encrypted database: ~/.local/share/notr/notr.db (override via NOTR_DB_PATH).
  • Tweak defaults within the options section (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.

Neovim integration

A first-party Neovim plugin lives in nvim/notr.nvim. It uses fzf-lua to browse notebooks/notes and edits notes in-buffer via the new notr update command. Installation and usage details are in that directory's README.

Contributing & Support

License

Released under the MIT License. Crafted with care by Kim Schulz and the community.

Metadata

Release files for notr 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for notr 1.1.0
File Size Uploaded
notr-1.1.0.tar.gz 29.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for notr 1.1.0
File Interpreter ABI Platform
notr-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 62.5 kB

Release files / notr-1.1.0.tar.gz

Download URL notr-1.1.0.tar.gz
Size 29.6 kB
Tags Source
SHA-256 checksum
How to use checksums
7233f54882f4a64f35d7c4f165e52a8c6ed74dccb1b76f0a1e94c36e6f3cd109
BLAKE2b-256 checksum
How to use checksums
3b5afbc70da1b00e170e36a4aa23fef9444d6d428e4eeadcfc1d93f552d3fb7c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 7, 2025.

Transparency log

Release files / notr-1.1.0-py3-none-any.whl

Download URL notr-1.1.0-py3-none-any.whl
Size 32.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9797e77d77ac047e2c097cde00e682ca6c72b8f08155ba16816e2ecf9cdf6ca9
BLAKE2b-256 checksum
How to use checksums
40426ae257f015e8c440ef8f615f9903128cf9545380c750e262f1574fa61407
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 7, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page