Skip to content

πŸ•’ blazingly fast time tracking for developers

License

Notifications You must be signed in to change notification settings

ImShyMike/rustytime

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

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.

About

πŸ•’ blazingly fast time tracking for developers

Topics

Resources

License

Stars

Watchers

Forks

Contributors 2

  •  
  •