Start a timer, tag it to a project or client, stop it, see where your time actually goes. Toggl charges $9/mo. This is a binary with a dashboard. For freelancers who invoice by the hour.
Every operation in Sundial is available through a JSON REST API. No SDK required — use curl, fetch, or any HTTP client.
GET /api/time_entries — list all time_entries with optional search and filter query parametersPOST /api/time_entries — create a new timeentry recordGET /api/time_entries/{id} — retrieve a single timeentry by IDPUT /api/time_entries/{id} — update an existing timeentryDELETE /api/time_entries/{id} — remove a timeentryGET /api/stats — aggregated statisticsGET /api/health — health check endpoint for monitoringA regulated company runs Sundial inside their air-gapped network. No data leaves the building. Compliance auditors can inspect the SQLite file directly. When the team needs a report, they query the API and format the output however the auditor expects.
When regulators or clients ask where your time entries data is stored, the best answer is a specific server you own in a specific jurisdiction you chose. Sundial makes that answer straightforward because the data never leaves your infrastructure.
GET /api/time_entries — List all time entries. Supports ?q=keyword for searchPOST /api/time_entries — Create a new timeentry. Send JSON with at least descriptionGET /api/time_entries/{id} — Fetch one timeentry by IDPUT /api/time_entries/{id} — Update fields on an existing timeentryDELETE /api/time_entries/{id} — Remove a timeentryGET /api/stats — Returns total countGET /api/health — Returns {"status":"ok"} for uptime monitoringEach timeentry record carries fields for description, project, task, duration, start time. The API accepts partial updates, so you can PATCH individual fields without resubmitting the entire record. Listing endpoints support ?q= for keyword search and ?status= for filtering. Backups are a file copy of the SQLite database in the data directory.
Self-hosted time tracker. Self-hosted on your infrastructure. Your data never leaves your server.
curl -fsSL https://stockyard.dev/install.sh | sh -s -- --tool sundial
PORT=9890 ./sundial
http://localhost:9890
Single binary. Embedded SQLite. No Docker. No database. No dependencies.
Your license key arrives by email within 5 minutes of checkout. Set it as an environment variable and restart the binary.
export SUNDIAL_LICENSE_KEY=stockyard_xxxxxxxxxxxxxxxxxxxx ./sundial
No cloud connectivity required. The binary validates the key offline with Ed25519 signatures.