Miru Desktop: Local-first macOS Timer
Miru Time Tracking is available as a local-first desktop timer with menu bar controls, idle recovery, time entries, and Miru web sync.
Capture first. No browser tab. Web is for review and billing; desktop is for reliable capture.
Desktop covers capture. Web handles approvals, invoices, expenses, payments, reports, and team workflows.
A timer shouldn’t need tab archaeology.

Why desktop
Time tracking fails quietly.
Missed starts and forgotten lunches break invoices. Desktop fixes the capture problem.
The desktop app is built for that boring reality.
What ships
Miru Time Tracking ships as a desktop app, with macOS as the first-class target.
Ship checklist:
- menu bar timer: start, pause, reset, resume, stop-and-save
- local persistence across restarts
- entries: create, edit, delete, resume
- idle recovery: trim and continue, trim and start new, or keep
- workspace, account, and sync status in the app menu
- sync bridge to Miru web
The goal is not to recreate the full web app in a desktop shell. That is just a worse browser.
Make capture trivial. Send everything to the web for billing.
Local-first, then sync
Desktop timers need to survive normal work.
Sleep the laptop. Relaunch the app. Lose the network. Switch back from a meeting.
The app keeps timer state locally and continues to track. When Miru web is reachable, it can pull or push the current timer through the API.
Right split:
- desktop for capture
- web for review and billing
- CLI for terminal workflows
- API and MCP for automation
Same product. Better surfaces.
Built in public
Repo: saeloun/miru-time-desktop.
Stack: Electron Forge for the macOS app and menu bar, Vite + React + TypeScript for fast builds and shared UI with Miru web. No native-only UI stack unless we need one.
Tests: Vitest unit tests plus Electron Playwright integration specs for timer sync, local entries, resume, idle recovery, and persistence.
Release checklist: run tests, build the desktop artifacts, smoke open the packaged app, verify the Miru icon and menu bar timer, then publish.
No runtime surprises. No extra native UI stack. Strict verification before publish.
Download
What to try next
Use Miru on the web today. Install the desktop app when you want the timer to stay close.
- Start Miru: app.miru.so/signup
- Read the desktop feature page: miru.so/features/desktop-app
- Follow the source: github.com/saeloun/miru-time-desktop
PRs welcome.
Vipul A M
Co-founder at Saeloun. Building Miru. Rails contributor. Shipping from Pune, India.
Read next
The Floating Timer: Track Time Without Leaving Your Current View
New in Miru: a floating timer that lives on every page. Start, pause, stop, and save without navigating away from what you're doing.
Copy Last Week's Timesheet: The Feature That Saves 10 Minutes Every Monday
If your week looks like last week, why re-enter everything? New in Miru: one-click week copy and quick entry shortcuts.
Miru Mobile App Preview: Track Time From Your Phone
We're building a mobile app with Expo. Today view, Week view, offline support. Here's what it looks like and when you can get it.
Put it to work
Run one cleaner billing cycle in Miru.
If this article is about tracking time, billing clients, comparing tools, or automating work, Miru is the product version of that idea. Start free, invite the team, and send the next invoice from tracked work.
What you get
- Time tracking, invoices, expenses, and payments in one place.
- Free for up to 5 users. Pro is $1/member/month.
- Open source, with CLI, API, MCP, and self-hosting paths.
The article is the argument. Miru is the workflow.
Track the work, approve the hours, send the invoice, and get paid without bolting together three separate tools.