work-pm
Toggl Track logo

Should I self-host Toggl Track?

YESworth it

Kimai is a grown-up time tracker: projects, rates, invoices, per-client exports, team support. The apache image plus MariaDB boots in a coffee break and the per-seat subscription becomes zero.

The math (nothing hidden, including your time)

Toggl Track (Starter, per seat)$12.00/mo
VPS share + storage−$0.50/mo
Your maintenance: 20 min/mo at $20/h−$6.67/mo
Net saving$4.83/mo
Setup: 22 min measured (one-time)$7.33
Break-even1.5 months
Markup Index (price ÷ real self-host cost)1.7×

Price: source, checked 2026-08-06. Inputs are stored in git; every number above is derived, never hand-written.

What you lose

  • Toggl's one-click browser button polish and Track reminders
  • Native mobile apps are community, not first-party

What you're paying Toggl Track for

  • time tracking
  • projects & clients
  • reports & exports
  • team timesheets
Kimai running from the boot-verified compose file
Kimai, running from the compose file on this page — screenshot from our verified instance, not marketing material.

Ranked alternatives

Timesheets with customers, projects, hourly rates and invoices, on a server that never asks how many seats you have.

kimai/kimai · ★ 4,875 · last commit 0d ago · AGPL-3.0

Hardware

Runs comfortably on a real VPS (2 GB+).

The tested compose file (our evidence, CI-booted)

# Kimai — time tracking; apache image + mariadb
services:
  kimai:
    image: kimai/kimai2:apache
    container_name: kimai
    restart: unless-stopped
    depends_on:
      kimai-db:
        condition: service_healthy
    environment:
      DATABASE_URL: mysql://kimai:kimai@kimai-db:3306/kimai?charset=utf8mb4&serverVersion=11.4.2-MariaDB
      ADMINMAIL: admin@example.com
      ADMINPASS: changeme123
    ports:
      - "8001:8001"
    healthcheck:
      test: ["CMD-SHELL", "php -r 'exit(@file_get_contents(\"http://localhost:8001/\")!==false?0:1);'"]
      interval: 10s
      timeout: 10s
      retries: 36
      start_period: 60s
  kimai-db:
    image: mariadb:11
    restart: unless-stopped
    environment:
      MARIADB_DATABASE: kimai
      MARIADB_USER: kimai
      MARIADB_PASSWORD: kimai
      MARIADB_ROOT_PASSWORD: kimai-root
    volumes:
      - kimai-db:/var/lib/mysql
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 5s
      timeout: 5s
      retries: 12
volumes:
  kimai-db:

Want a guided install instead? caniselfhostit.com/toggl-track has AI-agent prompts that assume a bare machine — that's their half of the stool, and it's good.

Verification

Protocol v1 · verified by zernonia on 2026-08-10 · setup measured at 22 min · AI assistant: claude-code (allowed & stated)

What broke

  • Boot to healthy measured at 69s on the 2GB reference env
Full timed log
# Toggl Track — verdict log

- **Date:** 2026-08-10
- **Verdict:** YES — worth it
- **Protocol:** v1 (2GB reference env, Docker preinstalled, AI assistant: claude-code)

## Setup evidence

- Compose: `compose/toggl-kimai.yml`
- Boot to healthy: **69s** measured this session
- Setup time recorded: 22 min (boot + configuration to first working workflow)

## What broke / notes

- Boot to healthy measured at 69s on the 2GB reference env

## The call

Kimai is a grown-up time tracker: projects, rates, invoices, per-client exports, team support. The apache image plus MariaDB boots in a coffee break and the per-seat subscription becomes zero.

Verdict history

  • 2026-08-10: unscored → YES — Initial verdict: Kimai is a grown-up time tracker: projects, rates, invoices, per-client exports, team support.