← Back to all sparks
T

TimeTagger

HR
Velocity0.0

Open-source time tracking app with an interactive timeline

A time tracker that ships twice a year and spends it on self-hosters.

self-hostingtime-trackingopen-sourceapi-surfacecommunity-prs
Current state
TimeTagger is a self-hosted time tracker maintained by a small core with a steady stream of outside contributions. Releases land two or three times a year and bundle whatever community PRs arrived rather than a planned roadmap. Recent work concentrates on the deployment and integration surface — an API for external tooling, a hardened default binding, offline usage — rather than the tracking UI itself.
Where it's heading
The center of gravity has moved from the timeline UI toward how an instance is run and scripted against. v25.12.1 added a version endpoint and server-side record filters, which are the pieces an operator needs to automate against a deployment; v24.12.2 moved the default bind to loopback after an auth gap. The app-facing changes in the same window are smaller and mostly contributed.
Prediction
The next release will most likely extend the records API further, since that is where the last cycle of contributions concentrated. The two-releases-a-year cadence gives no basis for predicting when.

Recent moves

  1. 7mo ago

    Records API gains server-side filters and a version endpoint

    The first release to treat TimeTagger's API as a surface worth building on: records can be filtered server-side, and a version endpoint lets external tooling detect what it is talking to. Offline improvements and a bulk SQLite edit script round out a release aimed at operators rather than end users.

    View source ↗
  2. 1y ago

    Password-manager login, DST fixes, and a non-root image

    Housekeeping split across the two audiences TimeTagger serves — a login form password managers can fill for end users, a non-root container tag and Python 3.13 for operators. The daylight-saving fixes close a class of bug that had broken both range snapping and week calculations.

    View source ↗
  3. 1y ago

    Default bind moves to loopback after auth check gap

    A security release that changes the default binding from 0.0.0.0:80 to 127.0.0.1:8080 and adds a localhost auth check. It is the sharpest example of the project treating deployment defaults as part of the product rather than the operator's problem.

    View source ↗
  4. 1y ago

    Night-shift offsets and denser timeline clustering

    Scheduling work for people whose day does not start at midnight: a configurable day offset, snapping to the previous day, and compaction for timelines crowded with short records. Narrow, but it closes a real gap for shift workers.

    View source ↗
  5. 2y ago

    Android standalone display, multiple date formats, dark-mode fixes

    A grab-bag of contributed UI work — Android standalone display mode, configurable date formats, a visible now-line in dark mode, tag unselection via backspace. Typical of TimeTagger's release shape, where a cycle's contents are whatever the community sent.

    View source ↗
  6. 2y ago

    Totals now respect tag filters

    Two small fixes: totals stop ignoring the active tag filter, and tags can be unselected by clicking them. No change to the product's shape.

    View source ↗