Lattice
A workspace for your research.
A menu bar timer, stopwatch, alarm, and pomodoro in one icon, with a timestamped history of every run. A single Go binary. Open source, MIT, no tracking.
ProductivityGo · AstroGitHub @MichalAFerberOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Go rewrite of Tomatick — cross-platform (macOS, Windows, Linux) menu bar / system tray timer, stopwatch, alarm & pomodoro with timestamped history.
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Class A (OSS/MIT). A menu bar / system tray timer, stopwatch, alarm and pomodoro — all in one icon, with a timestamped history of everything you run.
This is a Go rewrite of the original macOS-only Python
Tomatick, built so a single codebase
runs on macOS, Windows, and Linux. Config and history use the same JSON /
SQLite schema, so a config.json from the Python app loads here.
25m, 1h30m, 90s, 2:30), with a
live M:SS countdown in the tray (menu-bar title on macOS; tooltip + menu on
Windows). Pause / Reset / Stop.Everything is driven from the tray icon's menu: start a session → it appears in the menu → click its item to pause/stop it (or dismiss a ringing alarm).
Requires Go 1.25+. On Linux you also need the usual Fyne OpenGL/X11 headers
(libgl1-mesa-dev, xorg-dev). On Windows, a gcc (MinGW) is required because
Fyne uses CGO.
git clone https://github.com/MichalAFerber/tomatick2.git
cd tomatick2
go test ./...
go run ./cmd/tomatick
A tomato icon appears in the menu bar (macOS), notification area (Windows), or system tray (Linux). Click it to open the menu.
On Linux, a tray host that speaks StatusNotifierItem / AppIndicator is required (GNOME needs an extension; KDE and most other desktops work out of the box).
The timing, scheduling, history, and settings logic has no GUI dependencies:
go test ./internal/sessions ./internal/alarms ./internal/history ./internal/settings ./internal/core
go test ./... also compiles the UI packages (needs CGO + platform GUI libs).
# current OS
go build -o tomatick ./cmd/tomatick
# packaged bundles (run on the target OS, or use fyne-cross)
make package-mac # Tomatick.app, Dock-hidden
make package-windows # Tomatick.exe
make package-linux # Tomatick.tar.xz
fyne package must be installed. Pin it to the fyne.io/fyne/v2 version in
go.mod — the packager decides the bundle layout, so a floating @latest
changes it under you between releases. The release workflow pins the same
version:
go install fyne.io/fyne/v2/cmd/[email protected]
fyne.io/fyne/v2/cmd/fyne is deprecated upstream in favor of
fyne.io/tools/cmd/fyne (the old binary still works and prints a migration
notice on every run). Stay on the path above for now: fyne.io/tools is a
separate module with its own version numbers, not locked to fyne.io/fyne/v2,
so swapping it in here — and in .github/workflows/release.yml — needs its
own verification that packaging output doesn't change, not a drive-by edit.
On macOS the bundle is unsigned; on first launch right-click → Open to get past Gatekeeper, or:
xattr -dr com.apple.quarantine /Applications/Tomatick.app
Tomatick is a tray app — no Dock icon on macOS (runtime
LSUIElement / accessory policy). Look for the tomato in the menu bar. To start
it at login, use the icon's menu → Settings → Launch at login.
| OS | Directory |
|---|---|
| macOS | ~/Library/Application Support/Tomatick/ |
| Windows | %AppData%\Tomatick\ |
| Linux | ~/.local/share/Tomatick/ |
config.json # pomodoro settings, alarms, sound, launch-at-login
history.db # SQLite event history
Honor TOMATICK_SUPPORT_DIR to redirect both files (used by tests).
| Capability | macOS | Windows | Linux |
|---|---|---|---|
| Tray title text | yes (next to the icon) | tooltip + menu | title where the tray supports it |
| Sounds | /System/Library/Sounds | %WINDIR%\Media | bundled ding + paplay/aplay |
| Keep awake | caffeinate | SetThreadExecutionState | systemd-inhibit |
| Launch at login | LaunchAgent us.tomatick | HKCU Run key | ~/.config/autostart/ |
| Focus / DND | Shortcuts app, by name | ignored | ignored |
| Global hotkey | Accessibility permission | RegisterHotKey | X11 grab |
cmd/tomatick/ # main
internal/
sessions/ # Timer / Stopwatch / Pomodoro (pure logic)
alarms/ # Alarm model + scheduling (pure logic)
history/ # SQLite history store
settings/ # config.json load/save
core/ # tick, wiring, no GUI
ui/ # Fyne tray + settings windows
sound/ notify/ keepawake/ autostart/ hotkey/ focus/
assets/ # tomato art, bundled ding.wav
The product site lives at tomatick.us (source still in the Python repo).
| Component | License | Used for |
|---|---|---|
| Fyne | BSD-3-Clause | windows, dialogs, system tray |
| fyne.io/systray | Apache-2.0 | tray title / icon |
| modernc.org/sqlite | BSD-3-Clause | history database (pure Go) |
| golang.design/x/hotkey | MIT | global hotkey |
The menu-bar tomato icon (red / white / black themes) and the app icon are
original artwork, generated by scripts/make_icon.py.
Released under the MIT License — © 2026 Michal Ferber.