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 |
| Text Zoom | Ctrl+/Ctrl- to make the text bigger or smaller |
| 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.
Zoom text - Ctrl+ (or Ctrl+=) makes it bigger, Ctrl- makes it smaller. Resets when 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 |
Ctrl+ / Ctrl- |
Bigger / smaller text |
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.9 or newer (tested on 3.9 and 3.13), and a terminal (PowerShell, CMD, or Windows Terminal). Pulls in two small libraries: keyboard and pywin32.
How Releases Are Made
A release happens when a maintainer pushes a version tag such as v1.5.0. GitHub Actions then checks that the tag matches the package version, builds the package, publishes it to PyPI through trusted publishing (no stored token), and publishes the GitHub Release with generated notes. Merging a pull request never publishes on its own. What shipped in each version is listed in CHANGELOG.md and on the Releases page.
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.4.1
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.4.1.tar.gz | 49.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sidenote-1.4.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 82.8 kB
Release files / sidenote-1.4.1.tar.gz
| Download URL | sidenote-1.4.1.tar.gz |
|---|---|
| Size | 49.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0ea0979096c0eb240d156029d1ecdf4193d382e5f878be522fd36cbc61677ee1
|
|
BLAKE2b-256 checksum How to use checksums |
a759e086fd4dbb627506e94d5a2764b7d2d528e58eb34291bfe47198fed2e153
|
| 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 Oct 4, 2026.
Transparency logRelease files / sidenote-1.4.1-py3-none-any.whl
| Download URL | sidenote-1.4.1-py3-none-any.whl |
|---|---|
| Size | 33.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
10db703cc27816c7c2f2b102ffa3e0b79193fe76579bb2b84f75fdc0d53f3e58
|
|
BLAKE2b-256 checksum How to use checksums |
eb7d70046582d34dfff2767cb19d2b4f669a824588ac36e27bdaac404c6df9ef
|
| 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 Oct 4, 2026.
Transparency log