{
  "version": "2",
  "generatedAt": "2026-11-03T22:49:39.280Z",
  "listing": {
    "slug": "traggo--server",
    "name": "Traggo",
    "tagline": "Tag-based self-hosted time tracking in Go, driven by the same GraphQL API its UI uses.",
    "shortTagline": "Tag-based time tracking in Go",
    "description": "Traggo records tagged time spans instead of tasks, with dashboards, list and calendar views, multiple themes and simple user management. It is a single Go binary with SQLite, configured through TRAGGO_* environment variables or server.ini. The Builder's schema.graphql defines mutations and queries for time spans, tags, stats, dashboards, users and device tokens; there is no separate API guide.",
    "capabilities": [
      "adaptable",
      "operable"
    ],
    "vertical": "scheduling-staffing",
    "alternativeTo": [
      "Toggl Track",
      "Clockify"
    ],
    "shape": "business-app",
    "formFactor": "web-app",
    "executionModel": "deterministic",
    "provenance": "human-written",
    "codeStack": {
      "languages": [
        "Go",
        "TypeScript"
      ],
      "frameworks": [
        "gqlgen",
        "React"
      ],
      "packageManager": "go modules",
      "database": [
        "SQLite"
      ],
      "hostingTarget": [
        "docker",
        "binary"
      ]
    },
    "modelStack": null,
    "repos": [
      {
        "url": "https://github.com/traggo/server",
        "owner": "traggo",
        "name": "server",
        "license": "GPL-3.0",
        "stars": 1623,
        "lastCommit": "2026-07-31"
      }
    ],
    "interface": {
      "kind": "api",
      "url": "https://github.com/traggo/server/blob/master/schema.graphql",
      "official": true,
      "hosted": "local"
    },
    "operability": "official",
    "recommendedWrapper": null,
    "reach": [
      {
        "job": "Start, stop and edit time spans",
        "reachable": true,
        "evidence": "schema.graphql: createTimeSpan, updateTimeSpan, stopTimeSpan, copyTimeSpan, removeTimeSpan"
      },
      {
        "job": "List time spans by date range",
        "reachable": true,
        "evidence": "schema.graphql: timeSpans(fromInclusive, toInclusive, cursor)"
      },
      {
        "job": "Define tags and bulk-replace tag values",
        "reachable": true,
        "evidence": "createTag, updateTag, removeTag, replaceTimeSpanTags, suggestTag"
      },
      {
        "job": "Aggregate statistics by tag and range",
        "reachable": true,
        "evidence": "stats(ranges, tags, excludeTags, requireTags)"
      },
      {
        "job": "Build dashboards",
        "reachable": true,
        "evidence": "createDashboard, addDashboardRange, addDashboardEntry and their update/remove pairs"
      },
      {
        "job": "Manage users",
        "reachable": true,
        "evidence": "createUser, updateUser, removeUser (ADMIN role)"
      },
      {
        "job": "Issue device tokens for API access",
        "reachable": true,
        "evidence": "schema.graphql: login(username, pass, deviceName, type, cookie: false) and createDevice return Login.token; auth/middleware.go accepts 'Authorization: traggo <token>', a traggo cookie, or a token form value"
      },
      {
        "job": "Change user settings and theme",
        "reachable": true,
        "evidence": "setUserSettings"
      },
      {
        "job": "Export to CSV or invoice",
        "reachable": false,
        "evidence": "no export or invoicing in schema.graphql or README features"
      }
    ],
    "editions": [
      {
        "name": "Free",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/traggo/server"
          },
          {
            "kind": "container",
            "url": "https://traggo.net/install/",
            "command": "docker-compose up -d"
          },
          {
            "kind": "binary",
            "url": "https://github.com/traggo/server/releases"
          }
        ]
      }
    ],
    "skills": {
      "kind": "none",
      "paths": [],
      "install": null,
      "note": "No SKILL.md, Claude Code plugin, or published skill found in the repo."
    },
    "customization": {
      "summary": "Set TRAGGO_PORT, TRAGGO_DEFAULT_USER_NAME and TRAGGO_DEFAULT_USER_PASS for first login, TRAGGO_DATABASE_CONNECTION for the SQLite path, and TRAGGO_LOG_LEVEL and TRAGGO_PASS_STRENGTH as needed, in .env, .env.local, ~/.config/traggo/server.ini or /etc/traggo/server.ini. Tags, dashboards and users are created in the UI or through GraphQL. The tag model is the customization: define a project tag, a type tag, a client tag and the reports follow.",
      "envVars": [
        "TRAGGO_PORT",
        "TRAGGO_DEFAULT_USER_NAME",
        "TRAGGO_DEFAULT_USER_PASS",
        "TRAGGO_PASS_STRENGTH",
        "TRAGGO_LOG_LEVEL",
        "TRAGGO_DATABASE_DIALECT",
        "TRAGGO_DATABASE_CONNECTION"
      ],
      "configFiles": [
        ".env.sample",
        ".env",
        ".env.local",
        "~/.config/traggo/server.ini",
        "/etc/traggo/server.ini",
        "docker-compose.yml"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "editCount": 13
    },
    "useWhen": [
      "I want the simplest possible self-hosted tracker where categories are tags I invent, not a project tree",
      "I want my agent to start and stop timers and pull weekly totals by tag over GraphQL"
    ],
    "accounts": [],
    "active": true,
    "lastActivity": "2026-07-31",
    "gotchas": [
      "GPL-3.0 copyleft",
      "SQLite is the only database dialect",
      "No clients, projects, rates, invoices or exports: it tracks time and shows statistics",
      "The GraphQL API is documented only by schema.graphql; there is no agent guide and no OpenAPI"
    ],
    "fit": {
      "adaptable": 2,
      "operable": 2
    },
    "evidence": {
      "formFactor": "README: self-hosted web UI served by the Go server",
      "executionModel": "no model SDK or AI feature",
      "operability": "schema.graphql in traggo/server documents queries and mutations including login and createDevice that return a token; endpoint is /graphql (main.go). The header format 'Authorization: traggo <token>' appears only in auth/middleware.go; traggo.net has config, install, and dev pages but no API page.",
      "effort": "traggo.net/config lists TRAGGO_* variables and the config file search order; .env.sample read this run",
      "editions": "README: self-host only; GPL-3.0",
      "active": "shortlist pushedAt 2026-07-31"
    },
    "confidence": {
      "formFactor": 0.95,
      "executionModel": 0.95,
      "operability": 0.8,
      "effort": 0.95,
      "reach": 0.85,
      "editions": 0.95
    },
    "openQuestions": [
      "The /graphql path and the 'Authorization: traggo <token>' header are only in source (main.go, auth/middleware.go); traggo.net has no API page"
    ],
    "sources": [
      {
        "url": "https://github.com/traggo/server",
        "foundBy": "sourcing:scheduling-staffing:curated"
      },
      {
        "url": "https://traggo.net/config/",
        "foundBy": "sourcing:scheduling-staffing:curated"
      },
      {
        "url": "https://github.com/traggo/server/blob/master/schema.graphql",
        "foundBy": "analysis:scheduling-staffing"
      }
    ],
    "research": {
      "stage": "verified",
      "verdict": "dispute",
      "reason": "The Builder publishes the GraphQL schema with a login mutation that returns a token, so an agent can authenticate without a browser, but the endpoint path and the Authorization header format are documented only in source. Kept official with fit 2 for a human to confirm schema-plus-source counts as documented.",
      "disputed": [
        {
          "field": "operability",
          "reason": "API is official and token-authenticated, but the transport details (/graphql, 'Authorization: traggo <token>') are in code, not docs; confirm this meets the documented-API bar"
        }
      ]
    },
    "url": "apps/traggo--server.html",
    "coverage": "partial",
    "paid": false,
    "source": "research/verified/traggo--server.json"
  }
}
