A lightweight, local todo app. No accounts, no cloud -- your data stays on your machine.
Runs as a standalone native window or in your browser. Single Python file, zero mandatory dependencies.
- Clean, minimal interface
- Categories with color coding (customizable via settings gear)
- Filter tasks by category
- Right-click any task to assign a category
- Links attached to tasks (captured automatically from browser on macOS)
- Runs 100% locally
git clone https://github.com/YOUR_USERNAME/QuickTodo.git
cd QuickTodoOr download and unzip the repository.
pip install pywebviewWithout pywebview, the app opens in your browser instead. Both modes work identically.
macOS / Linux:
python3 quicktodo.pyOr double-click start.command (macOS).
Windows:
python quicktodo.pyOr double-click start.bat.
- Add a task -- type and press Enter
- Complete a task -- click the circle
- Delete a task -- hover and click x
- Assign a category -- right-click the task
- Filter by category -- click the filter buttons
- Manage categories -- click the gear icon
| Mode | How | When |
|---|---|---|
| Native window | python3 quicktodo.py (with pywebview installed) |
Standalone app, no browser needed |
| Browser | QUICKTODO_BROWSER=1 python3 quicktodo.py or without pywebview |
Opens in your default browser |
Capture selected text from any app with a keyboard shortcut:
- Open Automator > new Quick Action
- Set "Workflow receives" to text in any application
- Add Run Shell Script:
export PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:$PATH" python3 "$HOME/path/to/QuickTodo/quicktodo.py" add
- Save as "QuickTodo"
- Assign a shortcut in System Settings > Keyboard > Keyboard Shortcuts > Services
- Install Hammerspoon
- Add to
~/.hammerspoon/init.lua:hs.hotkey.bind({"alt", "cmd"}, "L", function() hs.eventtap.keyStroke({"cmd"}, "C", 0) hs.timer.doAfter(0.15, function() hs.task.new("/usr/bin/python3", nil, {os.getenv("HOME") .. "/path/to/QuickTodo/quicktodo.py", "add"} ):start() end) end)
brew install terminal-notifier| File | Purpose |
|---|---|
quicktodo.py |
The entire app (server + UI) in a single file |
todos.json |
Your tasks (auto-created on first run) |
settings.json |
Categories config (auto-created on first run) |
start.command |
macOS launcher (double-click) |
start.bat |
Windows launcher (double-click) |
- Python 3.8+ (the only hard requirement)
- pywebview (optional, for native window instead of browser)
- terminal-notifier (optional, macOS only, for capture notifications)
MIT