Skip to content
 
 

Latest commit

 

History

1,054 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ActivityWatch

The free and open-source automated time tracker.
Records what you do so that you can know how you've spent your time.
All in a secure way where you control the data.

Build Status Documentation Latest release Downloads Discord DOI

Star on GitHub Follow on Twitter

Website · Documentation · Downloads · Forum · Discord


What is ActivityWatch?

ActivityWatch is an app that automatically tracks how you spend time on your computer. It records:

  • Active application & window title — know exactly which app and document you were using
  • Browser tab & URL — see how much time you spend on each website
  • AFK detection — tracks keyboard/mouse activity to know when you're actually at the computer

All data stays on your machine. No cloud, no accounts, no telemetry. You own it.

Why ActivityWatch?

Problem ActivityWatch's answer
Privacy concerns All data stored locally, open source, fully auditable
Manual time tracking Fully automatic — install and forget
Hard to extend REST API, client libraries, plugin ecosystem
Platform lock-in Windows, macOS, Linux (and Android)
Low data resolution Stores raw events, queryable with a built-in query language

Feature comparison

Basics

Owns data GUI Sync Open source
ActivityWatch ✅ ✅ WIP, decentralized ✅
Selfspy ✅ ❌ ❌ ✅
ulogme ✅ ✅ ❌ ✅
RescueTime ❌ ✅ Centralized ❌
WakaTime ❌ ✅ Centralized Clients only

Platforms

Windows macOS Linux Android
ActivityWatch ✅ ✅ ✅ ✅
Selfspy ✅ ✅ ✅ ❌
ulogme ❌ ✅ ✅ ❌
RescueTime ✅ ✅ ✅ ✅

Tracking capabilities

App & Window AFK Browser ext. Editor plugins Extensible
ActivityWatch ✅ ✅ ✅ ✅ ✅
Selfspy ✅ ✅ ❌ ❌ ❌
RescueTime ✅ ✅ ✅ ❌ ❌
WakaTime ❌ ✅ ✅ ✅ Editors only

For the complete list of watchers and integrations, see the documentation.

Installation

Download the latest release for your platform from the releases page.

For step-by-step instructions, see the getting started guide.

Build from source

See the installing from source guide.

Prerequisites:

  • Python 3.8+ and pip
  • Node.js (for the web UI)
  • Rust toolchain (optional, for aw-server-rust)
  • Poetry (Python dependency management)
git clone https://github.com/ActivityWatch/activitywatch.git
cd activitywatch
git submodule update --init --recursive
make build

Architecture

graph TD;
  aw-qt["<b>aw-qt</b><br/>Tray app & process manager"];
  aw-notify["<b>aw-notify</b><br/>Notifications"];
  aw-server["<b>aw-server</b><br/>Data store & REST API"];
  aw-webui["<b>aw-webui</b><br/>Web dashboard"];
  aw-watcher-window["<b>aw-watcher-window</b><br/>Window tracking"];
  aw-watcher-afk["<b>aw-watcher-afk</b><br/>AFK detection"];
  aw-watcher-web["<b>aw-watcher-web</b><br/>Browser extension"];
  aw-watcher-input["<b>aw-watcher-input</b><br/>Input statistics"];
  aw-sync["<b>aw-sync</b><br/>Multi-device sync"];

  aw-qt -- Manages --> aw-server;
  aw-qt -- Manages --> aw-notify -- Queries --> aw-server;
  aw-qt -- Manages --> aw-watcher-window -- Heartbeats --> aw-server;
  aw-qt -- Manages --> aw-watcher-afk -- Heartbeats --> aw-server;
  aw-qt -- Manages --> aw-watcher-input -- Heartbeats --> aw-server;
  Browser -- Manages --> aw-watcher-web -- Heartbeats --> aw-server;
  aw-server <-- Push/Pull --> aw-sync;
  aw-server -- Serves --> aw-webui;
Loading

Components

Component Language Description
aw-server Python Default server — REST API, datastore, and query engine
aw-server-rust Rust High-performance server implementation (planned default)
aw-webui TypeScript/Vue Web dashboard for visualizing activity data
aw-qt Python System tray app that manages all components
aw-watcher-window Python Tracks active application and window title
aw-watcher-afk Python Detects AFK state from keyboard/mouse input
aw-watcher-input Python Collects keyboard/mouse input statistics
aw-watcher-web JS Browser extension tracking active tab and URL
aw-notify Python Desktop notifications based on activity rules
aw-core Python Core library with shared data models and utilities
aw-client Python Client library for the REST API

REST API

The server exposes a REST API with:

  • Buckets API — create, retrieve, and delete data buckets (containers for related activity data)
  • Events API — read and write timestamped events within buckets
  • Heartbeat API — watchers send heartbeat signals to update current activity state
  • Query API — built-in query language for filtering, merging, grouping, and transforming events
  • Export — export activity data in JSON format (individual buckets or complete datasets)

Client libraries: aw-client (Python), aw-client-js (JS), aw-client-rust (Rust)

Web UI

The built-in web dashboard (aw-webui) provides:

  • Activity timeline — visual overview of your day with app usage breakdowns
  • Query explorer — write and execute queries in the browser
  • Category rules — define custom categories to group activities
  • Raw data browser — inspect individual events across all buckets

About this repository

This is the bundle repository that brings all ActivityWatch components together via git submodules. It serves as:

  • A meta-package for building and packaging the full suite
  • The home of release artifacts (releases page)
  • A central place for cross-cutting concerns (CI, packaging scripts, integration tests)

Quick developer commands

make build          # Build everything (installs Python modules, builds web UI)
make test           # Run test suite across all submodules
make lint           # Lint all submodules
make typecheck      # Type-check all submodules
make update         # Pull latest and rebuild
make clean          # Remove build artifacts

Set AW_EXTRAS=true to also build aw-notify and aw-watcher-input. Set SKIP_SERVER_RUST=true to skip the Rust server.

Interactive walkthrough

Explore the codebase interactively on CodeCanvas.

CodeCanvas interactive walkthrough

Contributing

Contributions are welcome! See CONTRIBUTING.md for guidelines.

Good places to start:

Questions & support

Support the project

License

Licensed under MPL-2.0. Free to use, modify, and distribute.


Built with ❤️ by the ActivityWatch community

About

The best free and open-source automated time tracker. Cross-platform, extensible, privacy-focused.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages