v3.0.0
plausible/analyticsv3.0.0Apr 11, 2025by aerosol
AI Summary
A major version release introducing team management, new engagement metrics (scroll depth, engagement time), and a segments feature.
Key Highlights
- Create teams, manage users, and permissions
- New metrics: Scroll depth, engagement time, and reworked time on page
- Segments feature: persistent, named filter presets
Breaking Changes
- Unique visitors in top stats changed to Unique conversions when filtering by a goal
- Default period changed to 'today' (then 'last 28 days')
- Dashboard filters changed from legacy format to JSON URL style
- Old /api/health deprecated in favor of /api/system/health/live and /api/system/health/ready
New Features
- Sort and compare exit_rate metric
- Top 3 pages in traffic spike emails
- New shorthand time periods: 28d and 91d
- Average scroll depth metric and Scroll Depth goals
- UTM Medium report with gclid and msclkid support
- Case-insensitive search in details modals
- Behavioral filters (has_done, has_not_done) in Stats API
- Engagement events reporting (sd, e parameters)
- Script version reporting
- Editor and Billing team roles
- Unlimited limits for Community Edition
Full Release Notes
> [!WARNING]
> Please use [3.0.1 patch](https://github.com/plausible/analytics/releases/tag/v3.0.1) that contains fix for https://github.com/plausible/analytics/issues/5319
The highlights of this release are:
- Create teams, manage users and permissions
- Scroll depth, engagement time and (reworked) time on page metrics
- Segments feature: group filters into persistent, named presets
## Upgrade
Update the image used for `plausible`
<sub><kbd>compose.yml</kbd></sub>
```diff
diff --git a/compose.yml b/compose.yml
index f5a0a7e..3e03415 100644
--- a/compose.yml
+++ b/compose.yml
@@ -11,7 +11,7 @@ services:
start_period: 1m
plausible_events_db:
- image: clickhouse/clickhouse-server:24.3.3.102-alpine
+ image: clickhouse/clickhouse-server:24.12-alpine
restart: always
volumes:
- event-data:/var/lib/clickhouse
@@ -27,12 +27,14 @@ services:
nofile:
soft: 262144
hard: 262144
+ environment:
+ - CLICKHOUSE_SKIP_USER_SETUP=1
healthcheck:
test: ["CMD-SHELL", "wget --no-verbose --tries=1 -O - http://127.0.0.1:8123/ping || exit 1"]
start_period: 1m
plausible:
- image: ghcr.io/plausible/community-edition:v2.1.5
+ image: ghcr.io/plausible/community-edition:v3.0.0
restart: always
command: sh -c "/entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"
depends_on:
```
and restart the containers
<sub><kbd>console</kbd></sub>
```console
$ docker compose up -d
```
This will boot up the new version of the app.
## Changelog
The following [changes](https://github.com/plausible/analytics/compare/v2.1.5...v3.0.0) have been made since 2.1.5:
### Added
- Ability to sort by and compare the `exit_rate` metric in the dashboard Exit Pages > Details report
- Add top 3 pages into the traffic spike email
- Two new shorthand time periods `28d` and `91d` available on both dashboard and in public API
- Average scroll depth metric
- Scroll Depth goals
- Dashboard shows comparisons for all reports
- UTM Medium report and API shows (gclid) and (msclkid) for paid searches when no explicit utm medium present.
- Support for `case_sensitive: false` modifiers in Stats API V2 filters for case-insensitive searches.
- Add text version to emails plausible/analytics#4674
- Add acquisition channels report
- Add filter `is not` for goals in dashboard plausible/analytics#4983
- Add Segments feature
- Support `["is", "segment", [<segment ID>]]` filter in Stats API
- Time on page metric is now sortable in reports
- Plausible tracker script now reports maximum scroll depth reached and time engaged with the site in an `engagement` event. These are reported as `sd` and `e` integer parameters to /api/event endpoint respectively. If you're using a custom proxy for plausible script, please ensure that these parameters are being passed forward.
- Plausible tracker script now reports the version of the script in the `v` parameter sent with each request.
- Add support for creating and managing teams owning multiple sites
- Introduce "billing" team role for users
- Introduce "editor" role with permissions greater than "viewer" but lesser than "admin"
- Support behavioral filters `has_done` and `has_not_done` on the Stats API to allow filtering sessions by other events that have been completed.
- `time_on_page` metric is now graphable, sortable on the dashboard, and available in the Stats API and CSV and GA4 exports/imports
### Removed
- Internal stats API routes no longer support legacy dashboard filter format.
- Dashboard no longer shows "Unique visitors" in top stats when filtering by a goal which used to count all users including ones who didn't complete the goal. "Unique conversions" shows the number of unique visitors who completed the goal.
### Changed
- Default period for brand new sites is now `today` rather than `last 28 days`. On the next day, the default changes to `last 28 days`.
- Increase decimal precision of the "Exit rate" metric from 0 to 1 (e.g. 67 -> 66.7)
- Increase decimal precision of the "Conversion rate" metric from 1 to 2 (e.g. 16.7 -> 16.67)
- The "Last 30 days" period is now "Last 28 days" on the dashboard and also the new default. Keyboard shortcut `T` still works for last 30 days.
- Last `7d` and `30d` periods do not include today anymore
- Filters appear in the search bar as ?f=is,page,/docs,/blog&f=... instead of ?filters=((is,page,(/docs,/blog)),...) for Plausible links sent on various platforms to work reliably.
- Details modal search inputs are now case-insensitive.
- Improved report performance in cases where site has a lot of unique pathnames
- Plausible script now uses `fetch` with keepalive flag as default over `XMLHttpRequest`. This will ensure more reliable tracking. Reminder to use `compat` script variant if tracking Internet Explorer is required.
- The old `/api/health` healtcheck is soft-deprecated in favour of separate `/api/system/health/live` and `/api/system/health/ready` checks
- Changed top bar filter menu and how applied filters wrap
- Main graph now shows revenue with relevant currency symbol when hovering a data point
- Main graph now shows `-` instead of `0` for visit duration, scroll depth when hovering a data point with no visit data
- Make Stats and Sites API keys scoped to teams they are created in
- Remove permissions to manage sites guests and run destructive actions from team editor and guest editor roles in favour of team admin role
- Time-on-page metric has been reworked. It now uses `engagement` events sent by plausible tracker script. We still use the old calculation methods for periods before the self-hosted instance was upgraded. Warnings are shown in the dashboard and API when legacy calculation methods are used.
- Always set site and team member limits to unlimited for Community Edition
- Stats API now supports more `date_range` shorthand options like `30d`, `3mo`.
- Stop showing Plausible footer when viewing stats, except when viewing a public dashboard or unembedded shared link dashboard.
### Fixed
- Fix fetching favicons from DuckDuckGo when the domain includes a pathname
- Fix `visitors.csv` (in dashboard CSV export) vs dashboard main graph reporting different results for `visitors` and `visits` with a `time:minute` interval.
- The tracker script now sends pageviews when a page gets loaded from bfcache
- Fix returning filter suggestions for multiple custom property values in the dashboard Filter modal
- Fix typo on login screen
- Fix Direct / None details modal not opening
- Fix year over year comparisons being offset by a day for leap years
- Breakdown modals now display correct comparison values instead of 0 after pagination
- Fix database mismatch between event and session user_ids after rotating salts
- `/api/v2/query` no longer returns a 500 when querying percentage metric without `visitors`
- Fix current visitors loading when viewing a dashboard with a shared link
- Fix Conversion Rate graph being unselectable when "Goal is ..." filter is within a segment
- Fix Channels filter input appearing when clicking Sources in filter menu or clicking an applied "Channel is..." filter
- Fix Conversion Rate metrics column disappearing from reports when "Goal is ..." filter is within a segment
- Graph tooltip now shows year when graph has data from multiple years