Huzzah! v0.12.0 is finally here! 🎉
With over a year since the last stable release v0.11.0, and three beta releases later, we've finally got a stable v0.12.0 release ready, and it comes with plenty of new features, bug fixes, and UX improvements. You can read about them all in the changelog below.
New to ActivityWatch? Check out the website and the README.
Installation
See the getting started guide in the documentation.
Downloads
Contributors
Thanks to all everyone who contributed to this release:
@aaayushsingh, @Alwinator, @BelKed, @dependabot[bot], @ErikBjare, @Furffico, @GabLeRoux, @iloveitaly, @infokiller, @ishitatsuyuki, @johan-bjareholt, @jtojnar, @kewde, @liutiming, @michaeljelly, @NicoWeio, @oscar-king, @rakleed, @salahineo, @sunrosa, @Valentin-N, @vedantmgoyal2009, @VictorWinberg, @xylix, @Y7n05h, @yumemio
Honorable mentions
- @kewde for dragging macOS codesigning across the finish line (#702)
- @zozs for finding a DNS rebinding vulnerability (CVE coming soon)
- @salahineo for implementing a dark theme!
Changelog
The changelog is written on a per-submodule basis. Look under the Feature subheaders for the most user-affecting changes.
Changes are since v0.11.0
Summary (TODO)
- ✨ So many new things... can't even summarize them all.
- ✨ New developer settings, including: yearly time range, toggle for testing work-in-progress multi-device query
- ✨ MVP of sync prototype now working!
- 🎨 Now with a dark theme!
- 🍎 macOS releases are now properly codesigned and notarized
- 🛡️ Fixed a security vulnerability (DNS rebinding attack)
- 🐛 Many bug fixes
- And a lot more...
📦 activitywatch
✨ Features (1)
- feat(scripts): added contributor stats to build_changelog, now generating full release notes instead of just changelog (
aa21904
)
🐛 Fixes (14)
Click to expand
- fix(script): minor fixes to build_changelog (
e28ad11
) - fix(scripts): improved build_changelog script (
d45960d
) - fix: cleanup of unused PKGBUILD, improved count_lines script (
539e282
) - fix(build): remove libfontconfig and libfreetype libraries from dist (
5096717
) - fix(dist): remove obsolete codesign.sh (
68836eb
) - fix(dist): do not deep sign the dmg (
7da56c4
) - fix(dist): get rid of ci in makefile, make distintion between personal_id and team_id (
13f9b47
) - fix(dist): fixes codesigning, properly sets codesigner identity (
2e177e6
) - fix(dist): remove libharfbuzz (fixes #660) (
a43a1c6
) - fix(dist): fixed typo, hardcoded Apple Developer teamid (
ad4749b
) - fix(dist): notarize app and dmg (
fa8ddf3
) - fix(dist): only specify codesign-identity in make file (
046413f
) - fix(dist): move entitlements & specify NSAppleEventsUsageDescription (
ecc7577
) - fix: misc improvements to build_changelog.py script (
1e51f22
)
🔨 Misc (32)
Click to expand
- chore: bumped version to v0.12.0 (
7259e24
) - chore: added .python-version to gitignore (
e8287a1
) - Merge pull request #765 from ActivityWatch/dev/build-release-notes (
67c2491
) - chore: release v0.12.0b3 (
9876bb7
) - style: fix typos (#745) (
2ad8ec1
) - docs(README): fixed screenshot links, added diagram vis (
64aa1f5
) - docs(README): added link to screenshots page on website (
97f2c42
) - chore: update diagram [skip ci] (
6bb5e2c
) - docs: improved metadata in pyproject.toml (
d8107e4
) - docs(README): added Discord badge to README (
04f4009
) - chore: bumped version to 0.12.0 (
e60d6b3
) - Merge pull request #712 from sunrosa/patch-1 (
df4e583
) - Fix a typo (
7a7c5f9
) - Merge pull request #620 from ActivityWatch/dev/macos-sign-and-notarize (
093f630
) - docs(CONTRIBUTING): fix the link to bugs label (#662) (
e4499e6
) - Merge pull request #702 from kewde/kewde/fix-codesigning (
e62f483
) - style: consistent naming of secret/envvar (
4b493b8
) - Merge pull request #344 from xylix/dev/sign-macos-travis (
b515f96
) - Merge branch 'master' into dev/macos-sign-and-notarize (
ee2e3eb
) - Revert "ci: change use
python
topython3
(#696)" (a89e1c4
) - docs: changed color of budget badge (
02cdd4f
) - docs: updated budget badge, marked Android support as not-WIP (
aa63363
) - Merge branch 'master' into dev/macos-sign-and-notarize (
e67a663
) - docs: fixed broken link (#643) (
1dddd67
) - docs: fix GitHub Discussions link (#657) (
9a60513
) - docs(README): removed Travis CI badge (
51b10bc
) - added SECURITY.md (
2055473
) - Merge branch 'master' into dev/sign-macos-travis (
7018a72
) - Give more permissiosn to let security access the cert after import (
717144d
) - Use anonymous (AKA default) cert by default on macos code sign (
f6fa30c
) - Fix calling dist/codesign in .travis file (
e85d917
) - Start working on macOS code signing on CI (
d21bf90
)
📦 aw-webui
✨ Features (23)
- feat: added CSV events export to Buckets view (
067a43a
) - feat: started working on timespiral visualization (
16da90b
) - feat: added request timeout setting (enables large queries) (
f75ac9d
) - feat: added JSON & CSV export buttons to the Report view, and minor fixes (#353) (
db42877
) - feat: added last7d and last30d period options to Activity view (#352) (
9be34bc
) - feat: added start-of-week setting, to set the day on which weeks start (
a7e9724
) - feat: added toggle for enabling multidevice queries (
1dfc290
) - feat: started working on multi-device queries (
bce84a5
) - feat: add update button to Timeline view (InputTimeInterval) (#344) (
6ddec4c
) - feat: started migrating from vuex to pinia (
a9cca41
) - feat: started working on alerts feature (
b0d860f
) - feat: started working on Reports view, and some misc cleanup (
6236ea8
) - feat: added "Ctrl+Enter" shortcut for querying (#334) (
6cfa98f
) - feat: added TS-implementation of classifyEvents (+improved tests) (#329) (
9d6b4b1
) - feat: added year support to timeline barchart (
b27a951
) - feat: custom visualization support (#325) (
9659f7c
) - feat: cancel pending requests when leaving Activity view, better event editing (
7e16e03
) - feat: added 'loading' text to Activity dropdown while buckets being loaded (
13ca328
) - feat: added yearly query range to Activity view (hidden in new dev settings section) (#321) (
3afeb65
) - feat: added ability to edit events from timeline view (
b10166c
) - feat: improve formatting of query range in Activity view (#284) (
6fbe829
) - feat: instant timeline tooltip on hover (#309) (
e646c86
) - feat: added dark theme (#307) (
273658e
)
🐛 Fixes (68)
Click to expand
- fix: multiple fixes to event editing (
5099a68
) - fix: added aw-webui commit hash to settings page (for debugging CI) (
f4a0741
) - fix: fixed bug where category filter was not working (fixes[#766](#766)) (
abc276c
) - fix: set type for 'theme' to union of valid literals ('light' | 'dark') (
6771434
) - fix: set correct center color for categories sunburst, depending on theme (
e96f6df
) - fix: fixes and improvements to timespiral vis (
6303cb5
) - fix: added appnames for firefox dev edition (
130f00d
) - fix: fixed bug in sunburst-clock (from d3 v6) and converted it to typescript (
b8f6837
) - fix: turn timespiral into a proper view that can be navigated to in devmode (
f3ac629
) - fix: added ticks to timespiral, and other fixes (
a34ab73
) - fix: added hour-gaps to timespiral vis (
cd6ec5c
) - fix: minor fixes to timespiral (
a7fc561
) - fix: fixed browser/editor bucket fallback to host 'unknown' (
9d4a638
) - fix: fixed minor issues in Activity view (
2e28cf9
) - fix: fixed typing issues (
e4f20a0
) - fix: fixed bug affecting the multiquery setting (
f8fcb02
) - fix: fixed bug in multiquery (
53343b3
) - fix: simplified styling, display timeline lastUpdated as friendlytime (
6c8ce96
) - fix: fixed bug when adding subcategory (
c82c934
) - fix: set height on element to avoid jumping on load (
b8d63d0
) - fix: refactor/cleanup of queries & activity store (
c8a968b
) - fix: fixed multidevice behavior for fakedata (
48d942e
) - fix: more improvements to multiquery mvp (
c2b80c3
) - fix: added comment (
295272d
) - fix: fixed deleting buckets (
d38c9ff
) - fix: add Microsoft-Edge-Stable to appnames (#753) (
534dfe8
) - fix: fixed issue with category filtering (
e2b98cd
) - fix: fixed 'show less' button in Summary vis when all entries shown (
9403c9d
) - fix: added loading indicator to TimelineBarChart (
6f5278a
) - fix: enable dontQueryInteractive for faster loading (
843666d
) - fix: make scroll bar dark in dark theme (Chromium-based browsers) (#343) (
0770b2f
) - fix: fixed TimelineBarChart after chartjs upgrade (
7b1ca6c
) - fix: fixed regressions from pinya migration in Alert and Trends views (
360a1dc
) - fix: migrated views store to pinia (
43eb183
) - fix: migrated settings store to pinia (
a85fe44
) - fix(classes): Rename Riot to Element (#278) (
1a2b21b
) - fix: hide WIP features under devmode, improved form/input layouts (
778f379
) - fix: progress on Report view (
24ef1d7
) - fix: fix timeline in query explorer results (#336) (
5e3b93a
) - fix: updated config for tests and linting (
6bbf536
) - fix: moved NewReleaseNotification constants into store (
a2f1108
) - fix: removed vscode settings and added to gitignore (
f7038e2
) - fix(perf): don't query periods without known activity for timeline barchart (
fc2677a
) - fix: don't log errors for expected special case (
427d694
) - fix: fixed overly-broad .gitignore entry (
b377ce7
) - fix: check for missing ID in New View modal (#323) (
cef6f2d
) - fix: fixed bundling of vis-timeline (
f65a035
) - fix: fixed event editing (fetch full event from server before edit) (
daa04b0
) - fix: fixed date select when range is empty (
a527d84
) - fix: updated .gitignore (
e5e2aa6
) - fix: improved UserSatisfactionPoll contents (
0cd36a3
) - fix: keep shown currentView when date or periodLength changes (#314) (
7a5abbe
) - fix: fixed category modification (#310) (
d70687f
) - fix: fixed AlternativeTo link in UserSatisfactionPoll (
2c40a40
) - fix: fixed timeline tooltip cutoff (#305) (
76b4523
) - fix: fixed linting errors (
4fb99d8
) - fix: fixed type errors (
cdc3f5d
) - fix: fixed stopwatch timer buttons (event APIs no longer return events) (
7feadde
) - fix: use application/json content type for export (
4e64b61
) - fix: fixed 'target' is undefined when setting daystart or default timeline duration (similar to 41a5f579fe22fb2f3450604187a59d42a26d95bf) (
8d348e2
) - fix: removed old workaround (
427f2d8
) - fix: moved slow category_time_by_period query to be the last query, improving UX (
65bc763
) - fix: fixed export when no categories saved, and added pretty printing to exports (
d40b948
) - fix: fix error in case of missing 'Uncategorized' category (fixes[#612](#612)) (
0eae7ae
) - fix: misc fixes for barchart visualization (
cdd99e7
) - fix: added 127.0.0.1:5600 to default-src (
30d52a4
) - fix: split category_time_by_period query into one for each period to avoid timeout (
50302c4
) - fix: fixed 'target' is undefined error when setting default landing page (
41a5f57
)
🔨 Misc (30)
Click to expand
- test: fixes to screenshot test (#362) (
beefd71
) - test: minor improvements to screenshot test (
7ed699e
) - test: increased timeouts for screenshot tests (hopefully fixing visualizations that haven't yet rendered) (
3aaab25
) - style: fixed lint issues (
c1371eb
) - test: fixed broken test (
cf2476c
) - Merge pull request #349 from ActivityWatch/dev/multidevice-query (
cae5301
) - test: fixed test (
7aa4ae4
) - Apply suggestions from code review (
aa19f6e
) - Merge pull request #342 from ishitatsuyuki/timeline-opt (
4705e1e
) - Merge pull request #341 from ishitatsuyuki/chartjs4 (
faf68e1
) - Color: Optimize URL domain extraction. (
917c599
) - Timeline: Freeze object for performance. (
afd241f
) - VisTimeline: optimize event sorting. (
0cf0cec
) - Migrate to vue-chartjs v3, chart.js v4 (
11f2d2c
) - eslint: Disable Vue rules that conflict with prettier (
c0024b3
) - Merge pull request #339 from ActivityWatch/dev/pinia (
e20bd91
) - refactor: migrated remaining vuex stores to pinia (
f322294
) - test: fix tests after pinia migration (
901ada0
) - refactor: moved category/pattern select & Search/Report query options into components (
d63d1bf
) - refactor: moved footer into seperate component, added server Vuex-store (getInfo), updated deps (
06369db
) - test: added first query-generation test using jest's snapshot functionality (
3db99c7
) - Merge pull request #327 from ActivityWatch/dev/settings-store (
4f56b7f
) - refactor: rewrote util/time.js into ts, fixed tests (
f59a277
) - refactor: refactored settings in preparation for server-side storage of settings (
00e1995
) - add syncsettings, add server api call on settings change (
2b6279c
) - style: cleanup not needed changes (
686136b
) - fix #600 timline cut off (
e794176
) - style: lint fix (
ee7c86d
) - Merge pull request #320 from ActivityWatch/dev/edit-timeline (
5ace2bf
) - style: lint fix (
721b834
)
📦 aw-server
✨ Features (3)
- feat: added --version option to CLI (
2a9d3b6
) - feat: add API to get a single event by ID (
f12401c
) - feat: custom visualization support (#83) (
dd97ecf
)
🐛 Fixes (14)
Click to expand
- fix: added detect_version_poetry utility function (
b1ff0f1
) - fix: added coverage_html to gitignore (
4c645c4
) - fix: get rid of last use of pkg_resources (
55ef448
) - fix: fixed importing events exported from aw-server-rust (
1c514a0
) - fix: disable host header check if host is set to 0.0.0.0 (
c9bbc48
) - fix: fixed behavior when fetching single event that doesn't exist (
47116e1
) - fix: fixed fetching single event by ID (
76259fa
) - fix: fixed custom_static config (
fda357a
) - fix: remove unreachable code in server.py (#88) (
d95465f
) - fix: add host header check to prevent DNS rebinding attacks (
3e8731f
) - fix(test): fixed call to heartbeat expecting an event to be returned (
1fd1ed6
) - fix: fixed tests broken due to unstable microsecond precision (
0ad9720
) - fix: replaced use of deprecated send_events with insert_events (
ea245b3
) - fix: minor improvement to logging flask exceptions (#80) (
dbd99fd
)
🔨 Misc (9)
Click to expand
- style: applied black (
644d14c
) - refactor: ran
pyupgrade --py38-plus
(f47ad75
) - style: fix typos (#91) (
2e0ee5c
) - chore: bumped version (
773af96
) - style: applied black (
8594b00
) - style: formatted with black (
5861d20
) - tests: fixed broken tests due to host header check (
ef60bee
) - docs: adding note about fate of python server (#78) (
b2179fd
) - test: fixed tests to account for range-inclusive queries (
e429c54
)
📦 aw-server-rust
✨ Features (7)
- feat: added support for fancy regex (#292) (
9f56edd
) - feat: implement union_no_overlap transform (#290) (
819ddc2
) - feat: even more sync progress, including verified working testing scripts! (
3398993
) - feat: add cmdline arg
--webpath
and use fallbacks whenXDG_DATA_DIRS
empty or not set (#262) (014c9c0
) - feat: added subcommands to aw-sync, support selectively syncing buckets (
396bff8
) - feat: more progress on sync, added wip cli options sync_dir, start_date, buckets (
e741278
) - feat: added API to fetch a single event by ID (#268) (
98f0d68
)
🐛 Fixes (14)
Click to expand
- fix: minor fixes to sync, renamed sync-testing scripts, improved README (
60badc3
) - fix(sync): build --release aw-sync in test-sync script (
639614b
) - fix: improved sync error handling and fixed a bug (
32752b6
) - fix: set version number from Cargo.toml in --help text (
5eb0ee0
) - fix: improved sync output, added toggle for sync mode (push, pull, both) (
aebed23
) - fix: more progress on sync (
f3e78aa
) - fix: fixes some of the issues in previous commits (
3228211
) - fix: even more very much WIP, needs even more testing (
adb08c3
) - fix: very much WIP stuff, needs review (
5f488b3
) - fix: more work on syncing (
d9fbe29
) - fix: minor improvements to sync (
a8287c5
) - fix: improving flooding (#270) (
a8b8a20
) - fix: added host header check (to protect against DNS rebinding attacks) (#250) (
ef52553
) - fix: fixed OPTIONS catchers with
rocket_cors
(#245) (25b2032
)
🔨 Misc (23)
Click to expand
- docs: document Makefile build and venv usage (#291) (
ba6f6c5
) - style: applied cargo fmt (
583fd63
) - style: fix typos (#284) (
87bc9ad
) - chore: Bump rocket to 0.5-rc2 (
b97e45f
) - chore: Update dependencies (
8903e27
) - chore: Bump uuid to version 1.0 (
146356e
) - chore: Update dependencies (
b434d80
) - docs(sync): improved README for aw-sync with basic MVP usage instructions (
096da6d
) - Merge pull request #257 from ActivityWatch/dev/sync-stuff (
e5ba9d2
) - test: added test script for syncing (
d2dc9d7
) - test: fixed tests (
5c8bc4e
) - chore: improved gitignore (
186dc40
) - docs(sync): added TODO note about checking db version (
fcf629e
) - fix/refactor: minor cleanup of sync (
057ee0f
) - chore: bumped version to 0.12.0 (
fd16092
) - chore: Update dependencies (
f501a7a
) - chore: Set Rust edition to 2021 (
41c24f9
) - chore: Fix compilation warnings (
75fdcc9
) - chore: Fix missing feature "device" from clap dep (
d81c461
) - chore: Update Cargo.lock (
d1ef45e
) - aw-android: Fix compilation after rocket 0.5 upgrade (
d42fa88
) - Update rocket to 0.5.0-rc1 (
57cae13
) - chore: Update Cargo.lock and fix clap API changes (
8fcceb9
)
📦 aw-watcher-afk
✨ Features (1)
- feat: added --host and --port options, streamlined config handling like aw-watcher-window (
af4b59b
)
🐛 Fixes (1)
🔨 Misc (2)
📦 aw-watcher-window
✨ Features (1)
- feat: added --host and --port options (
3e6ff83
)
🐛 Fixes (3)
- fix: don't log "unknown" event if polling failed (#54) (
34307c2
) - fix(macos): get Firefox title when multiple instances are running (#61) (
8f3c65d
) - fix: fixed jxa strategy where script fails compilation due to shebang line (#59) (
2df3e34
)
🔨 Misc (3)
- refactor: ran
pyupgrade --py38-plus
(24fafe1
) - Bumping pyobjc to 8.1 (
fd219b8
) - Adding note about required afk watcher (
b6fdc04
)
📦 aw-qt
✨ Features (1)
- feat: added
--no-gui
flag to aw-qt, and added--interactive
flag for a minimal repl UI (#89) (744c8d2
)
🐛 Fixes (7)
Click to expand
- fix: improved arguments to endless
sleep
call (fa27df4
) - fix: setpgrp fails for a session leader (#85) (
6b079e5
) - fix: don't crash if missing permissions for path in PATH (fixes[#739](#739)) (
0286a48
) - fix(debug): added syslog calls to make debugging easier (
6c1d90e
) - fix: refactored module path detection on macOS (
f154883
) - fix: fixed module paths on macOS (
ba5b3d5
) - fix: fixed typing (
7c5c447
)
🔨 Misc (3)
- refactor: moved setpgrp, turned .format() into f-strings (
0040f9b
) - style: fix typos (#86) (
e370ca3
) - style: applied black and removed unused imports (
3a9c2fe
)
📦 aw-core
✨ Features (3)
- feat: added aw-cli with some utils (#110) (
22183fd
) - feat: add datastore API for fetching a single event by ID (
9ca348e
) - feat: made all queries range inclusive (
e06b6eb
)
🐛 Fixes (13)
Click to expand
- fix: added all to package (
4cea325
) - fix: minor improvements to typing (
df0c91b
) - fix: added coverage_html to gitignore, improved Makefile (
268bea5
) - fix: added union_no_overlap to query2 transforms (
657aeec
) - fix: don't log if pymongo is unavailable, instead crash if requested and unavailable (
2e999f0
) - fix: fixed behavior when trying to fetch a single missing event (
f19a893
) - fix: fixed lint-fix make target and applied (
a0814b0
) - fix: fixed typing (
19a2a76
) - fix: add ability to set the log level via environment variable (#103) (
22d3ded
) - fix: fixed upserting events using insert_many (#108) (
d3e31f7
) - fix: fixed incorrect trimming (#107) (
4228fbf
) - fix: added extra WHERE to speed up slow query (
3a06484
) - fix: minor fixes and added trimming for events that extend out of the query range (
7a934a5
)
🔨 Misc (14)
Click to expand
- style: fix typos (#111) (
c1bd040
) - chore: bumped version to 0.5.10 (
8405819
) - chore: bumped version to 0.5.9 (
d7cba36
) - chore: bumped version to 0.5.8 (
6784fec
) - Merge pull request #109 from ActivityWatch/dev/get-single-event-by-id (
64463bc
) - style: lint fix (
e33a438
) - style: applied black (
0629e84
) - style: applied
pyupgrade --py37-plus aw_core/**.py aw_datastore/**.py aw_query/**.py aw_transform/**.py
(6fcace7
) - style: applied black (
ab7efc8
) - chore: bumped version to 0.5.7 (
1dce996
) - chore: bumped version to 0.5.6, fixed docs URL in pyproject (
5dbb610
) - chore: bumped version to 0.5.5 (
efd1325
) - chore: bumped version to 0.5.4 (
032f08f
) - docs(README): added PyPI version badge (
464c423
)
📦 aw-client
✨ Features (5)
- feat(example): added suggest_categories_gpt script (#66) (
740ca22
) - feat: added APIs for get_event and delete_event (
32c25fd
) - feat(example): added WIP suggest_categories script (
207216a
) - feat(example): added email_report example (+ improvements to working_hours example) (
2cb09e7
) - feat: added
report
andcanonical
cli commands (7c8c443
)
🐛 Fixes (16)
Click to expand
- fix(examples): wrapped example in
if __name__ == '__main__'
(e353cc0
) - fix: improved load_dataframe example (
f7a8dbb
) - fix: fixed broken categorization in working_hours example (
759a2a1
) - fix: removed duplicate method definition (
df8776c
) - fix(examples): fixed redact_sensitive.py (#61) (
f6272c9
) - fix: fixed behavior when fetching single event that doesn't exist (
0209b8a
) - fix: fixed typing issues (
73d4ac4
) - fix: harmonized queries to use canonicalEvents, improved QueryParams dataclasses with good defaults (
808c8da
) - fix(example): fixed incorrect timedelta duration (
b9024b1
) - fix: changed
hostname
to click argument (not option) (6a842d3
) - fix: fixed typing issues (
9454222
) - fix: improved output for canonical and report commands (
f45d423
) - fix(examples): fixed working_hours.py example (
1318406
) - fix: added missing closing parens (
621584f
) - fix: removed long-deprecated methods (
e0f04c6
) - fix: removed return of Event from heartbeat endpoint (API no longer returns an event) (
15bb696
)
🔨 Misc (17)
Click to expand
- style: fix typos (#65) (
bbb228a
) - docs(README): updated README with more examples (
51d1e5a
) - style: applied black (
e19c684
) - style: fix black formatting (#64) (
e759345
) - style: applied lint-fix (
a5cc123
) - clickable links to examples (#63) (
90f3b69
) - chore: bumped version to 0.5.9 (
86e2cf4
) - chore: bumped version to 0.5.8 (
cfa7e03
) - docs(README): minor fixes in README (
ede9a68
) - docs(README): improved links in README (
22b7bfd
) - style: applied black (
b14c84a
) - style: applied
pyupgrade --py37-plus aw_client/*.py examples/*.py
(2926edc
) - docs: added output of
aw-client --help
to README (74b11c6
) - chore: bumped version to 0.5.7 (
bc64491
) - chore: bumped version to 0.5.5 (
0c0f4a0
) - docs(README): added logging/debugging documentation (#57) (
4b00b98
) - docs(README): added PyPI version badge (
13975dc
)