Simple desktop 🖥️ application to track your time ⏰ spent on different projects 🎉.
By default, there is no configuration file. The application will NOT create one!
If you want to change the default configuration, you have to create the configuration file yourself.
The configuration file should be located at:
- Linux:
~/.config/timetrack/config.yaml. - Mac:
~/Library/Application Support/timetrack/config.yaml. - Windows:
%APPDATA%\timetrack\config.yaml.
Note
Example configuration file for timetrack:
# yaml-language-server: $schema=https://timetrack.gaia.ws/config.schema.json
---
databases:
- marco: /home/marco/Desktop/timetrack.db
- work: /home/marco/Desktop/timetrack-work.dbIf no configuration file is present, the default database location is:
- Linux:
~/.local/share/timetrack/timetrack.db - Mac:
~/Library/Application Support/timetrack/timetrack.db - Windows:
%LOCALAPPDATA%\timetrack\timetrack.db
Time entries can be pushed to Tempo for specific companies.
Sync is manual and one-way (timetrack → Tempo).
config.yaml stays commit-safe;
tokens live in a machine-local sync.yaml next to the default database.
| File | Location (Linux) | Role |
|---|---|---|
config.yaml |
~/.config/timetrack/ |
Portable settings (databases only). Safe to version. |
sync.yaml |
~/.local/share/timetrack/ |
Tempo/Jira connections and secrets. Not for git. Prefer mode 600. |
Other OS paths for sync.yaml:
- macOS:
~/Library/Application Support/timetrack/sync.yaml - Windows:
%LOCALAPPDATA%\timetrack\sync.yaml
The app does not create sync.yaml. If the file is missing, Tempo stays disabled.
Cloud sync needs two tokens: a Tempo API token to write worklogs,
and a Jira API token to resolve issue keys (PROJ-42 → numeric id) and
your Atlassian account id.
Tempo does not use your Jira API token. Create a Tempo API Integration token:
- Open Tempo in Jira (Tempo sidebar).
- Go to Settings → Data Access → API Integration.
- Click New Token.
- Name it (for example
timetrack), set an expiry (default is 30 days; you can choose longer). - Under access scope, either choose full access, or custom access with Worklogs -> Manage (needed to create and update worklogs). View-only is not enough.
- Confirm, then copy the token immediately. Tempo shows it only once. If you lose it, regenerate the token (that invalidates the old one).
Paste that value into tempoToken. Official guide: Using REST API integrations.
- Sign in at Atlassian API tokens.
- Click Create API token (not “Create API token with scopes”).
- Name it (for example
timetrack) and set an expiry. - Copy the token immediately. Atlassian will not show it again.
- Put your Atlassian account email in
jiraEmailand the token injiraApiToken.
Use an unscoped token.
Scoped tokens only work against https://api.atlassian.com/ex/jira/{cloudId}/...,
which this integration does not use.
Official guide: Manage API tokens for your Atlassian account.
Your Jira user must be allowed to log time on the issues you sync.
Data Center uses one credential pair for both Jira and Tempo (jiraUsername + jiraToken).
Prefer a Personal Access Token over your password:
- In Jira Data Center, open your profile and go to Personal Access Tokens.
- Create a token named
timetrackwith an expiry. - Copy it once, then put your Jira username in
jiraUsernameand the PAT injiraToken.
The account needs permission to view issues and log work (Tempo Timesheets).
If PATs are disabled on your instance, jiraToken can be the account password instead.
# ~/.local/share/timetrack/sync.yaml - not for git
tempo:
connections:
- name: acme
edition: cloud
jiraBaseUrl: https://acme.atlassian.net
tempoToken: TEMPO_CLOUD_TOKEN
jiraEmail: you@example.com
jiraApiToken: ATLASSIAN_API_TOKEN
- name: onprem
edition: datacenter
jiraBaseUrl: https://jira.example.com
jiraUsername: you
jiraToken: PAT_OR_PASSWORDThen, in the app:
- Edit a company and choose a Tempo connection.
- Set an optional issue key on a task definition (copied onto new timers) or on each time entry.
- Click Sync to Tempo on that company.
Completed, non-zero entries with an issue key are created or updated as Tempo worklogs. Running timers, zero-duration rows, and entries without an issue key are skipped. Remote worklogs are not deleted if a local entry is removed.
Checkout the development guide for more information.
