rustytime
π blazingly fast time tracking for developers
Features
- β Time tracking
- β Stat visualization
- β WakaTime compatible
- β Fast and memory efficient
What is this?
rustytime is a WakaTime compatible backend that can be used to track time
in most apps/IDEs with any of the existing plugins! (or you could
even make your own plugin)
Local Development
# Clone the repo
$ git clone https://github.com/ImShyMike/rustytime && cd rustytime
# Copy the env file
$ cp .env.example .env
Edit your .env file to include the following:
# GitHub OAuth Settings
GITHUB_CLIENT_ID=client_id_goes_here
GITHUB_CLIENT_SECRET=client_secret_goes_here
Build & Run
# Run the full app
$ docker compose up
# OR
# Run the database + backend
$ docker compose up timescaledb rustytime
# Run the frontend
$ cd frontend && bun run dev
The app should now be available at http://localhost:5173
Seeding the DB
The seed feature can be enabled with a build flag to seed the database with a single user and 10000 fake heartbeats.
cargo run --features seed
WakaTime
When 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)
Observability (OTel + LGTM)
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:
OTEL_SERVICE_NAME=rustytime-backend
OTEL_RESOURCE_ATTRIBUTES=deployment.environment=dev,service.version=local-dev
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_TRACES_EXPORTER=otlp
OTEL_METRICS_EXPORTER=otlp
OTEL_LOGS_EXPORTER=otlp
# Only when your collector requires authentication headers (comma-separated k=v)
# OTEL_EXPORTER_OTLP_HEADERS=x-otlp-token=changeme
Profiling (Pyroscope)
If youβre also running Pyroscope for profiling, it can be enabled with:
PYROSCOPE_SERVER_URL=http://localhost:4040
PYROSCOPE_SAMPLE_RATE=99
Star History
License
This project is licensed under the GNU AGPLv3