← knowledge.oriz.in

Wakatime

service servicesproductivitytime-trackingwakatimeautoide-pluginrecruiter-facingprimarysole-pick

Wakatime

Role

The family's automatic coding-time tracker — and after the 2026-06-20 walk-back of Toggl Track, the sole time-tracking pick family-wide. An IDE plugin sends heartbeats on file activity to wakatime.com, which classifies them by language / project / file / branch and surfaces daily / weekly / monthly charts. Zero manual timers — if the editor sees the user typing or scrolling, Wakatime captures it. If the editor doesn't see it, it's untracked, and that's intentional.

Sole time-tracking pick. Toggl Track was considered + rejected because it requires manual timer start/stop, which violates the family-wide auto-only-tracking rule locked 2026-06-20. Non-coding time (meetings, planning, calls) is intentionally not tracked rather than manually tracked — manual data decays, and untracked time is honest signal that the user was away from the keyboard. See decisions/architecture/time-tracking-wakatime-only for the walk-back narrative and decisions/architecture/auto-tracking-everywhere for the family-wide auto-only principle.

Free tier

Card / subscription required?

NO. Free tier sign-up is email or GitHub sign-in. No payment method requested. The 2-week history limitation is mitigated by daily lifestream export to JSONL — the API provides the funnel; JSONL is the durable archive.

Setup (one-time per machine)

# VS Code / Cursor
code --install-extension WakaTime.vscode-wakatime

# JetBrains: Settings → Plugins → Marketplace → "WakaTime"

# API key from wakatime.com/settings/account, written to:
#   ~/.wakatime.cfg     (Linux / macOS / Windows %USERPROFILE%)

API key originates at Doppler per secrets-management-doppler; distributed via doppler run or manual one-time write to the config file.

Lifestream ingest (future)

Per oriz-me-added-to-family

// Daily cron — pull yesterday's summary, append to JSONL
const r = await fetch(
  'https://wakatime.com/api/v1/users/current/summaries' +
  '?start=' + yesterday + '&end=' + yesterday,
  { headers: { Authorization: 'Basic ' + btoa(API_KEY) } },
);
const { data } = await r.json();
// → { type: "code-summary-wakatime", ts, duration_s, language, project, editor }

This pattern also side-steps the 2-week history limit on the free tier — the JSONL archive is the durable record; Wakatime's UI is the live dashboard.

Why this is our pick

Alternatives

Swap cost

Low — Wakatime's plugin is an IDE-side concern; swapping the upstream means swapping the API key. Per-tool data is exportable via API; the JSONL archive is provider-agnostic.

Privacy posture

Cross-refs