This is the canonical list of where to get and install TimeTracker. Pick the path that matches your environment.
| I want to… | Go here |
|---|---|
| Run on a NAS (QNAP, Synology, Portainer) | NAS Deployment Guide + docker-compose.nas.yml |
| Pull a Docker image | Docker Hub or docker pull ghcr.io/drytrix/timetracker:latest |
| Deploy on a server with Docker Compose | INSTALLATION.md |
| One-click cloud deploy | Render · DigitalOcean · Railway · Fly.io · Coolify |
| Install from Unraid Community Apps | Unraid |
| Add to Portainer App Templates | Portainer |
| Download desktop/mobile clients | GitHub Releases |
Official multi-arch images (linux/amd64, linux/arm64) are built on every release.
docker pull ghcr.io/drytrix/timetracker:latest
docker pull ghcr.io/drytrix/timetracker:v5.12.0 # specific versionRepository: hub.docker.com/r/drytrix/timetracker
docker pull drytrix/timetracker:latestNote: The Docker Hub namespace moved from
driesp/timetrackertodrytrix/timetracker. Update any scripts or bookmarks that used the old URL.
If Docker Hub is unavailable, use GHCR.
docker pull ghcr.io/drytrix/timetracker:developUse with docker/docker-compose.remote-dev.yml.
| File | Use case |
|---|---|
docker-compose.nas.yml |
NAS, Portainer web editor, simple HTTP (app + Postgres) |
docker/docker-compose.remote.yml |
Production HTTPS with nginx (requires git clone) |
docker-compose.example.yml |
Simple HTTP from cloned repo |
GitHub Release docker-compose.production.yml |
Full production stack artifact |
GitHub Release docker-compose.nas.yml |
NAS stack artifact (same as repo file) |
curl -fsSL -o docker-compose.nas.yml \
https://raw.githubusercontent.com/drytrix/TimeTracker/main/docker-compose.nas.yml
echo "SECRET_KEY=$(openssl rand -hex 32)" > .env
docker compose -f docker-compose.nas.yml up -dRaw compose URL (for pasting into NAS UIs):
https://raw.githubusercontent.com/drytrix/TimeTracker/main/docker-compose.nas.yml
Each release includes:
docker-compose.production.yml— full production stackdocker-compose.nas.yml— NAS-friendly stackk8s-deployment.yml— basic Kubernetes manifest- Desktop installers (Windows
.exe, Linux.AppImage/.deb, macOS.dmg) when CI succeeds - Mobile builds (Android APK/AAB, iOS simulator zip) when CI succeeds
Download: github.com/drytrix/TimeTracker/releases
Add TimeTracker to Portainer's template catalog:
- In Portainer, go to Settings → App Templates
- Set App Templates URL to:
https://raw.githubusercontent.com/drytrix/TimeTracker/main/templates/portainer/templates.json - Refresh App Templates and deploy TimeTracker
Template definition: templates/portainer/templates.json
See also: Portainer Deployment Guide
Template XML files live in templates/unraid/:
| Template | File |
|---|---|
| PostgreSQL database | templates/unraid/timetracker-db.xml |
| TimeTracker app | templates/unraid/timetracker-app.xml |
- Copy both XML files to
/boot/config/plugins/dockerMan/templates-user/on your Unraid server - In Docker → Add Container, pick TimeTracker-DB first, deploy
- Add TimeTracker app container on the same custom network (
timetracker) - Set
SECRET_KEY(generate withopenssl rand -hex 32)
Submit the template-only branch unraid-ca (not main/develop). Default branches include Android and other XML that CA flags as not_unraid_application.
- Use the copy-paste package in
docs/marketing/UNRAID_CA_SUBMIT.md - Go to ca.unraid.net/submit (Unraid account required)
- Repository:
https://github.com/DRYTRIX/TimeTracker· Branch:unraid-ca - Run Validate, then Scan
- Wait for moderator review (typically 1–2 weeks)
A duplicate warning for postgres:16-alpine is expected (official Postgres image already in CA).
Branch contents: unraid-ca · manual templates also in templates/unraid/
One-click Blueprint deploy (PostgreSQL + web service from GHCR image):
Blueprint file: render.yaml · Guide: docs/deploy/RENDER.md
One-click App Platform deploy (Docker Hub image + Dev Database):
Template: .do/deploy.template.yaml · Guide: docs/deploy/DIGITALOCEAN.md
Dev Database is for trials; use managed Postgres or self-host for production.
Manual (works today):
- Create a new project at railway.app
- Add a PostgreSQL plugin
- Add a Docker image service:
ghcr.io/drytrix/timetracker:latest - Set environment variables (see
railway.toml) - Set
DATABASE_URLfrom the Postgres plugin connection string
One-click: publish a Railway marketplace template (app + Postgres), then add the Deploy button — full steps in docs/deploy/RAILWAY.md.
# Requires external Postgres (Fly Postgres, Neon, etc.)
fly launch --no-deploy --image ghcr.io/drytrix/timetracker:latest
fly secrets set SECRET_KEY="$(openssl rand -hex 32)" DATABASE_URL="postgresql://..."
fly deployConfig: fly.toml
- In Coolify, create a new Docker Compose resource
- Set Repository URL to
https://github.com/drytrix/TimeTracker - Set Compose file to
docker-compose.nas.yml - Add environment variable
SECRET_KEY(generate withopenssl rand -hex 32) - Deploy
Coolify pulls the compose file from Git and uses the prebuilt GHCR image — no local build.
Server Docker images do not include desktop or mobile apps. Client binaries are published on GitHub Releases when CI builds succeed.
Build from source: see desktop/README.md and mobile/README.md.
QNAP App Center and Synology Package Center require native packages (QPKG/SPK), not Docker Compose alone. Until those packages exist, use:
- NAS Deployment Guide — Container Station / Container Manager
- This page — compose file + Docker image
Track demand via GitHub issues labeled platform:nas before investing in native packaging.
On each release, maintainers should:
- Verify GHCR and Docker Hub images published (CI:
cd-release.yml) - Verify Docker Hub description was auto-updated from
docker/hub-README.md(cd-release.yml) - Confirm GitHub Release includes
docker-compose.nas.yml - Re-test Portainer template URL and Unraid XML if compose changed
See Release Process for the full checklist.