π blazingly fast time tracking for developers
- β Time tracking
- β Stat visualization
- β WakaTime compatible
- β Fast and memory efficient
rustytime is a WakaTime compatible server that can be used to track time in most apps with any of the existing plugins!
# Clone the repo
$ git clone https://github.com/ImShyMike/rustytime && cd rustytime
# Copy the env file
$ cp .env.example .envEdit your .env file to include the following:
# GitHub OAuth Settings
GITHUB_CLIENT_ID=client_id_goes_here
GITHUB_CLIENT_SECRET=client_secret_goes_here# Run the full app
$ docker compose up
# OR
# Run the databse + backend
$ docker compose up timescaledb rustytime
# Run the frontend
$ cd frontend && bun run devThe app should now be available at http://localhost:5173
If you're running the self-hosted Grafana LGTM (Loki/Grafana/Tempo/Mimir) stack or an OpenTelemetry Collector on the same machine, expose its OTLP receiver (default gRPC on 4317). Then add the following to your .env (already scaffolded in .env.example):
OTEL_SERVICE_NAME=rustytime-server
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://127.0.0.1:4317
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=grpc
OTEL_RESOURCE_ATTRIBUTES=deployment.environment=development
# Only when your collector requires authentication headers (comma-separated k=v)
# OTEL_EXPORTER_OTLP_HEADERS=x-otlp-token=changemeRestart the backend (cargo run) after updating the env vars. The warning about missing OTEL exporter configuration disappears, and spans begin flowing into Tempo. From there you can wire Grafana dashboards against the same Tempo instance alongside your LGTM stack.
The seed feature can be enabled in the build to seed the database with a single user and 10000 heartbeats.
cargo run --features seedWhen using a WakaTime client, point your requests to http://localhost:3000/api/v1 (or https://api-rustytime.shymike.dev/api/v1 if using the deployed version)
This project is licensed under the GNU AGPLv3