v0.13.0
These are the release notes for ActivityWatch version v0.13.0.
New to ActivityWatch? Check out the website and the README.
Installation
See the getting started guide in the documentation.
Downloads
Contributors
Thanks to everyone who contributed to this release:
@2e3s, @750, @Alwinator, @BelKed, @chaoky, @Elijah-Bodden, @ErikBjare, @hooger, @iloveitaly, @jkbh, @johan-bjareholt, @Julianoe, @nathanmerrill, @noisersup, @ochen1, @omahs, @Organoidus, @pkvach, @ShootingKing-AM, @skaparis, @skewballfox, @StefanoChiodino, @TSRBerry, @vedantmgoyal2009, @victorlin, @vieteh
Changelog
Changes since v0.12.2
Summary
- ✨ New modules are now shipped with ActivityWatch! (not yet started by default)
aw-sync
syncs your local datastore with a sync folder (default~/ActivityWatchSync
, which you can sync with Syncthing, Dropbox, etc). We encourage you to try it out and give us your feedback!aw-notify
sends you notifications about your activity, like the top categories each hour.aw-watcher-input
collects more fine-grained input activity, like mouse delta/clicks/keypresses.
- ✨ Server-side settings. Your categories and other settings are now preserved across browsers!
- 🍎 Stability improvements on macOS, tracking should now be much more reliable (hybrid polling)
- 🎨 Improvements to the dark theme
- 🐛 Fixed tracking issues on Windows for applications running with elevated permissions
- 🐛 Fixed issue on Linux/X11 where aw-watcher-window was getting stuck in a hot loop
- 🐛 Many bug fixes
- And a lot more...
📦 activitywatch
🐛 Fixes (3)
- fix(windows): re-add leading double brace to AppId (
3ada578
) - fix(windows): remove extra '{' in AppId, potentially fixing #886 (
7aeb31c
) - fix: trying to fix building extras on macOS (#935) (
2c0216d
)
🔨 Misc (7)
Click to expand
- scripts: add line with count of excluded commits in build_changelog.sh (
20649af
) - scripts: many changes to build_changelog.py (
038d48a
) - scripts: adapted build_changelog.py to work for any repo (
6b67ec6
) - test: make integration tests also run for aw-server-rust (
42187d8
) - chore: update tool versions (#940) (
de9dbad
) - docs(README): replaced occurrences of "our" (
eea6713
) - docs: added CITATION.cff (
712f45a
)
(excluded 106 less relevant commits)
📦 aw-server
✨ Features (3)
- feat: added settings endpoints (#147) (
520c77c
) - feat: added special hostname
!local
(#140) (7527c8d
) - feat: added support for bucket data object and updating bucket metadata (#128) (
8fecb98
)
🐛 Fixes (8)
Click to expand
- fix: fix a
404
error when loading the dashboard (#144) (8b2cc22
) - fix: refactor Flask init code (
b211131
) - fix: fixed updated JSON handling in Flask 2.3+ (
7f30c17
) - fix: remove unneeded dependency (#139) (
0e035c2
) - fix: removed MANIFEST.in (replaced with pyproject.toml include) (
df76a77
) - fix: changed
exit(0)
tosys.exit(0)
(64f57ae
) - fix: removed use of deprecated
log_file_json
param forsetup_logging
(99ab85d
) - fix: added ruff linting, fixed lints (
abd5b67
)
🔨 Misc (4)
- format: formatted aw-server.spec (
b686b14
) - chore: added py.typed marker file (
400a17e
) - test: improved test_settings (
60269e7
) - test: fixed test (
dc510b1
)
(excluded 46 less relevant commits)
📦 aw-server-rust
✨ Features (8)
- feat: added query function in aw-client (#477) (
c056e50
) - feat: added daemon default subcommand, syncing at 5min intervals (
5dd5f34
) - feat(sync): assume sync subcommand if none given (
ae8f7bf
) - feat(sync): moved logic in sync-test scripts into rust, enabling sync with a single command (#430) (
3ab8291
) - feat: embed webui assets into the binary (#385) (
26acc28
) - feat: split client to async and blocking (#396) (
e689636
) - feat: added special hostname
!local
(#399) (857c2a3
) - feat: allow specifying exactly which db file to sync with (
72993e7
)
🐛 Fixes (14)
Click to expand
- fix: fixed compilation warnings & deprecations (#479) (
14165e1
) - fix: fix for served paths in new aw-webui build config (no more /static/) (
f1f63c3
) - fix: added sync dir config via global
--sync-dir
cli param andAW_SYNC_DIR
env var (#457) (1b56e03
) - fix: replace panics with results & better option types (#437) (
dc70318
) - fix: set rocket_cors log level to Warn (fixes[#975](#975)) (
59ee035
) - fix(datastore): fixed deprecations in chrono (timestamp_nanos and from_utc) (
88464b5
) - fix: return null for missing settings without 404 (
d39f258
) - fix: rewrote settings logic to mimic aw-server-python behavior (#428) (
728c00e
) - fix: improve AW_WEBUI_DIR handling (#424) (
448312d
) - fix: embed files even in debug mode, minor android build script improvements, update aw-webui (
2e3298e
) - fix(android): removed use of asset_path in favor of asset_resolver (
f284213
) - fix: fixed verbose logging, added proper closing of db connections, removed NoResponse message (
c2374b5
) - fix: period_union with empty args (#366) (
1f4f07d
) - fix: Remove unwraps from filter_keyvals_regex (
bd547ad
)
🔨 Misc (10)
Click to expand
- docs(sync): updated README for aw-sync with proper usage instructions (
41b030a
) - docs: removed +nightly from example command (
6a93563
) - Remove references to nightly rust release (
01107b6
) - perf: improve performance of filter_period_intersect (#436) (
55cad4a
) - docs: removed old mention of caveats (
0240dc0
) - chore: added dist to gitignore (
9b8df05
) - docs: corrected command (#404) (
505b66a
) - refactor: moved site_data_dir and get_asset_path to dirs.rs (
5a7e84d
) - Update logging.rs (
49b2026
) - debug: redir stderr panic log to logger (
729f27b
)
(excluded 62 less relevant commits)
📦 aw-webui
✨ Features (12)
- feat: Add 'app' and 'title' fields to CSV export in Reports (#552) (
7c0761d
) - feat: added categoryQuery support on Android, fixing 'Timeline (barchart)' visualization (
0282eec
) - feat: improved timeline tooltip, including better time formatting (hide date if same day), fixes #494 (
54be44d
) - feat: redesigned timeline filter settings, hid inside (
609a7cc
) - feat: filtering clients and hosts on timeline (#502) (
d7c70b4
) - feat: added support for query caching in aw-client (#501) (
33784bd
) - feat: server-side settings (#493) (
1131f9b
) - feat: updated design of 'Raw data' (Buckets) view (#448) (
5484d68
) - feat: add productivity score for categories (#258) (
f4e0793
) - feat(wip): added bucket validator (#441) (
184cc83
) - feat(wip): added bucket merge tool (#434) (
d805a02
) - feat: show bucket data field in Bucket view (
384cb82
)
🐛 Fixes (59)
Click to expand
- fix: only save updated settings to server, store theme and landingpage in localStorage as well (#573) (
021acc4
) - fix: removed unused guard (
bf16309
) - fix: fixed test needing to await async loading of settings (
98dee43
) - fix: fixed categories and views not being stored/loaded from server-side settings (
b99efb4
) - fix: correctly convert
words
from map to array (#569) (5993db3
) - fix: dark mode (Stopwatch, Category Builder) (#570) (
8245c37
) - fix: showing of
UncategorizedNotification
(#571) (1b1209d
) - fix: correct URL encoding for category filter query params (#566) (
d3a22c2
) - fix: hopefully fixes bug in category builder for 'constructor' word (and other prototype stuff) (#565) (
9d58554
) - fix: fixes bug in category builder when word 'constructor' exists (#564) (
74b0d31
) - fix: add 'librewolf-default' browser appname (#541) (
75dc005
) - fix: add 'Arc.exe' to browser appnames (#553) (
ba148a9
) - fix: added librewolf-default browser appname (
dd37252
) - fix: move 'brave browser' browser-to-appname entries (#283) (
b867e80
) - fix: fix URL matching for toggling of dark-mode style element (#562) (
b54b5cb
) - fix: fixed dark theme toggle in webpack (
64bc94d
) - fix: added pwa manifest generation in vite (
f608a1e
) - fix: make files in ./static serve at root (harmonize webpack and vite) (
b78ad4f
) - fix: fix CSP for both vite and webpack (
8b2d886
) - fix: fixed vite builds! (
a5a6ea0
) - fix: more progress on vite builds (
b9978e3
) - fix: rename jest.config.js -> jest.config.cjs (
b62b4c3
) - fix: fixed broken icons (
0b032ec
) - fix: changed
require
toimport
(c7cdade
) - fix: Handle date clearing in Activity view (#554) (
97a1089
) - fix: converted components to typescript (#556) (
400ba07
) - fix: fixed Search view returning all events unfiltered, and converted component to typescript (#555) (
3a6a218
) - fix: use settings store to retrieve useColorFallback setting (#533) (
23df3fb
) - fix: add app name for Vivaldi on macOS (#520) (
845b12f
) - fix: made navbar menu toggler visible in dark mode (
7de395b
) - fix: open edit modal when 'Add Category' clicked (add top-level category) (
5540cb8
) - fix: fixed Score visualization on Android (
d0d3682
) - fix: reload buckets when opening Buckets view (
51330e4
) - fix: fixed IBucket.first_seen for aw-server-python (
8babe10
) - fix: never choose 'unknown' host as default for category builder (
819c4e3
) - fix: sort hosts by last_updated in buckets store, so that the first host is probably the primary one (
fcbd586
) - fix: made CSP stricter in prod (#503) (
35ad0ae
) - fix: respect request timeout setting (#979) (
e05e805
) - fix: better edge browser support (
9600814
) - fix: better librewolf browser support (#499) (
d1fb86b
) - fix: correct the regex for GIMP in default category rules (#483) (
608296f
) - fix: support Yandex browser on macOS (#490) (
62043c7
) - fix: removed unnecessary margin on small screens (
573b728
) - fix: make uncategorized notification less aggressive (
2bcd615
) - fix: support Arc browser on macOS (#473) (
cf74080
) - fix: wording s/ignore case/case insensitive/ (#478) (
f76721a
) - fix: don't get previous day for the 'Daily Timeline (Chronological)' visualization (
d2fa858
) - fix: add missing title parameter to URL of Custom Visualization (#475) (
9c84f22
) - fix: fixed bugs in PeriodUsage (wrong date labels) and TimelineBarChart (suggestedMax not set correctly) (
fb019df
) - fix: added text-shadow to improve readability on dark theme (
51b1a2e
) - fix: added link to issue for server-side settings (
1f194ff
) - fix: added multidevice support to
query_active_history
(#451) (9b387d2
) - fix: add librewolf support (#433) (
6468b39
) - fix: add mattermost to category rule Comms::IM (#363) (
6d49cd4
) - fix: add NeoChat to category rule Comms::IM (#361) (
29193cb
) - fix: adds Microsoft-edge to list of browser names (#398) (
ec4cce6
) - fix: apply typing fixes needed after updating dependencies (
ab5f598
) - fix: set uncategorized notification isVisible ratio to 0.3, disabled when category query param set (
03caaa0
) - fix: made daterange selector date-inclusive/include the day of the end date (fixes[#693](#693)) (
839366e
)
🔨 Misc (6)
- test: fixed import errors in tests (
cc82b3d
) - refactor: converted the remaining components to typescript (#558) (
3ae4060
) - Revert "fix: use settings store to retrieve useColorFallback setting (#533)" (
6bffa65
) - format: fixed formatting (
78dd436
) - test: updated test snapshot (
0244144
) - docs(README): fix typos (#421) (
7306fc1
)
(excluded 54 less relevant commits)
📦 media
🔨 Misc (1)
- docs: added README (
ae8d373
)
📦 aw-watcher-afk
🐛 Fixes (3)
- fix: add +1ms to get rid of 20s afk-events not being merged by heartbeat (#64) (
84dd679
) - fix: fixed typechecking issue (
0e356fe
) - fix: fixed lints (
575a6f5
)
(excluded 7 less relevant commits)
📦 aw-watcher-window
✨ Features (2)
- feat: added back wmi method on Windows as fallback for admin processes (#96) (
2d878c5
) - feat: added hybrid polling method for macOS (#95) (
af38b35
)
🐛 Fixes (3)
- fix: fixed lints (
310ce78
) - fix: downgrade python-xlib to 0.31 to work around #89 (
1a334d8
) - fix(macOS): guards against missing notification data (#86) (
82d9673
)
(excluded 7 less relevant commits)
📦 aw-qt
✨ Features (1)
🐛 Fixes (1)
- fix: fixed lints (
34cb4a9
)
(excluded 9 less relevant commits)
📦 aw-core
✨ Features (1)
- feat: added
update_bucket
methods to datastores, finished support for bucket 'data' attribute (#121) (c38713e
)
🐛 Fixes (10)
Click to expand
- fix: fixed log path (again) (
6adeed9
) - fix: change back to old log dir after breaking change in platformdirs, pinned platformdirs (
6b3d670
) - fix: prevent
KeyError: 'title'
infilter_keyvals_regex()
(#123) (c0bd507
) - fix: migrate to
platformdirs
from deprecatedappdirs
(#122) (ebdf2dd
) - fix: fixed bug in peewee storage where updated/migrated model was expected (
f5f3816
) - fix: removed pythonjsonlogger and json logging support (
7f494f5
) - fix: removed mongodb storage (
330b415
) - fix: fixed warnings/nits reported by ruff (
085d823
) - fix: applied black (
b6362bb
) - fix: applied black (
c193153
)
🔨 Misc (4)
- chore: release v0.5.15 (
6f5597e
) - chore: release v0.5.14 (
22deef5
) - chore: release v0.5.13 (
667e5f0
) - chore: release v0.5.12 (
64b539f
)
(excluded 15 less relevant commits)
📦 aw-client
✨ Features (3)
- feat(example): added working_hours_gspread.py example script (#81) (
c2b051e
) - feat: default to using server-side categories for queries (
75ae591
) - feat: added methods get_setting and set_setting (
858672d
)
🐛 Fixes (7)
Click to expand
- fix(examples): fixed bug where it doesn't update rows between midnight and day_offset (
7e12bf2
) - fix: added comment about categories always fetched from prod to get_classes() (
b4598ff
) - fix: added ActivityWatchClient to all (
6b04bd5
) - fix: fixed typechecking issue (
5d06b08
) - fix(examples): update merge buckets example script (#75) (
99c597b
) - fix(examples): fixed deprecated kwargs in
to_datetime
(3b4b6f0
) - fix: fixed lints and formatting (
fc83616
)
🔨 Misc (2)
(excluded 8 less relevant commits)
📦 aw-notify
✨ Features (6)
- feat: use server-side categories, invoke start as default subcommand (
4efe542
) - feat: load categories from file, added yesterday summary, misc cleanup (
1667535
) - feat: added start_new_day notification (
ff5c000
) - feat: added proper icon and media submodule (
1f4d036
) - feat: misc improvements, added hourly command (
d9e2e28
) - feat: added checkin notification (
9cecdbc
)
🐛 Fixes (10)
Click to expand
- fix: fixed AwClient initialization (respect --testing), misc cleanup (
ca1a075
) - fix: output all + top 3 top-level categories in checkin (instead of hardcoded) (
de461a9
) - fix: added potential workaround for failing NSBundle bundleIdentifier check in desktop-notifier (
c640ee3
) - fix: fixed logging (
d1d0dec
) - fix: touch init.py to fix mypy complaining (
15a5aa0
) - fix: added main.py (
350bf7c
) - fix: set positive=true for Work alert (
d88473a
) - fix: added ttl-based caching, misc fixes (
144f9c9
) - fix: set up CLI, added installation & usage to README (
139afac
) - fix: refactor (
c0f021e
)
🔨 Misc (4)
- format: run black (
cf943c2
) - chore: added .gitignore (
61fd864
) - docs: added note about macOS limitations (
1fe7cf8
) - initial commit (
4880a40
)
(excluded 7 less relevant commits)
📦 aw-watcher-input
✨ Features (2)
🐛 Fixes (8)
Click to expand
- fix: increase default poll_time to 5s, sleep such that we get even intervals (
e012b51
) - fix: fixed visualization when running on non-standard port (
c9a4052
) - fix(build): include pynput hidden imports in pyinstaller spec (#11) (
2a45376
) - fix: fixed incorrect variable name (
7791a5e
) - fix: respect testing mode (
4abce0a
) - fix: fixed incorrect parameter name 'stop' -> 'end' (
154432e
) - fix: fixed bucket not being created (
9bb85c4
) - fix: start client queue thread (fixes #10) (
5ffcacd
)
🔨 Misc (7)
Click to expand
- docs(README): added instructions for usage with aw-server-rust (
63ae7d5
) - docs(README): improved README, and some very minor changes (
408174c
) - docs(README): pug-cli package is needed for pug command used in make build (#14) (
3313b4a
) - Merge pull request #12 from ActivityWatch/dev/custom-vis (
32a717c
) - docs: use 'poetry run' to ensure command is in PATH (
714ce5f
) - docs: added screenshot and links to how it's implemented/looks in ulogme (
87d2100
) - initial commit (
a08e2e6
)
(excluded 14 less relevant commits)
Full Changelog: v0.12.2...v0.13.0