GitHunt
IM

ImShyMike/rustytime

๐Ÿ•’ blazingly fast time tracking for developers

rustytime

    rustytime

    ๐Ÿ•’ Blazingly fast time tracking for developers

Crates.io Downloads
CI Status
Version
License


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

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

Star History Chart

License

This project is licensed under the GNU AGPLv3.

Languages

Rust56.9%Svelte23.2%PLpgSQL9.9%TypeScript7.2%PowerShell0.9%Shell0.7%CSS0.4%Dockerfile0.3%JavaScript0.3%HTML0.3%

Contributors

GNU Affero General Public License v3.0
Created July 15, 2025
Updated March 4, 2026