Sidenote
A lightweight, ADHD-friendly todo list that lives right next to your terminal window
https://github.com/user-attachments/assets/f506c214-92fc-4827-bcfa-19c170bb75f4
Why This Exists
The ADHD Problem: You're coding in your terminal, a task pops into your head, and by the time you open Notepad/Tudo/a new tab, it's gone. That 2-second context switch is enough for ADHD brains to lose the thought entirely.
Every other tool costs you that switch - open an app, run a command, find the window. Sidenote is already there, docked to your terminal. Shift+Tab, type, Enter. Three seconds, without ever looking away from what you were doing.
Why not existing tools
Notepad/Heavy apps: Requires Alt+Tab, finding the window, clicking - thought is gone Tudo/Tuxedo/Rondo: Need to run a command, switch context, navigate UI - thought is gone PowerShell scratchpad: Need to open it, switch focus - thought is gone Other terminal UIs: Require launching a separate app or command - thought is gone
Features
This isn't about rich features but simplicity. It's about zero-friction capture. When you have ADHD, the best todo app is the one that's already open and doesn't make you think.
| Feature | Description |
|---|---|
| Terminal Integration | Attaches flush to your terminal window, pixel-aligned |
| Smart Z-Order Sync | When you click the terminal, todo comes forward with it |
| Movement Following | Hides while you drag the terminal, snaps back when you stop |
| Resizable Width | Drag it wider for longer notes; it stays that width as the terminal moves |
| Check Things Off | Double-click a todo to complete it, don't just delete it |
| Edit Todos | Select one and press Enter to fix a typo without retyping it |
| Reorder Todos | Drag one up or down to move it |
| Tabs | Up to 5 separate lists, named and switched from the header |
| Undo Delete | Ctrl+Z brings back the last todo (or batch) you deleted |
| Persistent Storage | Todos saved atomically, survive reboots and crashes |
| Global Hotkey | Shift+Tab toggles from anywhere |
| Copy a Todo | Right-click a todo to copy its text, with a quick flash to confirm |
| Lock to Terminal | Lock button (🔓/🔒) to stick to a specific terminal |
| Built-in Help | ? button lists every action, no need to memorise anything |
| Timestamps | Each todo gets a timestamp when added |
| Dark Theme | Minimal interface that matches terminal aesthetics |
| Light Footprint | Python plus two small libraries; event-driven, so it idles at ~0% CPU |
Install
pip install sidenote
sidenote init
sidenote
That's it - Shift+Tab toggles it from anywhere.
Optionally, sidenote init adds start-note / stop-note shortcuts to your
PowerShell profile.
If
sidenoteisn't found after installing, your Python Scripts folder isn't on PATH - see Troubleshooting.
Usage
Add - type in the box, press Enter. Timestamped automatically.
Check off - double-click a todo. It greys out and shows [x]. Double-click again to uncheck.
Copy - right-click a todo to put its text on the clipboard. It flashes to confirm.
Edit - select a todo and press Enter. Change the text and press Enter again to save, or Escape to leave it as it was.
Reorder - press and drag a todo up or down.
Remove - select it and press Delete.
Undo a delete - Ctrl+Z brings back the last todo (or Ctrl+Delete batch) you removed.
Resize - drag the edge to widen it for longer notes; the width sticks until you restart.
Add a tab - click + in the top-left, type a name, press Enter. Up to 5.
Switch tabs - click a numbered tab button next to +.
Rename a tab - double-click its name in the footer, type a new one, press Enter.
Delete a tab - click the × next to its name in the footer, then confirm. Only shows once you have a second tab.
The ? button lists every action, so there's nothing to memorise.
Hotkeys
| Key | Action |
|---|---|
Shift+Tab |
Toggle overlay (works from any app) |
Enter |
Add todo (or save a tab name while naming one) |
Double-click |
Check off / uncheck |
Right-click |
Copy a todo's text |
Enter on a todo |
Edit its text |
Drag a todo |
Reorder it in the list |
Space |
Check off / uncheck the selected todo |
Delete / Backspace |
Remove selected todo |
Ctrl+Delete |
Clear all checked-off todos |
Ctrl+Z |
Undo the last delete |
Escape |
Hide overlay (or cancel naming a tab) |
| 🔓 / 🔒 | Pin to one specific terminal |
+ |
Add a tab (up to 5) |
Commands
| Command | Description |
|---|---|
sidenote |
Start the overlay |
sidenote stop |
Stop it |
sidenote status |
Is it running? Shows version and PID |
sidenote --version |
Print the version (-V works too) |
sidenote --help |
List every command (-h works too) |
sidenote upgrade |
Update to the newest release |
sidenote init |
Add PowerShell shortcuts |
sidenote stop only ever terminates its own process - your dev servers,
notebooks, and training runs are never touched.
Requirements
Windows 10/11, Python 3.7+, and a terminal (PowerShell, CMD, or Windows Terminal). Pulls in two small libraries: keyboard and pywin32.
Documentation
FAQ · Troubleshooting · How it works · Data format · Upgrading · Uninstalling · Development
Contributing
Happy to take PRs for bug fixes, better terminal detection, performance, or cross-platform support. Run pytest first, and add a test if you're fixing a bug. See CONTRIBUTING.md.
License
MIT - do whatever you want with it.
Built by a developer with ADHD, for developers with ADHD. If this resonates, you get it. If it looks like overkill, it's not for you and that's fine. 🧠⚡
Metadata
Release files for sidenote 1.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sidenote-1.3.2.tar.gz | 47.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sidenote-1.3.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 80.4 kB
Release files / sidenote-1.3.2.tar.gz
| Download URL | sidenote-1.3.2.tar.gz |
|---|---|
| Size | 47.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0f95b837b62e6d6328ea259c53479426dc90bd7236ac519ae396699d8ccd8253
|
|
BLAKE2b-256 checksum How to use checksums |
cf867dd27a22260b31a08bfdfb19076d438ac10df276b1fc8796c5e054807a18
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / sidenote-1.3.2-py3-none-any.whl
| Download URL | sidenote-1.3.2-py3-none-any.whl |
|---|---|
| Size | 32.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
98fac723938316db484c75f9d7dba2c5bd1d186d9c74946fe47831a2ba945510
|
|
BLAKE2b-256 checksum How to use checksums |
5f6a1f8c827af27a90426d3dc72d25e3492529fd3a7e905169edfd058833d5c2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|