Kimai
Professional time tracking for teams and freelancers
Kimai is a free, web-based multi-user time tracking application. It tracks work time across projects and activities and generates invoices and exportable reports.
Key features
- Multi-user time tracking
- Invoice generation
- Detailed reporting and exports
- Plugin marketplace
Pros & cons
Strengths
- Mature and actively maintained
- Strong invoicing features
Trade-offs
- Configuration can be involved
Kimai replaces
Last reviewed Sep 13, 2026 · 862 words
Kimai is the only time tracker in our catalogue I would hand to an accountant. Customers, projects and activities carry their own hourly rates, timesheets round by rule, and the invoice module turns a month of entries into a numbered PDF or DOCX from a template you control, with the paid-and-unpaid state tracked inside the same app. That combination is why agencies, lawyers and freelancers who bill by the hour run it, and why it has survived since 2006. It is also more app than a person who wants to know "how long did I spend on the garden this week" needs; for them, the lighter tools at the end of this guide are kinder.
It needs MySQL or MariaDB, and 512 MB is realistic
Kimai 2 is a PHP Symfony application, and the current major line requires MySQL or MariaDB; SQLite was dropped and is not coming back. The official Docker image (kimai/kimai2, in apache and fpm flavours) plus a MySQL container is the whole stack:
services:
kimai:
image: kimai/kimai2:apache
environment:
- DATABASE_URL=mysql://kimai:kimaipass@db/kimai?charset=utf8mb4&serverVersion=8.3.0
- TRUSTED_HOSTS=time.example.com,localhost
- [email protected]
- ADMINPASS=changeme-on-first-login
ports:
- "8001:8001"
volumes:
- ./kimai-data:/opt/kimai/var/data
- ./kimai-plugins:/opt/kimai/var/plugins
db:
image: mysql:8.3
environment:
- MYSQL_DATABASE=kimai
- MYSQL_USER=kimai
- MYSQL_PASSWORD=kimaipass
- MYSQL_ROOT_PASSWORD=rootpass
volumes:
- ./db:/var/lib/mysql
The 512 MB figure in our catalogue holds for a team of 10; a single freelancer runs it comfortably alongside other services. TRUSTED_HOSTS must match the hostname you visit, and forgetting it produces a blank 400 page that has confused every first-time installer I know. Setting it on day one is the single most useful thing to take from this guide if you are about to deploy.
The data model is Customer > Project > Activity, and it is worth respecting
Every timesheet entry belongs to an activity, which belongs to a project, which belongs to a customer. Rates cascade down that chain and can be overridden at each level, and per-user rates layer on top. Budgets (in hours or money) sit on projects and activities with warning thresholds. If you set this up carelessly, with a project called "Misc" and an activity called "Work", none of the reporting means anything. If you spend 30 minutes modelling how you actually bill, the weekly report, the customer statement and the invoice all fall out without further effort. Time entries can be started with a live timer or entered after the fact; team leads can approve or lock periods so that invoiced hours cannot be edited later.
Invoicing is built in, and templates are files you edit
The invoice module filters entries by customer and date range, applies rates, and renders through a template: HTML, DOCX, XLSX, ODS or CSV, with PDF export from the HTML variant. Templates live in a directory and are ordinary files, so a designer can match your letterhead in Word without touching PHP. Invoice numbers follow a configurable pattern, and the generated documents are archived in Kimai with a status flow of new, pending, paid and cancelled. It is not accounting software (no ledger, no tax filing, no recurring billing), and for full accounts receivable you would pair it with Invoice Ninja or export to your bookkeeping package. For a freelancer sending 10 invoices a month it is entirely sufficient on its own.
The plugin marketplace is partly commercial
Kimai's core is AGPL-3.0 and complete, but a marketplace of plugins extends it, and a good number of the most-wanted ones (expenses, custom fields, task tracking, some report formats) are sold by the maintainer for a one-off fee in the tens of euros each. That is how the project is funded, and I think it is a fair model, but budget for it if your requirements list includes "track expenses against projects". Free plugins cover LDAP and SAML login, which the core also supports, plus API-driven integrations. The REST API is complete enough that community mobile apps and browser extensions exist for starting and stopping timers.
Lighter alternatives for lighter needs
TimeTagger is a single-user, tag-based tracker that runs on a fraction of the resources and has no invoicing; it suits a developer tracking their own week. Traggo is similar in spirit with tags instead of hierarchy and a clean dashboard. Solidtime is the newer team-oriented option with a modern UI and less reporting depth. If the word "invoice" does not appear in your requirements, one of those three will get you tracking in 10 minutes with less to configure.
What I'd do
For anyone who bills hours to more than one client, Kimai behind Caddy with MySQL, TRUSTED_HOSTS set before the first visit, nightly database dumps, and 30 minutes spent building the customer and project tree properly before entering a single hour. Buy the expenses plugin if you incur costs on client work. For a solo developer or a household, install TimeTagger instead and keep Kimai for the day you start invoicing.
Compare Kimai
13 head-to-head comparisons.
Similar time tracking apps
ActivityWatch
Time TrackingAutomatic, privacy-first time tracking for your devices
Replaces RescueTime, ManicTime
Solidtime
Time TrackingModern open-source time tracker for teams
Replaces Toggl, Clockify
Ever Gauzy
Time TrackingOpen-source business management with time tracking
Replaces Hubstaff, Time Doctor
Pomotroid
Time TrackingSimple, configurable Pomodoro timer desktop app
Wakapi
Time TrackingSelf-hosted coding activity and time tracking server
Replaces WakaTime, RescueTime
Watson
Time TrackingCommand-line time tracker with projects, tags, and reports
Replaces Toggl, Harvest