Notes

Notes

A private note-taking app. Markdown, tags, attachments, and client-side encryption.

Keyboard shortcuts

Action Shortcut Where
Save note  /  Ctrl Quick-create dialog
Close dialog Esc Any open dialog
Open note Focused note in list
Navigate options Category / tag combobox
Pick option or create Category / tag combobox
Confirm and move on Tab Category / tag combobox
Close dropdown Esc Category / tag combobox
Back Browser back button Anywhere in the app

Encryption

Every note is encrypted in your browser before it is sent to the server — there's no opt-out. The server stores and serves opaque ciphertext — it never sees plaintext, for anything you write.

Algorithm
AES-256-GCM
Key derivation
PBKDF2-SHA256, 600 000 iterations
What is encrypted
Titles, bodies, categories, tags, attachments, locations
What stays plaintext
Nothing — the server has zero knowledge of your content

Your passphrase derives a Key Encryption Key (KEK) via PBKDF2. The KEK wraps a random Master Encryption Key (MEK) that is stored (wrapped) on the server. The MEK itself encrypts your note content. Changing your passphrase re-wraps the MEK — existing notes stay readable.

The derived key is cached in sessionStorage (cleared when the tab closes) or localStorage (persists across sessions) — your choice in Settings. Clicking Clear key locally removes it from both storages immediately.

There is no recovery path if you forget your passphrase. The server never holds the plaintext key.

Stack

Django 6 · PostgreSQL 18 · Vanilla JS (ES modules, no framework) · marked.js for client-side markdown · Web Crypto API for encryption · nginx for media serving.