← 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. 10mo 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 ↗