Personal Knowledge Manager (pkm) π
pkm is a terminal-first, encrypted personal knowledge manager inspired by the Zettelkasten method.
It helps you build a second brain using small, interconnected notes β all stored securely on disk and fully controlled by you.
β¨ Think: Obsidian-style linking + Git-friendly storage + strong encryption β without leaving the terminal.
Why pkm?
- π§ Zettelkasten-inspired β notes are atomic, linkable, and discoverable
- π Security first β notes are encrypted at rest (AES-256-GCM)
- β‘ Fast & local β no cloud, no latency, no vendor lock-in
- π Clean filesystem layout β works naturally with Git
- π§ Multi-user support β separate encrypted knowledge bases per user
Features π
Core
- β
Create, edit, list, and delete notes
- β
Link notes to build a knowledge graph
- β
Tag notes for categorization
- β
Full-text keyword search
- β
Tag-based search
- β
Note indexing for fast queries
Security
- β
AES-256-GCM encryption on disk
- β
PBKDF2 key derivation (100k iterations)
- β
Per-user encryption keys
- β
Zero plaintext storage
System
- β
Multi-user support
- β
Git-safe encrypted notes
- β³ Multi-machine sync (planned)
- β³ Terminal UI (TUI) (planned)
Installation βοΈ
Option 1: Download from GitHub Releases (Recommended)
Prebuilt binaries are available for major platforms on the GitHub Releases page.
# Example (Linux x86_64)
curl -LO https://github.com/<username>/personal-knowledge-manager/releases/latest/download/pkm-linux-amd64
chmod +x pkm-linux-amd64
mv pkm-linux-amd64 /usr/local/bin/pkm
Option 2: Build from source
Prerequisites
- Go (latest stable)
task (Taskfile runner)
git clone https://github.com/<username>/personal-knowledge-manager.git
cd personal-knowledge-manager
task build
Add the binary to your PATH:
export PATH="$PATH:$(pwd)/build"
Option 3: Package Managers (Planned)
Contributions welcome π
Quick Start β‘
# 1. Create a user
pkm user init alice
# 2. Create a note
pkm --user alice note new "My first note"
# 3. List notes
pkm --user alice note list
# 4. Link notes
pkm --user alice link add <source-id> <target-id>
# 5. Search notes
pkm --user alice search keyword "zettelkasten"
Data Layout π
~/.pkm/
βββ .crypt # Encrypted user keys (DO NOT commit)
βββ alice/
β βββ <note-id>.pkm # Encrypted notes
β βββ .index.pkm # Encrypted search index
Git Usage
β Safe to commit:
- User directories (
<username>/)
- Encrypted
.pkm files
β Never commit:
Security Model π
- AES-256-GCM authenticated encryption
- PBKDF2 key derivation
- Random salts and nonces per user
- Passwords are never stored
- No plaintext ever written to disk
Even if your repo is public, your notes remain private.
Philosophy π§©
pkm is designed around these principles:
- Small notes > big documents
- Links create insight
- Local-first > cloud-first
- You own your data
Roadmap π£
- π Multi-machine sync
- π₯ Terminal UI (TUI)
- π Graph visualization
- π Plugin system
Contributing π€
Contributions, ideas, and feedback are welcome.
Open an issue or submit a PR β even small improvements matter.