These are the release notes for ActivityWatch version v0.14.0b2.
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:
@0xbrayo, @2e3s, @amsam0, @ErikBjare, @fanxing11, @musicinmybrain, @TimeToBuildBob
Changelog
Changes since v0.14.0b1:
📦 activitywatch
✨ Features (1)
🐛 Fixes (10)
Click to expand
- fix(ci): bump MACOSX_DEPLOYMENT_TARGET from 10.9 to 12.0 (#1363) (
bb19d73) - fix(ci): use team ID for notarytool keychain profile name (#1362) (
8e04c7d) - fix(ci): ignore pytest 9 until Python 3.10 (#1346) (
c85c3a7) - fix(ci): sign macOS artifacts only on release tags (#1348) (
ab38e31) - fix(scripts): replace deprecated pip --format=legacy with freeze in uninstall.sh (#1344) (
a2eb69d) - fix(ci): build Qt AppImage on Ubuntu 22.04 (#1345) (
09bc42b) - fix(ci): pin GitHub Actions to commit SHAs (supply chain hardening) (#1322) (
b2cd444) - fix(deps): unblock pip security updates (#1321) (
18dd98c) - fix(ci): pin WebKit to 2.44.0-2 to fix blank-webview regression on Linux (#1311) (
bf66fa6) - fix(ci): follow higher prerelease line when one already exists (#1308) (
fa69210)
🔨 Misc (2)
- [codex] fix(ci): resolve macOS codesign identity from imported cert (#1337) (
b32338d) - refactor(ci): unify release workflows (#1313) (
634bb51)
(excluded 11 less relevant commits)
📦 aw-server
🐛 Fixes (1)
(excluded 2 less relevant commits)
📦 aw-webui
✨ Features (6)
- feat(i18n): add vue-i18n with en, uk, de, ru, zh-CN locales (#896) (
948be8d) - feat(ui): pre-release polish pass — bug fixes, tests, and view-level revamps (#857) (
dc02ac8) - feat(home): add r/activitywatch community links (#854) (
363e1c7) - feat(settings): add privacy filter editor (#830) (
6516230) - feat: add saved query presets to Query Explorer (#829) (
f52008f) - feat(buckets): bulk delete buckets by host (closes #662) (#821) (
b8ec3c0)
🐛 Fixes (26)
Click to expand
- fix(build): allow root git dependencies for npm >= 12 (fixes activitywatch#1356) (#913) (
749585f) - fix(buckets): show phone icon for Android devices in Raw Data view (#905) (
5799225) - fix(activity): detect Android device at runtime for view selection (#903) (
de79efe) - fix(categories): allocate safe numeric ID when class list is empty (#892) (
0c0b846) - fix(deps): resolve 16 npm audit vulnerabilities via audit fix (#893) (
122a2ca) - fix(i18n): use Intl.DateTimeFormat for locale-aware date/time display (#894) (
17d4a4b) - fix(buckets): surface real server error message on import failure (#890) (
f24f6e9) - fix(tests): skip cross-locale assertions when Node lacks full-icu (#884) (
5b77a78) - fix(deps): override esbuild to patched version (#867) (
38fcf69) - fix(activity): revert timeline_barchart as wide vis — breaks default 3-vis layout (#863) (
8768475) - fix(timeline): keep scroll zoom anchored to cursor (#860) (
53b1499) - fix(activity): widen timeline barchart card (
89d8a77) - fix(deps): override vulnerable d3-color (#858) (
afa1e61) - fix(score): show selected period label (#845) (
5c04d24) - fix(categories): keep durations readable for long names (#843) (
c72fffa) - fix(timeline): localize chart date labels (#825) (
adbddb4) - fix(ci): restore PAT for dependabot auto-merge (#837) (
475442e) - fix(query-explorer): solid Rename/Delete buttons for saved queries (#835) (
0072d36) - fix(ui): replace
<wbr>with zero-width space in timeline labels, move bulk-delete to dropdown (#834) (0db3447) - fix(ci): skip unused setup-cml Vega install (#832) (
266b20b) - fix(deps): remove obsolete Vue CLI Jest plugin (#833) (
ddbb4f8) - fix(ci): repair dependabot automation (#828) (
62ee4ed) - fix: remove deprecated keyboard option from vis-timeline (#826) (
18a3946) - fix(timeline): wrap long bucket labels on narrow screens (#822) (
af1f3fd) - fix(settings): prevent null localStorage values from overriding state defaults (#815) (
8d9a7f8) - fix(views): use queryOptions.start for +1 week button (closes #817) (#819) (
907959c)
🔨 Misc (2)
- chore: bump media submodule (
0a43547) - test(timeline): add regression tests for cursor-anchored zoom (#847) (#866) (
9cdc708)
(excluded 7 less relevant commits)
📦 media
🔨 Misc (1)
- docs: added LICENSE (
a451514)
📦 aw-server-rust
✨ Features (4)
- feat(android): add migration for aw-watcher-android-test bucket names (#628) (
c022e85) - feat(datastore): add opt-in SQLCipher encryption support (#584) (
af324f9) - feat(server): add --config override for server config path (#601) (
c82981d) - feat(privacy-filter): add heartbeat-level privacy filtering engine (#600) (
df49b3d)
🐛 Fixes (8)
Click to expand
- fix(android): update JNI androidQuery bucket name to aw-watcher-android (#632) (
0094c14) - fix(sync): chunk event fetch in sync_one() to prevent OOM on large buckets (#631) (
d87bd93) - fix(deps): upgrade reqwest 0.11 → 0.12 to fix rustls-webpki vulnerability (#617) (
6f6c64a) - fix(ci): harden dependabot automerge workflow (#611) (
288decb) - fix(android): make compile-android.sh cwd-safe (#609) (
7812b56) - fix(android): load embedded server config (#608) (
0c8b2ad) - fix(aw-client-rust): fail on non-2xx responses (#607) (
73389bc) - fix(query): support select_keys in regex rules (#605) (
5b3f0f8)
🔨 Misc (5)
- perf: cache compiled regex in categorization rules (#634) (
d350f42) - aw-sync: add --mode to daemon, fix unrespected --start-date (#620) (
9e771ef) - chore: bump webui submodule (
c665f2d) - perf(datastore): enable WAL journal mode (#616) (
d7349c2) - Performance improvements (#615) (
73ae710)
(excluded 10 less relevant commits)
📦 aw-webui
✨ Features (6)
- feat(i18n): add vue-i18n with en, uk, de, ru, zh-CN locales (#896) (
948be8d) - feat(ui): pre-release polish pass — bug fixes, tests, and view-level revamps (#857) (
dc02ac8) - feat(home): add r/activitywatch community links (#854) (
363e1c7) - feat(settings): add privacy filter editor (#830) (
6516230) - feat: add saved query presets to Query Explorer (#829) (
f52008f) - feat(buckets): bulk delete buckets by host (closes #662) (#821) (
b8ec3c0)
🐛 Fixes (26)
Click to expand
- fix(build): allow root git dependencies for npm >= 12 (fixes activitywatch#1356) (#913) (
749585f) - fix(buckets): show phone icon for Android devices in Raw Data view (#905) (
5799225) - fix(activity): detect Android device at runtime for view selection (#903) (
de79efe) - fix(categories): allocate safe numeric ID when class list is empty (#892) (
0c0b846) - fix(deps): resolve 16 npm audit vulnerabilities via audit fix (#893) (
122a2ca) - fix(i18n): use Intl.DateTimeFormat for locale-aware date/time display (#894) (
17d4a4b) - fix(buckets): surface real server error message on import failure (#890) (
f24f6e9) - fix(tests): skip cross-locale assertions when Node lacks full-icu (#884) (
5b77a78) - fix(deps): override esbuild to patched version (#867) (
38fcf69) - fix(activity): revert timeline_barchart as wide vis — breaks default 3-vis layout (#863) (
8768475) - fix(timeline): keep scroll zoom anchored to cursor (#860) (
53b1499) - fix(activity): widen timeline barchart card (
89d8a77) - fix(deps): override vulnerable d3-color (#858) (
afa1e61) - fix(score): show selected period label (#845) (
5c04d24) - fix(categories): keep durations readable for long names (#843) (
c72fffa) - fix(timeline): localize chart date labels (#825) (
adbddb4) - fix(ci): restore PAT for dependabot auto-merge (#837) (
475442e) - fix(query-explorer): solid Rename/Delete buttons for saved queries (#835) (
0072d36) - fix(ui): replace
<wbr>with zero-width space in timeline labels, move bulk-delete to dropdown (#834) (0db3447) - fix(ci): skip unused setup-cml Vega install (#832) (
266b20b) - fix(deps): remove obsolete Vue CLI Jest plugin (#833) (
ddbb4f8) - fix(ci): repair dependabot automation (#828) (
62ee4ed) - fix: remove deprecated keyboard option from vis-timeline (#826) (
18a3946) - fix(timeline): wrap long bucket labels on narrow screens (#822) (
af1f3fd) - fix(settings): prevent null localStorage values from overriding state defaults (#815) (
8d9a7f8) - fix(views): use queryOptions.start for +1 week button (closes #817) (#819) (
907959c)
🔨 Misc (2)
- chore: bump media submodule (
0a43547) - test(timeline): add regression tests for cursor-anchored zoom (#847) (#866) (
9cdc708)
(excluded 7 less relevant commits)
📦 media
🔨 Misc (1)
- docs: added LICENSE (
a451514)
📦 aw-watcher-afk
✨ Features (1)
🐛 Fixes (4)
- fix: restart gamepad listener when its threads die (#82) (
b61b7f9) - fix: auto-recover input listeners after X server restart (#78) (
7c5b19f) - fix: detect parent death by ppid change instead of ppid==1 (#77) (
94f88e3) - fix(windows): use GetTickCount64 to prevent overflow after 49.7 days (#76) (
2d4519c)
📦 aw-watcher-window
✨ Features (1)
🐛 Fixes (4)
- fix: target macOS 14 for swift helper (#126) (
288b67f) - fix(ci): use 'poetry run' in test target + run typecheck (#129) (
fd5cfcb) - fix(windows): handle hwnd==0 gracefully for UAC/secure desktop (#118) (
61b482b) - fix(xlib): handle None return from get_wm_name() on KDE Plasma (#115) (
9e8fba1)
🔨 Misc (1)
📦 aw-core
✨ Features (1)
- feat(transform): add merge_subwatcher_fields for editor/browser field enrichment (
662aba1)
🐛 Fixes (8)
Click to expand
- fix(query): expose pulsetime param in q2_flood (#142) (
c4d31b8) - fix: regenerate poetry.lock to match pyproject.toml (#140) (
a4d2064) - fix(transform): prefer latest overlapping subwatcher event (
e83b17f) - fix(query2): normalize merge_subwatcher_fields conflict errors (
5823d15) - fix(transform): collapse adjacent split segments (
c46cd00) - fix(transform): split subwatcher enrichment by overlap (
a397b0d) - fix(transform): address Greptile P1/P2 findings on merge_subwatcher_fields (
e78081b) - fix: use UTC-aware datetime for bucket.created and event.timestamp defaults (#136) (
2859a09)
🔨 Misc (1)
📦 aw-client
🐛 Fixes (3)
- fix(queue): warn before connect and create buckets immediately (#112) (
b2ddb46) - fix: use f-string for browser query so default_limit is interpolated (#110) (
14e7497) - fix: escape_doublequote was using JS regex syntax, never matched anything (#109) (
a53cebe)
📦 aw-notify
✨ Features (3)
- feat: support --config and -c flags for config path (
f3ff5e8) - feat: various performance improvements (
6881394) - feat: display previous day productivity-scores (
f529c70)
🐛 Fixes (1)
- fix: log fatal errors (
375cd53)
📦 aw-tauri
✨ Features (3)
- feat: module_args for default args for non-autostart args (
06e70b0) - feat(cli): add --daemon and --mini modes for headless/lightweight operation (#224) (
0ea13c9) - feat(auth): bootstrap aw-webui token on launch (#216) (
10322dc)
🐛 Fixes (6)
- fix: don't re-inject aw-notify flags on restart (
5152d3a) - fix: warn instead of silently dropping unparsable module args (
3f656f8) - fix: escape TOML string values in generated config (
490164e) - fix: silence unused_mut clippy warning in mini tray builder (
b8c9c52) - fix: change identifier in tauri configuration to net.activitywatch.tauri (#214) (
f12def5) - fix: fix file descriptor recycling bug The fd being dropped early lead to random characters being dropped from the output of aw-notify (
4a7babb)
🔨 Misc (4)
- refactor: consolidate ManagerState into a single per-module map (
7cf0dad) - docs: fix misleading module_args example in README (
e16e860) - perf: build tray menu once and sync checked state in place (
94bec32) - refactor: remove muts in file path creation (
32817f6)
(excluded 5 less relevant commits)
📦 awatcher
🔨 Misc (5)
- Merge pull request #74 from QazCetelic/patch-1 (
d5669d3) - Use anyhow error and include path (
70a4f5f) - Be more specific when writing kwin script fails (
22f199a) - Merge pull request #73 from 0xbrayo/load-apikeys (
ef0eee1) - load AW authkey if configured (
ee3ab6c)
Full Changelog: v0.14.0b1...v0.14.0b2