A client for the WakaTime API, covering every documented endpoint — coding statistics, summaries, durations, heartbeats, goals, insights, leaderboards, organizations, and the write operations.
This repository is a workspace containing two crates:
-
All Time Since Today —
all_time_since_today -
Commits —
commit(single),commits(paginated list),commits_all -
Custom Rules —
custom_rules,custom_rules_progress,set_custom_rules,delete_custom_rule,delete_custom_rules_progress -
Data Dumps —
data_dumps,create_data_dump -
Durations —
durations -
Editors —
editors -
External Durations —
external_durations,send_external_duration(s),delete_external_durations -
Goals —
goals(list),goal(single) -
Heartbeats —
heartbeats,send_heartbeat(s),delete_heartbeats -
Insights —
insights -
Leaders —
leaders -
Machine Names —
machine_names -
Meta —
meta -
Orgs —
orgs -
Org Custom Rules —
org_custom_rules -
Org Dashboards —
org_dashboards,org_dashboard_members -
Org Dashboard Durations —
org_dashboard_durations,org_dashboard_member_durations -
Org Dashboard Summaries —
org_dashboard_summaries,org_dashboard_member_summaries -
Private Leaderboards —
private_leaderboards,private_leaderboard_leaders -
Program Languages —
program_languages -
Projects —
projects,projects_all -
Stats —
stats -
Stats Aggregated —
stats_aggregated -
Status Bar —
status_bar_today -
Summaries —
summaries -
User Agents —
user_agents -
Users —
user
Authentication works with an API key (new_with_api_key) or an OAuth 2.0
access token (new_with_bearer_token). The write endpoints are tested
against mocks only; their request shapes follow the developer docs.
Add the dependency:
[dependencies]
waka = "0.2.0"use std::error::Error;
use waka::{SummariesOptions, WakaTimeClientBuilder};
#[tokio::main]
pub async fn main() -> Result<(), Box<dyn Error>> {
dotenvy::dotenv().ok();
let api_key = std::env::var("WAKATIME_API_KEY").expect("Missing WAKATIME_API_KEY variable");
let client = WakaTimeClientBuilder::new_with_api_key(api_key)
.with_user("sunside")
.build()?;
let summary = client
.summaries("2023-01-01", "2023-01-08", SummariesOptions::default())
.await?;
println!("{summary:?}");
Ok(())
}See examples/example.rs for all supported endpoints.
