taskbar-focus 0.3.0

A tiny Pomodoro/focus timer that lives in the Windows tray and toggles Do Not Disturb
taskbar-focus-0.3.0 is not a library.

taskbar-focus

A tiny focus timer for Windows that actually silences your notifications.

Work in 25-minute stretches. While you're focused, Windows goes quiet. When you take a break, everything comes back.

A Windows application. Needs Windows 10 or 11, 64-bit.


Install

With Scoop — recommended, and updates cleanly:

scoop bucket add taskbar-focus https://github.com/yoelrosenthal/taskbar-focus
scoop install taskbar-focus

Later: scoop update taskbar-focus

With Cargo, if you have Rust:

cargo install taskbar-focus

Just the executable: download taskbar-focus.exe from the latest release and run it. Nothing to configure — put it wherever you like.

Windows 11 hides new tray icons. If you don't see it after starting, click the ^ arrow near the clock and drag taskbar-focus onto the taskbar.

What you get

A timer that sits on your taskbar

A small window showing the countdown, sized to sit on the taskbar out of the box:

▌ Focus                    23:16
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
  • Drag it anywhere by its middle. Resize it from any edge.
  • Make it big and it switches to a stacked layout with a large clock.
  • Click it to pause or resume.
  • It stays on top so you can always see it, and remembers where you put it.

Turn it on in Settings, or from the tray menu. Reset window size puts it back.

Quiet while you work

When focus starts, Windows Do Not Disturb switches on. When a break starts, it switches off. That's the whole point of the app.

Your priority apps and contacts still get through — it uses exactly the mode Windows' own "Do not disturb" button uses, and never touches your priority list.

A muted bell, because Windows will not draw one

Windows only lights its own muted icon for a change the taskbar made itself, so muting from another program usually leaves no visible trace. This app draws that trace instead — the same crossed-out bell — and it follows Do Not Disturb however it was switched on, including by you.

  • a separate bell beside the clock, present only while you are muted
  • a bell in the compact timer window, next to the countdown

Both are on by default and can be switched independently under Do Not Disturb in Settings. Windows 11 files new tray icons behind the ^ arrow — drag the bell out once and it stays where you put it.

The timer's tray icon is left alone: sixteen pixels hold a progress ring or a bell, not both.

A tray icon that shows progress

🔴 Red ring filling up Focused
🟢 Green ring On a break
⚪ Grey ring Nothing running
Faded Paused

Left-click starts, pauses and resumes. Right-click for everything else.

Shortcuts

Ctrl+Alt+F Start, pause or resume
Ctrl+Alt+B Skip to the next interval

They work from any app, and you can change them in Settings.

How a session flows

Finish a focus session → a short break starts by itself → after a set number of sessions you get a long break instead. Four in Pomodoro 25/5, two in Deep Work 90/15, and you can change it per preset. Breaks end by going idle, so you decide when to start working again.

Don't like that? Turn the automatic sequence off and drive it by hand.

Strict focus makes stopping or skipping a running focus session ask first, so a stray click can't end it.

Presets

Three to start with — Pomodoro 25/5, Deep Work 90/15, Short 15/3 — and you can edit them or add your own with Save as new preset. Switch between them from the tray menu.

From the command line

Handy for shortcuts, stream decks, or scripts. Commands go to the running app, so you never end up with two timers.

taskbar-focus --start                     # start focusing
taskbar-focus --break                     # take a break
taskbar-focus --toggle                    # start / pause / resume
taskbar-focus --skip                      # next interval
taskbar-focus --stop                      # stop
taskbar-focus --preset "Deep Work 90/15"  # switch preset
taskbar-focus --quit

Good to know

If your antivirus complains. It might. Muting notifications and restarting a Windows service look, from the outside, like something suspicious — and a brand-new unsigned program has no reputation yet. Run taskbar-focus --explain to see precisely what it touches; it's read-only and works without the app running. Everything it does is logged to %APPDATA%\taskbar-focus\activity.log. On a work machine, ask IT to allow it rather than turning off your protection. Or switch off Mute notifications during focus and use it as a plain timer.

Windows' own muted icon usually will not appear. Notifications really are muted, but the area beside the clock is drawn by Explorer, which caches that state and does not update without being restarted. Restarting the desktop for an icon is unreasonable, so the app draws its own mark instead.

Your settings live in %APPDATA%\taskbar-focus\config.toml — plain text you can back up, sync or edit by hand.

It handles the awkward cases. Computer sleeps mid-session? Counts the time asleep by default (or ignores it, or pauses — your choice). Changed the system clock? Ignored. Closed the app mid-session? It comes back paused, with the time you were away deducted. Explorer restarted? The tray icon reappears.

Privacy. No network access at all — there's no networking code in it. No telemetry, no accounts, no auto-update. It never needs administrator rights.

Uninstall

scoop uninstall taskbar-focus, or cargo uninstall taskbar-focus, or just delete the .exe.

Either way, settings stay in %APPDATA%\taskbar-focus until you delete that folder. Do Not Disturb is switched back when the app exits.

For developers

cargo build --release        # target\release\taskbar-focus.exe
cargo test
cargo install --path .       # install your local build

Merging a pull request into main publishes a release: GitHub Actions bumps the version, writes the CHANGELOG.md entry, tags the commit, builds, attaches a build provenance attestation, updates the Scoop manifest and publishes to crates.io. How big the bump is comes from a release:major, release:minor or release:patch label on the pull request; release:skip merges without releasing.

Pushing a tag by hand (git tag v0.2.0 && git push origin v0.2.0) still works, for re-cutting a release. Either way the tag must match the version in Cargo.toml — the workflow checks this first and stops if it doesn't.

Publishing to crates.io needs a CARGO_REGISTRY_TOKEN repository secret (from crates.io/settings/tokens). Without it that step is skipped, and everything else still runs.

The interesting part is src/os/dnd/ — Windows has no supported API for setting Do Not Disturb, so that module explains what it does instead, and why.

This repository doubles as its own Scoop bucket: the manifest in bucket/ is updated automatically on each release.

License

MIT — see LICENSE.