__ __ _
| \/ | | |
| \ / | __ _ _ __| | _____ _ __ __ _
| |\/| |/ _` | '__| |/ / _ \| '__/ _` |
| | | | (_| | | | < (_) | | | (_| |
|_| |_|\__,_|_| |_|\_\___/|_| \__,_|
⚡ Sovereign Markor-style Markdown Notebook, QuickNotes & Todo TUI for Terminal Power Users
Features • Interactive TUI • Installation • 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: Run
markoraortddirectly to launch the interactive 4-tab Curses TUI, or use high-velocity one-liner CLI commands (td a,td ls,td qn) for fast capture and scriptability. - 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: Official PyPI (Recommended)
# Standard install (Zero external dependencies)
pip install markora
# With optional Google Keep synchronization
pip install "markora[keep]"
Option 2: 1-Line Standalone Installer
curl -fsSL https://raw.githubusercontent.com/zyekhabdul/markora/main/install.sh | bash
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. Running either without arguments launches the interactive TUI directly.
# --- Launch Interactive TUI (Default) ---
markora # Launch 4-tab Curses TUI
td # Same as markora (2-keystroke shortcut)
td ui # Explicit TUI launcher
# --- QuickNotes ---
td qn "Remember to review pull request" # Append thought
td qn # View quicknotes
td qn -e # Edit in $EDITOR
# --- Task Management ---
td a "Ship version 1.0" -p p1 # Add high-priority task (alias: markora add)
td a "Research new indexing" -s "Inbox" # Add to specific section
td ls # List all tasks (alias: markora list)
td ls -p # Show only pending tasks
td ls -d # Show completed tasks
td ls -t #backend # Filter by tag
td do 1 3 # Complete tasks #1 and #3 (alias: markora done)
td undo 2 # Mark task #2 pending (alias: markora undone)
td x 1 # Toggle completion status
td rm 4 # Delete task #4
# --- Markdown Notebook ---
td n "System Architecture" # Create new note in notes/ (alias: markora note)
td n -d # Open today's daily note
td nl # List all notebook files (alias: markora notes)
td find "authentication" # Search across all notes (alias: markora search)
td fav list # List starred notes
td fav add notes/project.md # Star a note
# --- Integrations ---
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.
Metadata
Release files for markora 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| markora-1.1.0.tar.gz | 37.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| markora-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 71.1 kB
Release files / markora-1.1.0.tar.gz
| Download URL | markora-1.1.0.tar.gz |
|---|---|
| Size | 37.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b1d0ce59f0075b5879bd7d3e0a55f802133dc57c14d42e0138718be7fb45fd8d
|
|
BLAKE2b-256 checksum How to use checksums |
fd242ec558bf784cd68da376975fa15a1a3883359e97cce04130c912c3441fd0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 18, 2026.
Transparency logRelease files / markora-1.1.0-py3-none-any.whl
| Download URL | markora-1.1.0-py3-none-any.whl |
|---|---|
| Size | 34.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
20d5d0f28c102dc6f337025ec00986413f445b4cb1f0d8435c0d3bb96e6ffe4c
|
|
BLAKE2b-256 checksum How to use checksums |
2b2bd7eaf6bacbe35c103bab60fba85ff358ab6f57839451aace2ba698ac2645
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 18, 2026.
Transparency log