75 releases (17 breaking)
Uses new Rust 2024
| 0.23.5 | Apr 18, 2026 |
|---|---|
| 0.23.2 | Feb 26, 2026 |
| 0.22.1 | Feb 16, 2026 |
| 0.12.3 | Dec 10, 2025 |
| 0.11.1 | Nov 30, 2025 |
#257 in Authentication
385KB
10K
SLoC
What is rustytime?
rustytime is a self-hosted, WakaTime-compatible backend
for tracking your coding time that works with any* existing WakaTime plugin!
*every plugin that allows setting custom API URLs
Features
- WakaTime Compatible — Drop-in replacement for the WakaTime API
- Fast and Memory Efficient — Built for high performance and low resource usage
- GitHub OAuth — Simple login with your GitHub account
- Data Importing — Import your existing data from Hackatime
- Observability — Built-in OpenTelemetry + Pyroscope support
- Self-Hosted — Full control over your data
Quick Start
Prerequisites
- Docker (and Docker Compose)
- GitHub OAuth App (for authentication)
1. Clone and Configure
git clone https://github.com/ImShyMike/rustytime && cd rustytime
cp .env.example .env
Edit the .env file with your GitHub OAuth credentials:
GITHUB_CLIENT_ID=your_client_id
GITHUB_CLIENT_SECRET=your_client_secret
2. Run with Docker
docker compose up
The app should now be now available at http://localhost:5173
Alternative: Run Components Separately
# Start database + backend only
docker compose up timescaledb rustytime
# Run frontend (in another terminal)
cd frontend && npm run dev
Connect Your Editor
Configure your WakaTime plugin to use rustytime:
| Environment | API URL |
|---|---|
| Local | http://localhost:3000/api/v1 |
| Hosted | https://api-rustytime.shymike.dev/api/v1 |
Most plugins support setting a custom API URL in their settings. Use your rustytime API key from the settings page.
Development
Backend (Rust)
cd rustytime
cargo run # Start server
cargo run --features seed # Start with test data (10k heartbeats)
cargo test # Run tests
cargo build --release # Production build
Frontend (SvelteKit)
cd frontend
bun dev # Start dev server
bun run build # Build
bun check # Type check
bun lint # Lint code
Observability
OpenTelemetry
Enable tracing, metrics, and logs with OpenTelemetry:
OTEL_SERVICE_NAME=rustytime-backend
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_TRACES_EXPORTER=otlp
OTEL_METRICS_EXPORTER=otlp
OTEL_LOGS_EXPORTER=otlp
Pyroscope Profiling
Enable continuous profiling:
PYROSCOPE_SERVER_URL=http://localhost:4040
PYROSCOPE_SAMPLE_RATE=99
Is this better than wakapi?
Probably not... this was just a fun side project, if you want something that's actually production ready just use Wakapi 😭
Architecture
| Component | Details |
|---|---|
| Backend | Rust, Axum, Diesel |
| Frontend | SvelteKit, TailwindCSS |
| Database | TimescaleDB (PostgreSQL) |
Star History
License
This project is licensed under the GNU AGPLv3.
Dependencies
~126MB
~2M SLoC