Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions src/architecture.rst
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,10 @@ For a list of watchers, see :doc:`watchers`. For a list of importers see :doc:`i
User interfaces
---------------

ActivityWatch currently has two user interfaces, aw-qt and aw-webui.
ActivityWatch has the following user interfaces:

- :gh-aw:`aw-qt` - Manages the server and watchers to make ActivityWatch easy to use for end-users.
- :gh-aw:`aw-tauri` - An experimental alternative to aw-qt built with Tauri, which embeds aw-server-rust. Offered as a separate download starting with ``v0.14``.
- :gh-aw:`aw-webui` - Offers visualization and an overview of the database. Hosted by aw-server in the bundle.

Libraries
Expand All @@ -58,14 +59,14 @@ aw-client
Writing these clients is something we've tried to make as easy as possible by creating client libraries with a clear API.
A client could both be a watcher which sends data as well as a visualizer which fetches and presents data from the aw-server.

Currently the primary client library is written in Python (known simply as aw-client) but a client library written in JavaScript is on the way and is expected to have the same level of support in the future.
The primary client library is written in Python (known simply as aw-client), and there are also client libraries for JavaScript/TypeScript (used by aw-webui and aw-watcher-web) and Rust (used by aw-sync).

- :gh-aw:`aw-client` (Python)
- :gh-aw:`aw-client-js` (TypeScript/JavaScript, beta)
- :gh-aw:`aw-client-rust <aw-server-rust/tree/master/aw-client-rust>` (Rust, work in progress)
- :gh-aw:`aw-client-js` (TypeScript/JavaScript)
- :gh-aw:`aw-client-rust <aw-server-rust/tree/master/aw-client-rust>` (Rust)

aw-analysis
aw-research
^^^^^^^^^^^

There are also plans to create a library called :gh-aw:`aw-analysis` to aid in
different types of analysis and transformation one might want to make using ActivityWatch data.
:gh-aw:`aw-research` (formerly aw-analysis) contains tools to analyse and experiment with ActivityWatch data.
Some of what is developed there may later become ActivityWatch features.
12 changes: 5 additions & 7 deletions src/features/syncing.rst
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
Syncing
=======

Syncing is one of the most requested features for ActivityWatch. It is currently being worked on and is in a testing phase.
Syncing is one of the most requested features for ActivityWatch. Basic syncing has been available through the ``aw-sync`` module since ``v0.13.0``, and is still in beta.

You can read more about it, and how to try the early release, in the `aw-sync README <https://github.com/ActivityWatch/aw-server-rust/tree/master/aw-sync>`_.

Here is a tweet announcing the early MVP: https://twitter.com/ErikBjare/status/1519399784234246147
See :doc:`/syncing` for how it works and how to set it up, and the `aw-sync README <https://github.com/ActivityWatch/aw-server-rust/tree/master/aw-sync>`_ for details.

Old syncing prototype
---------------------

.. note:: The below details the architecture of the old syncing prototype. It is kept here for reference.
.. note:: The below details the architecture of the old syncing prototype, which predates ``aw-sync``. It is kept here for reference.

There isn't much written about syncing yet since it's not yet implemented in a stable release. However, there does exist a working proof-of-concept prototype which should be easy to implement once details have been finalized. You can read what has been discussed in this issue: https://github.com/ActivityWatch/activitywatch/issues/35
Before ``aw-sync``, syncing was explored with a proof-of-concept prototype. You can read what was discussed in this issue: https://github.com/ActivityWatch/activitywatch/issues/35

Here's a graph showing how data flows in the current syncing prototype:
Here's a graph showing how data flowed in the old syncing prototype:

.. graphviz:: syncing.dot

Expand Down
11 changes: 10 additions & 1 deletion src/privacy.rst
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ However, it's crucial to understand that:

* All data is stored locally on your device.
* We, the developers of ActivityWatch, do not have access to your data.
* ActivityWatch does not transmit your data to any external servers.
* ActivityWatch does not transmit your data to any external servers, unless you choose to use an optional feature that does so (see `Optional AI Summary`_).

Analytics
---------
Expand All @@ -31,6 +31,15 @@ Software Updates

ActivityWatch may perform HTTP requests to check for new releases on GitHub. This functionality can be disabled in the application settings.

Optional AI Summary
-------------------

Starting with v0.14, the web UI includes an optional AI Summary page. It does nothing unless you enter your own API key for a third-party AI provider (currently OpenAI or Anthropic) and choose to generate a summary.

When you generate a summary, a compact overview of your activity is sent from your browser directly to the provider you selected. It includes application names, browser domains, your category names, device hostnames, and time totals. Window titles, full URLs, and individual event timestamps are never included. You can also exclude uncategorized activity and categories you have marked as private.

This data is handled according to the selected provider's privacy policy. We, the developers of ActivityWatch, never receive it.

Data Protection
---------------

Expand Down
6 changes: 4 additions & 2 deletions src/security.rst
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,11 @@ This is actually :issue:`1` in the ActivityWatch repository. See `filtering data
Encrypting data
---------------

Encrypting old data with a password would minimize the amount of sensitive data that would be leaked in case of a breach.
Encrypting data at rest minimizes the amount of sensitive data that would be leaked if the database file is copied or stolen.

The easiest way to build this would be to write a client that takes all events older than some duration and moves it into a encrypted container. This way it wouldn't add complexity to the server code.
``aw-server-rust`` has opt-in support for encrypting its database with `SQLCipher <https://www.zetetic.net/sqlcipher/>`_. It is not included in release builds: you need to build ``aw-server-rust`` yourself with the ``encryption`` (or ``encryption-vendored``) Cargo feature, then provide the key with the ``AW_DB_PASSWORD`` environment variable or the ``--db-password`` flag. Prefer the environment variable, since command-line arguments may be visible in process listings.

Encryption at rest does not protect against anything that can access the running server's API.


Reproducible builds
Expand Down
2 changes: 2 additions & 0 deletions src/syncing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ Syncing

ActivityWatch has basic support for syncing your data across multiple devices using the ``aw-sync`` module since ``v0.13.0``. It works by creating a "staging" database file in a device-specific folder in the sync directory (default is ``~/ActivityWatchSync``), which is then synced to the other devices using a file syncing tool of your choice (like Syncthing, rsync, Dropbox, or Google Drive). So ``aw-sync`` does not itself send data over the network, but instead relies on you using a file syncing tool to do that.

Starting with ``v0.14``, the ``aw-sync`` daemon only pushes this device's data to the sync directory by default. To also import data from your other devices, set ``pull = true`` in ``aw-sync/config.toml`` in the :ref:`config directory <config-directory>` (the file is created with commented-out defaults the first time the daemon runs). Running ``aw-sync sync`` manually still both pulls and pushes.

Android
-------

Expand Down
Loading