__ __ _
| \/ | | |
| \ / | __ _ _ __| | _____ _ __ __ _
| |\/| |/ _` | '__| |/ / _ \| '__/ _` |
| | | | (_| | | | < (_) | | | (_| |
|_| |_|\__,_|_| |_|\_\___/|_| \__,_|
⚡ Sovereign Markor-style Markdown Notebook, QuickNotes & Todo TUI for Terminal Power Users
Features • Interactive TUI • 1-Line Install • CLI Reference • TUI Shortcuts • Google Keep Sync • Configuration
💡 Why Markora?
If you love the simplicity, offline-first philosophy, and markdown-native architecture of the popular Android app Markor, Markora brings that exact seamless experience straight into your terminal.
- Zero Cloud Lock-in: Your data is 100% plain Markdown files in
~/Documents(or your custom directory). You own your notes forever. - Zero Heavy Dependencies: Core CLI and interactive TUI run entirely on the Python 3 standard library. No Electron bloat, no node_modules, no heavy frameworks.
- Dual Personality: Use lightning-fast one-liner CLI commands (
markora add,markora qn) for scriptability, or fire up the rich interactive 4-tab Curses TUI (markora ui) for browsing, editing, and task triage. - Seamless Portability: Sync your folder with Syncthing, Nextcloud, Git, or Android Markor without converting formats.
✨ Key Features
| Feature | Description |
|---|---|
| 📝 QuickNote / Scratchpad | Instant timestamped brain dumps saved directly to quicknote.md. |
| ✅ To-Do & Milestones | Parse and manage markdown task lists with priorities (P1, P2, P3), tags (#urgent, @work), sections, and sub-items. |
| 📚 Notebook Tree | Hierarchical directory tree with folding/unfolding, file counts, and folder creation. |
| ⭐ Star & Pin Favorites | Pin your most crucial notes to the top for instantaneous access. |
| 🔍 Global Full-Text Search | Real-time substring and regex search across all markdown files with direct line jumping into $EDITOR. |
| 🖱️ Full Mouse & Keyboard | Click tabs, check/uncheck tasks, fold folders, and scroll panes with full terminal mouse support. |
| 🔄 Google Keep Bridge | Optional bidirectional sync with Google Keep (markora keep sync) for seamless mobile-to-desktop workflow. |
🖥️ Interactive Curses TUI
Launch with markora ui (or alias td ui):
┌────────────────────────────────────────────────────────────────────────┐
│ MARKORA NOTEBOOK | SSOT: TODOLIST.md │
├────────────────────────────────────────────────────────────────────────┤
│ [1] QuickNote [2] To-Do [3] Notebook [4] Search Filter: (none)│
├──────────────────────────────────┬─────────────────────────────────────┤
│ > [✔] # 1 [P1] Deploy core v1.0 │ Task #1 Details │
│ [ ] # 2 [P2] Write user manual │ Section : ACTIVE TASKS │
│ [ ] # 3 [P3] Refactor keep api │ Status : DONE │
│ │ Priority: P1 │
│ │ Scope: Production release │
│ │ Deliverables: Clean package │
├──────────────────────────────────┴─────────────────────────────────────┤
│ [Space] Toggle [a] Add [r] Edit [d] Del [e] Editor [s] Sync Keep [q] │
└────────────────────────────────────────────────────────────────────────┘
📦 Installation
Option 1: 1-Line Standalone Installer (Recommended)
curl -fsSL https://raw.githubusercontent.com/zyekhabdul/markora/main/install.sh | bash
This installs markora (and aliases td, todo, mo) into ~/.local/bin/.
Option 2: Pip / Pipx Installation
# Standard install (Zero external dependencies)
pip install git+https://github.com/zyekhabdul/markora.git
# With optional Google Keep synchronization
pip install "markora[keep] @ git+https://github.com/zyekhabdul/markora.git"
Option 3: Manual Clone & Symlink
git clone https://github.com/zyekhabdul/markora.git ~/Projects/markora
cd ~/Projects/markora
make symlink
🚀 CLI Command Reference
All commands support both markora and the ultra-short alias td:
# --- QuickNotes ---
td qn "Remember to review pull request" # Append thought
td qn # View quicknotes
td qn -e # Edit in $EDITOR
# --- Task Management ---
td add "Ship version 1.0" -p p1 # Add high-priority task
td add "Research new indexing" -s "Inbox" # Add to specific section
td list # List all tasks
td list -p # Show only pending tasks
td list -d # Show completed tasks
td list -t #backend # Filter by tag
td done 1 3 # Complete tasks #1 and #3
td undone 2 # Mark task #2 pending
td toggle 1 # Toggle completion status
td rm 4 # Delete task #4
# --- Markdown Notebook ---
td note "System Architecture" # Create new note in notes/
td note -d # Open today's daily note
td notes # List all notebook files
td find "authentication" # Search across all notes
td fav list # List starred notes
td fav add notes/project.md # Star a note
# --- TUI & Integrations ---
td ui # Launch interactive 4-tab TUI
td keep auth # Connect Google Keep
td keep sync # Two-way sync with Keep
⌨️ TUI Keyboard Shortcuts
| Key | Context | Action |
|---|---|---|
1 / 2 / 3 / 4 |
Global | Switch directly to Tab 1–4 |
Tab |
Global | Cycle to next tab |
j / k / ↑ / ↓ |
Navigation | Move cursor up / down |
g / G |
Navigation | Jump to top / bottom of list |
Space / x |
To-Do Tab | Toggle task checkbox ([ ] ↔ [✔]) |
a |
Global | Append QuickNote or Add To-Do task |
t |
QuickNote | Insert current timestamp log entry |
n |
Notebook | Create new .md note in highlighted folder |
N / m |
Notebook | Create new subfolder |
f / p |
Notebook | Star / Toggle Favorite note [⭐] |
r / R |
Global | Rename note/folder or edit task title |
d |
Global | Delete task, note, or directory (with confirmation) |
Enter / l / → |
Notebook | Open note in $EDITOR / Expand folder |
h / ← |
Notebook | Collapse folder / Jump to parent folder |
e |
Global | Open current document in $EDITOR (nvim, zed, etc.) |
s / S |
Global | Trigger Google Keep bidirectional synchronization |
/ |
Global | Live filter tree / search query |
Esc |
Global | Clear filter query |
Ctrl+R |
Global | Force reload data from disk |
? |
Global | Open interactive Keyboard Shortcut Help Modal |
q |
Global | Quit Markora |
🔄 Google Keep Bidirectional Sync
Markora includes a built-in sync engine that maps your Google Keep notes to your local markdown hierarchy:
- Daily Notes → Synced with Keep notes labeled
daily-notes - QuickNote → Synced with Keep note titled
QuickNote - General Notes → Synced with Keep notes labeled
notes
How to Authenticate:
# Install Keep dependencies
pip install "markora[keep]"
# Run interactive auth (automated browser popup or token paste)
markora keep auth
# Perform two-way sync
markora keep sync
⚙️ Configuration
Markora respects standard Unix configuration paradigms and environment variables:
| Environment Variable | Default | Purpose |
|---|---|---|
MARKORA_NOTES_DIR / NOTES_DIR |
~/Documents |
Root directory for your markdown notes |
MARKORA_TODO_FILE / TODO_FILE |
$NOTES_DIR/TODOLIST.md |
Master todolist markdown file |
EDITOR / VISUAL |
nvim (fallback: zed, nano, vi) |
Preferred text editor |
Config files are stored in ~/.config/markora/ (with automatic fallback to ~/.config/td/).
🐚 Shell Completion
Shell completion scripts for Bash and Zsh are located in completions/:
# Bash
source <(cat completions/markora.bash)
# Zsh
cp completions/markora.zsh ~/.zsh/completion/_markora
🛠️ Development & Testing
git clone https://github.com/zyekhabdul/markora.git
cd markora
# Setup editable install with test dependencies
make dev
# Run comprehensive test suite
make test
# Lint & syntax validation
make lint
📄 License
MIT License © 2026 zyekhabdul. Built with craftsmanship for sovereign terminal enthusiasts.
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 markora-1.0.0.tar.gz.
File metadata
- Download URL: markora-1.0.0.tar.gz
- Upload date:
- Size: 36.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
631d6fee2aec44731b33a19ab3c978ddf8331a2d1deefbbbc796faf7bd46155a
|
|
| MD5 |
6e4a5d714d19ff88bdc219a34e9423eb
|
|
| BLAKE2b-256 |
9c11133d55470867ec7d00fd2d1ee28a4d7d1581ceac3f1ea9c7795238a2d842
|
Provenance
The following attestation bundles were made for markora-1.0.0.tar.gz:
Publisher:
publish.yml on zyekhabdul/markora
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
markora-1.0.0.tar.gz -
Subject digest:
631d6fee2aec44731b33a19ab3c978ddf8331a2d1deefbbbc796faf7bd46155a - Sigstore transparency entry: 2692160319
- Sigstore integration time:
-
Permalink:
zyekhabdul/markora@14f02db02d16fa6be69f5053d892dce2fed637c1 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/zyekhabdul
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@14f02db02d16fa6be69f5053d892dce2fed637c1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file markora-1.0.0-py3-none-any.whl.
File metadata
- Download URL: markora-1.0.0-py3-none-any.whl
- Upload date:
- Size: 34.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d9ba61f51bc17d754b0e6a0ef3944a8a0a1e2a829f844922fde33c23e02dde8
|
|
| MD5 |
8e4bc291d440b262fc4eaeed37ffecc6
|
|
| BLAKE2b-256 |
567e6367899827d71149d7a6db47e910266ecf8d415523842bf98a3131acdbdc
|
Provenance
The following attestation bundles were made for markora-1.0.0-py3-none-any.whl:
Publisher:
publish.yml on zyekhabdul/markora
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
markora-1.0.0-py3-none-any.whl -
Subject digest:
7d9ba61f51bc17d754b0e6a0ef3944a8a0a1e2a829f844922fde33c23e02dde8 - Sigstore transparency entry: 2692160355
- Sigstore integration time:
-
Permalink:
zyekhabdul/markora@14f02db02d16fa6be69f5053d892dce2fed637c1 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/zyekhabdul
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@14f02db02d16fa6be69f5053d892dce2fed637c1 -
Trigger Event:
push
-
Statement type: