README.md
All in a secure way where <i>you control the data</i>.
</p> <p align="center"> <a href="https://twitter.com/ActivityWatchIt"> </a> <a href="https://github.com/ActivityWatch/activitywatch"> </a> <b> <a href="https://activitywatch.net/">Website</a> — <a href="https://forum.activitywatch.net/">Forum</a> — <a href="https://docs.activitywatch.net">Documentation</a> — <a href="https://github.com/ActivityWatch/activitywatch/releases">Releases</a> </b> <b> <a href="https://activitywatch.net/contributors/">Contributor stats</a> — <a href="https://activitywatch.net/ci/">CI overview</a> </b> </p> <p align="center"> <a href="https://github.com/ActivityWatch/activitywatch/actions?query=branch%3Amaster"> </a> <a href="https://ci.appveyor.com/project/ErikBjare/activitywatch"> </a> <a href="https://docs.activitywatch.net"> </a> <a href="https://github.com/ActivityWatch/activitywatch/releases"> </a> <a href="https://github.com/ActivityWatch/activitywatch/releases"> </a> <a href="https://discord.gg/vDskV9q"> </a> <a href="https://activitywatch.net/donate/"> </a> <a href="https://doi.org/10.5281/zenodo.4957165"> </a> </p> <!-- # TODO: Best practices badge that we should work towards, see issue #42. [](https://bestpractices.coreinfrastructure.org/projects/873) [](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2FActivityWatch%2Factivitywatch?ref=badge_shield) -->Do you want to receive email updates on major announcements?
<details> <summary>Table of Contents</summary> </details>The goal of ActivityWatch is simple: Enable the collection of as much valuable lifedata as possible without compromising user privacy.
We've worked towards this goal by creating an application for safe storage of the data on the user's local machine and as well as a set of watchers which record data such as:
It is up to you as user to collect as much as you want, or as little as you want (and we hope some of you will help write watchers so we can collect more).
<span></span> <span></span>
You can find more (and newer) screenshots on the website.
Downloads are available on the releases page.
For instructions on how to get started, please see the guide in the documentation.
Interested in building from source? There's a guide for that too.
Yes, but we found that most time trackers lack one or more important features.
Common dealbreakers:
To sum it up:
We have a plan to address all of these and we're well on our way. See the table below for our progress.
| User owns data | GUI | Sync | Open Source | |
|---|---|---|---|---|
| ActivityWatch | :white_check_mark: | :white_check_mark: | WIP, decentralized | :white_check_mark: |
| Selfspy | :white_check_mark: | :x: | :x: | :white_check_mark: |
| ulogme | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: |
| RescueTime | :x: | :white_check_mark: | Centralized | :x: |
| WakaTime | :x: | :white_check_mark: | Centralized | Clients |
| Windows | macOS | Linux | Android | iOS | |
|---|---|---|---|---|---|
| ActivityWatch | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: |
| Selfspy | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: |
| ulogme | :x: | :white_check_mark: | :white_check_mark: | :x: | :x: |
| RescueTime | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | Limited functionality |
| App & Window Title | AFK | Browser Extensions | Editor Plugins | Extensible | |
|---|---|---|---|---|---|
| ActivityWatch | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Selfspy | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: |
| ulogme | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: |
| RescueTime | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: |
| WakaTime | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | Only for text editors |
For a complete list of the things ActivityWatch can track, see the page on watchers in the documentation.
graph TD;
aw-qt[<a href='https://github.com/ActivityWatch/aw-qt'>aw-qt</a>];
aw-notify[<a href='https://github.com/ActivityWatch/aw-notify-rs'>aw-notify</a>];
aw-server[<a href='https://github.com/ActivityWatch/aw-server'>aw-server</a>];
aw-webui[<a href='https://github.com/ActivityWatch/aw-webui'>aw-webui</a>];
aw-watcher-window[<a href='https://github.com/ActivityWatch/aw-watcher-window'>aw-watcher-window</a>];
aw-watcher-afk[<a href='https://github.com/ActivityWatch/aw-watcher-afk'>aw-watcher-afk</a>];
aw-watcher-web[<a href='https://github.com/ActivityWatch/aw-watcher-web'>aw-watcher-web</a>];
aw-sync[<a href='https://github.com/ActivityWatch/aw-server-rust/tree/master/aw-sync'>aw-sync</a>];
aw-qt -- Manages --> aw-server;
aw-qt -- Manages --> aw-notify -- Queries --> aw-server;
aw-qt -- Manages --> aw-watcher-window -- Watches --> S1[Active window] -- Heartbeats --> aw-server;
aw-qt -- Manages --> aw-watcher-afk -- Watches --> S2[AFK status] -- Heartbeats --> aw-server;
Browser -- Manages --> aw-watcher-web -- Watches --> S3[Active tab] -- Heartbeats --> aw-server;
SF -- Dropbox/Syncthing/etc --> SF;
aw-server <-- Push/Pull --> aw-sync <-- Read/Write --> SF[Sync folder];
aw-server -- Serves --> aw-webui -- Queries --> aw-server;
%% User -- Interacts --> aw-webui;
%% User -- Observes --> aw-notify;
%% User -- Interacts --> aw-qt;
classDef lightMode fill:#FFFFFF, stroke:#333333, color:#333333;
classDef darkMode fill:#333333, stroke:#FFFFFF, color:#FFFFFF;
classDef lightModeLinks stroke:#333333;
classDef darkModeLinks stroke:#FFFFFF;
class A,B,C,D,E,G lightMode;
class A,B,C,D,E,G darkMode;
%% linkStyle 0 stroke:#FF4136, stroke-width:2px;
%% linkStyle 1 stroke:#1ABC9C, stroke-width:2px;
This repo is a bundle of the core components and official modules of ActivityWatch (managed with git submodule). Its primary use is as a meta-package providing all the components in one repo; enabling easier packaging and installation. It is also where releases of the full suite are published (see releases).
ActivityWatch has two server implementations:
aw-server (Python) - The current default implementationaw-server-rust - A Rust implementation that is the planned future defaultBoth provide a REST API to a datastore and query engine, and serve the web interface developed in the aw-webui project (which provides the frontend).
The REST API includes:
aw-client (Python), aw-client-js, and aw-client-rust that wrap REST endpoints for programmatic accessThe frontend (aw-webui) includes:
ActivityWatch comes pre-installed with two watchers:
aw-watcher-afk tracks the user active/inactive state from keyboard and mouse inputaw-watcher-window tracks the currently active application and its window title.There are lots of other watchers for ActivityWatch which can track more types of activity. Like aw-watcher-web which tracks time spent on websites, multiple editor watchers which track spent time coding, and many more! A full list of watchers can be found in the documentation.
aw-core - core library, provides no runnable modulesaw-client - client library, useful when writing watchers<span></span>
Want to help? Great! Check out the CONTRIBUTING.md file!
Have a question, suggestion, problem, or just want to say hi? Post on the forum!