{
  "version": "2",
  "generatedAt": "2026-11-03T22:49:39.280Z",
  "listing": {
    "slug": "kimai--kimai",
    "name": "Kimai",
    "tagline": "Self-hosted team time tracking with invoicing and a Builder-documented JSON API.",
    "shortTagline": "Self-hosted team time tracking",
    "description": "Kimai is a multi-user time-tracking web application for freelancers and companies: timesheets, customers, projects, activities, budgets, invoicing, exports and a plugin store. The Builder publishes a bearer-token REST API with an OpenAPI export, and sells a hosted edition at kimai.cloud. Self-hosting is configured through .env and config/packages/local.yaml.",
    "capabilities": [
      "adaptable",
      "operable"
    ],
    "vertical": "scheduling-staffing",
    "alternativeTo": [
      "Toggl Track",
      "Harvest",
      "Clockify"
    ],
    "shape": "business-app",
    "formFactor": "web-app",
    "executionModel": "deterministic",
    "provenance": "human-written",
    "codeStack": {
      "languages": [
        "PHP",
        "JavaScript"
      ],
      "frameworks": [
        "Symfony",
        "Doctrine",
        "Tabler",
        "Bootstrap"
      ],
      "packageManager": "composer",
      "database": [
        "MariaDB",
        "MySQL"
      ],
      "hostingTarget": [
        "docker",
        "on-premise",
        "hetzner",
        "digitalocean",
        "synology"
      ]
    },
    "modelStack": null,
    "repos": [
      {
        "url": "https://github.com/kimai/kimai",
        "owner": "kimai",
        "name": "kimai",
        "license": "AGPL-3.0",
        "stars": 4954,
        "lastCommit": "2026-08-31"
      }
    ],
    "interface": {
      "kind": "api",
      "url": "https://www.kimai.org/documentation/rest-api.html",
      "official": true,
      "hosted": "both"
    },
    "operability": "official",
    "recommendedWrapper": null,
    "reach": [
      {
        "job": "Record and edit timesheets",
        "reachable": true,
        "evidence": "rest-api.html lists timesheets as an API resource; OpenAPI export at /api/doc"
      },
      {
        "job": "Manage customers, projects and activities",
        "reachable": true,
        "evidence": "rest-api.html lists customers, projects and activities resources"
      },
      {
        "job": "Manage users",
        "reachable": true,
        "evidence": "rest-api.html lists users as an API resource"
      },
      {
        "job": "Manage teams and permissions",
        "reachable": null,
        "evidence": "not named on the REST API page; check the /api/doc export on a running instance"
      },
      {
        "job": "Create invoices",
        "reachable": null,
        "evidence": "rest-api.html does not say whether invoices can be created through API"
      },
      {
        "job": "Run reports and exports",
        "reachable": null,
        "evidence": "reports and exports are UI features; no report endpoint named in the REST docs"
      },
      {
        "job": "Configure timesheet rules, rounding and lockdown",
        "reachable": false,
        "evidence": "these live in config/packages/local.yaml, not the API"
      },
      {
        "job": "Install plugins from the store",
        "reachable": false,
        "evidence": "plugins are installed on the server filesystem; no API"
      },
      {
        "job": "Authenticate with SAML or LDAP",
        "reachable": false,
        "evidence": "configured in local.yaml; not an API job"
      }
    ],
    "editions": [
      {
        "name": "Self-hosted",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/kimai/kimai"
          },
          {
            "kind": "container",
            "url": "https://hub.docker.com/r/kimai/kimai2"
          }
        ]
      },
      {
        "name": "Kimai Cloud Standard",
        "price": {
          "amount": 3.99,
          "currency": "EUR",
          "period": "user/month"
        },
        "open": false,
        "distributions": [
          {
            "kind": "hosted",
            "url": "https://www.kimai.cloud/"
          }
        ]
      },
      {
        "name": "Kimai Cloud Professional",
        "price": {
          "amount": 4.99,
          "currency": "EUR",
          "period": "user/month"
        },
        "open": false,
        "distributions": [
          {
            "kind": "hosted",
            "url": "https://www.kimai.cloud/"
          }
        ]
      }
    ],
    "skills": {
      "kind": "none",
      "paths": [],
      "install": null,
      "note": "No SKILL.md, Claude Code plugin, or skills install target in the repo."
    },
    "customization": {
      "summary": "Deploy with Docker or Composer, set DATABASE_URL, MAILER_URL and MAILER_FROM in .env, then put shop rules in config/packages/local.yaml: multiple time-rounding rules (per weekday), weekday rate multipliers, permission sets and role maps, active-entry limits, invoice template search paths, and LDAP or SAML login. Time-tracking mode, lockdown periods, invoice number formats, branding, rates, budgets, customers and projects are set in the UI under System > Settings.",
      "envVars": [
        "DATABASE_URL",
        "MAILER_URL",
        "APP_ENV",
        "MAILER_FROM"
      ],
      "configFiles": [
        ".env",
        "config/packages/local.yaml"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "editCount": 6
    },
    "useWhen": [
      "my team bills by the hour and I want timesheets, rates and invoices in one place I run myself",
      "I want my agent to log time and pull project hours through an API instead of a spreadsheet"
    ],
    "accounts": [
      "Kimai Cloud (hosted edition only)"
    ],
    "active": true,
    "lastActivity": "2026-08-31",
    "gotchas": [
      "AGPL-3.0: modifications to a hosted instance must be shared with its users; some Adopters cannot accept this",
      "Must run on a subdomain; installing in a subdirectory is not supported",
      "API tokens are shown once at creation; API attribute order is not stable and DateTime values must use YYYY-MM-DDTHH:mm:ss, not ISO 8601",
      "Leave management, overtime and expenses are paid plugins or Cloud Professional features, not core"
    ],
    "fit": {
      "adaptable": 2,
      "operable": 3
    },
    "evidence": {
      "formFactor": "README: web-based multi-user application, PHP 8.2+, MariaDB/MySQL",
      "executionModel": "no model SDK or AI feature in README or config docs",
      "operability": "kimai.org/documentation/rest-api.html published by the Kimai project; bearer token; OpenAPI export at /api/doc",
      "effort": "kimai.org/documentation/configurations.html names config/packages/local.yaml and .env keys DATABASE_URL, MAILER_URL, APP_ENV",
      "editions": "README links kimai.cloud; kimai.cloud lists Standard EUR 3.99 and Professional EUR 4.99 per user per month with a 30-day trial",
      "active": "shortlist pushedAt 2026-08-31; README says releases every couple of weeks"
    },
    "confidence": {
      "formFactor": 0.95,
      "executionModel": 0.95,
      "operability": 0.9,
      "effort": 0.8,
      "reach": 0.7,
      "editions": 0.85
    },
    "openQuestions": [
      "Does the REST API expose invoice creation and team management? Export /api/doc from a running instance to settle Reach",
      "Is the API available on Kimai Cloud plans without restriction?",
      "glazperle/kimai_mcp (34 stars, pushed 2026-08-14) exists as a third-party MCP wrapper; note it as a convenience, not the basis of operability"
    ],
    "sources": [
      {
        "url": "https://github.com/kimai/kimai",
        "foundBy": "sourcing:scheduling-staffing:curated"
      },
      {
        "url": "https://www.kimai.org/documentation/rest-api.html",
        "foundBy": "sourcing:scheduling-staffing:curated"
      },
      {
        "url": "https://www.kimai.org/documentation/configurations.html",
        "foundBy": "analysis:scheduling-staffing"
      },
      {
        "url": "https://www.kimai.cloud/",
        "foundBy": "analysis:scheduling-staffing"
      }
    ],
    "research": {
      "stage": "verified",
      "verdict": "approve",
      "reason": "Fetched .env.dist, config/packages/kimai.yaml and the local.yaml docs: local.yaml still carries real business rules (rounding, weekday rates, permission and role maps, invoice template paths, auth), which is enough for config-only. The earlier summary wrongly placed time-tracking mode, lockdown, invoice numbering and branding in local.yaml; those are System > Settings in the UI now.",
      "disputed": []
    },
    "url": "apps/kimai--kimai.html",
    "coverage": "partial",
    "paid": true,
    "source": "research/verified/kimai--kimai.json"
  }
}
