rustytime-server

Crates.iorustytime-server
lib.rsrustytime-server
version0.18.2
created_at2025-09-21 22:26:47.587921+00
updated_at2026-01-25 00:48:51.471003+00
description🕒 blazingly fast time tracking for developers
homepagehttps://rustytime.shymike.dev
repositoryhttps://github.com/ImShyMike/rustytime
max_upload_size
id1849256
size471,299
ShyMike (ImShyMike)

documentation

README

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
npm run dev      # Start dev server
npm run build    # Production build
npm run check    # Type check
npm run 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.

Commit count: 398

cargo fmt