Sync with upstream plausible/analytics#2
Merged
JacobCoffee merged 620 commits intov3.0.1-psffrom Mar 24, 2026
Merged
Conversation
…lausible#5812) * Start passing official installs that are using legacy .compat installation * Pass the first domain for verifying legacy compat installs * Fix variable access issue * Fix non-existent function call * Comment why split domainString
…tes, not only >threshold (plausible#5783) * Sampling Cache: ensure consolidated values above threshold are reported * Calculate fractional sampling regardless of cached traffic record * Fix alias
…peline (plausible#5814) * Ensure `conn` from `Plug.Conn.read_body` is always passed down the pipeline * Alter persistor related histogram metrics for better view of timings * Update typespec
* Identify detection attempt * Test Detection.Checks module * Fix typo
* Create static consolidated view UI on `/sites` page - Improve existing site card layout - Add static UI for the consolidated view - Add dismissable upgrade card UI - Extract favicon fetching logic to function - Configure configurable fallback icon per route - Add `/favicon/sources_globe/` route with different icon than `/favicon/sources/` to use on `/sites` page * Improve the mobile view of the `/sites` page * Minor query interface UX extension (plausible#5713) * Minor query interface extension * !fixup * !fixup * Initial implementation of consolidated views on /sites * Improve loading state * no need to handle nil in main interface * Juggle `can_manage_consolidated_view?` * Require team setup in order to enable consolidated view * nil catcher * Fixup test fixture * Don't show Consolidated View tab in CS if team is not setup * Reorganize + test * Remove comment * Only show consolidated views to superadmins for now * Remove temporary sleep * CE unused bindings * Clean up seeds * EE * Fixup test * Test non-superadmin scenario * Add a test guarding parity between small plots (consolidated vs individual) * Move private function so CE won't complain * See if the graphs are now similar at least :) * sort * Map keys are unsorted * Ensure engagement events aren't counted as visitors on smol graphs * just try and revert * Revert "just try and revert" This reverts commit 7584f59. * Simplify globe icon handling * Remove unnecessary @rest * Split tests into more focused cases * Address jumpiness on furious refresh cycle * Revert "Address jumpiness on furious refresh cycle" This reverts commit 5c03b36. * Another attempt at jumpiness * Enforce less noticeable lag applying the diff from loading to loaded * Reduce flashing on stats load --------- Co-authored-by: Sanne de Vries <sannedv@protonmail.com>
…5809) * Add tests for query timezones * Test timezones at controller level * Remove v1 controller tests for ambigous times * Add tests for legacy_time_on_page_cutoff * Add test for generic cutoff timezone behaviour without gaps
* add module name to service_error when check times out Otherwise, it can sometimes remain unclear in the diagnostics, whether it was InstallationV2 or InstallationV2CacheBust that timed out. * Remove duplicate timeout logic The current production logs show two types of verification timeouts: * service_error: "Unhandled Browserless response status: 408" (vast majority of cases) * service_error: :timeout (only a few cases) The latter happens when we hit the Req receive_timeout (endpoint_timeout + 2s). I've seen Browserless not respect the timeout param from time to time, so it's better to keep the timeout logic "in-house" only. * make service_error into a map with code and extra * interpret temporary service errors ...but still consider them "unhandled" for telemetry, also notifying Sentry and logging the warning. * separate sentry messages (verification) * make Verification.ChecksTest more DRY * organize tests into describe blocks * test verification telemetry and logging * fix codespell * pass timeout as query param to Browserless too
* add module name to service_error when check times out Otherwise, it can sometimes remain unclear in the diagnostics, whether it was InstallationV2 or InstallationV2CacheBust that timed out. * Remove duplicate timeout logic The current production logs show two types of verification timeouts: * service_error: "Unhandled Browserless response status: 408" (vast majority of cases) * service_error: :timeout (only a few cases) The latter happens when we hit the Req receive_timeout (endpoint_timeout + 2s). I've seen Browserless not respect the timeout param from time to time, so it's better to keep the timeout logic "in-house" only. * make service_error into a map with code and extra * interpret temporary service errors ...but still consider them "unhandled" for telemetry, also notifying Sentry and logging the warning. * separate sentry messages (verification) * make Verification.ChecksTest more DRY * organize tests into describe blocks * test verification telemetry and logging * fix codespell * get rid of legacy verification * rename Checks.InstallationV2 -> Checks.VerifyInstallation * delete Live.Installation and rename Live.InstallationV2 -> Live.Installation * rename installationv2 (live) files as well * delete old change-domain routes Also rename current liveview modules and routes, removing the v2 suffix * rename domain_change_v2 files, removing v2 suffix * remove legacy JS verifier code Also fix dockerignore and elixir.yml referencing a wrong priv path * rename verification_v2_test -> verification_test * remove v2 prefix from logs and sentry messages * clean up duplicate external_sites_controller_test.exs tests * remove flag * fix typespec * pass timeout as query param to Browserless too * Fixup external sites controller test module (plausible#5826) * fix test description --------- Co-authored-by: Artur Pata <artur.pata@gmail.com>
* add module name to service_error when check times out Otherwise, it can sometimes remain unclear in the diagnostics, whether it was InstallationV2 or InstallationV2CacheBust that timed out. * Remove duplicate timeout logic The current production logs show two types of verification timeouts: * service_error: "Unhandled Browserless response status: 408" (vast majority of cases) * service_error: :timeout (only a few cases) The latter happens when we hit the Req receive_timeout (endpoint_timeout + 2s). I've seen Browserless not respect the timeout param from time to time, so it's better to keep the timeout logic "in-house" only. * make service_error into a map with code and extra * interpret temporary service errors ...but still consider them "unhandled" for telemetry, also notifying Sentry and logging the warning. * separate sentry messages (verification) * make Verification.ChecksTest more DRY * organize tests into describe blocks * test verification telemetry and logging * fix codespell * get rid of legacy verification * rename Checks.InstallationV2 -> Checks.VerifyInstallation * delete Live.Installation and rename Live.InstallationV2 -> Live.Installation * rename installationv2 (live) files as well * delete old change-domain routes Also rename current liveview modules and routes, removing the v2 suffix * rename domain_change_v2 files, removing v2 suffix * remove legacy JS verifier code Also fix dockerignore and elixir.yml referencing a wrong priv path * rename verification_v2_test -> verification_test * remove v2 prefix from logs and sentry messages * clean up duplicate external_sites_controller_test.exs tests * remove flag * fix typespec * pass timeout as query param to Browserless too * Fixup external sites controller test module (plausible#5826) * fix test description * clean up detection sentry events + tests * improve naming --------- Co-authored-by: Artur Pata <artur.pata@gmail.com>
* Broadcast tracker script config updates * Fix broadcast_put typespec * Preload site association on CE * Stop preloading uselessly * Reload tracker_script_config on CE only
* Crop big consolidated views * number format
…ible#5834) * Set Consolidated View's timezone to what majority of sites has * clean up
* Display 24h charts in CRM * Move New Custom Plan button to the top of the page * Allow custom plan deletion * Add managed proxy price modifier to custom plan estimation
* make timeout configurable for a check via check_opts * add an internal_check_timeout test case to verification/checks_test.exs * move verification observability tests to a separate file ... make it sync and test capturing Sentry events too * separate detection observability checks too * test sentry events in detection * consider internal check timeouts browserless issues in detection too * test util function defs to ee_only
* Improve dark mode - Switch from `slate` to `zinc` for the gray color palette - Darken overall dark mode UI - Switch from `green` to `emerald` for the green color palette - Update a few previously missed instances of title case to sentence case - Consolidate button styles and change naming from `bright` to `secondary` - Update button disabled styles - Fix tooltip not adjusting to content width - Update graph tooltip layout and typography - Add transition effects to hover states - Reduce footer logo size * Fix oversights - Update funnel graph colors - Update graph grid colors - Improve focus styles - Improve disabled input styles * Fix more oversights in relation to dashboard filtering - Improve consistency of input, button, combobox and modal components in relation to settings area - Fix segment tooltip color * Fix search input style in funnel and segments dropdowns * Add white background to favicon images in dark mode - The GitHub and ChatGPT favicons are hard to see in dark mode, so we add a white background to them. * Fix tooltip color to fit all backgrounds in dark mode * Fix tests * Fixed more tests * Extract SourceFavicon component to eliminate favicon duplication * Fix regression on installation page after rebase * Fix formatting issues * Fix favicon test failure in CI by reading placeholder icon at compile time * Undo previous commit
* Update playwright to 1.56.1 * chore: Bump tracker_script_version to 33 * Run audit fix for /assets --------- Co-authored-by: apata <apata@users.noreply.github.com>
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](actions/upload-artifact@v4...v5) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 5 to 6. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](actions/download-artifact@v5...v6) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
- Added dark mode change to CHANGELOG.md - Fixed broken `WithImportedSwitch` icon focus outline - Updated comments in `app.css` referencing old color scheme
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 5 to 6. - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](actions/setup-node@v5...v6) --- updated-dependencies: - dependency-name: actions/setup-node dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Cenk Kücük <cenk@plausible.io>
- Update tab component visually for extra affordance
* refactor: move derived_name_filter to WhereBuilder, use matching_toplevel_filters * feat: apply name filter optimization to base event queries * feat: apply name filter optimization to funnel queries * refactor: call WhereBuilder.derived_name_filter directly * Remove unused alias
* Add failing tests * Fix issue with top stats not loading for shared links limited to segment * Fix issue with missing case for get_filters_param
* Add failing tests * Fix issue with top stats not loading for shared links limited to segment * Add tests for ignoring missing goals * Silently ignore missing goals * Silently ignore missing goals for internal query API --------- Co-authored-by: Robert Joonas <robertjoonas16@gmail.com>
* Changing the note on top of a new dashboard Changing the note on top of a new dashboard and adding a custom event to track clicks * Update first_dashboard_launch_banner.ex * Fix formatting and use route helper instead of URL string --------- Co-authored-by: Adrian Gruntkowski <github@todo.computer>
plausible#6167) * fix bug * on_ee guard
* Remove Sites.list() in favour of Sites.Index * Implement basic sort options widget @sanne-san pls review 🙏 * Attempt to indicate pinned sites cc @sanne-san * Remove Scrivener * Format * Update mix.lock * Tweak sorting and pinning UI - Moved sorting dropdown to the right of the top bar - Changed pin icon behaviour to be a quick action button to unpin, and leaving the ellipsis menu always visible * Add sorting loading state * Fix pinning tests * Make CI pass * Move pin icon to `Icons` module * Indicate pinned status in CRM * Store user sort preference; migration to be extracted * Move @sort_options if we intend to keep it as a module attribute * Implement feedback - Change "Most visitors" to "Visitors, high to low" and "Fewest visitors" to "Visitors, low to high" in the sort dropdown. - Add dedicated styles to Prima dropdown, rather than using button styles directly, as they diverge from button styles in a few ways. - Add data-sort-trigger attribute to sort dropdown so that loading state only applies to sorting, not to pinning/unpinning. - Add padding to search form to ensure consistent height with other form elements. - Ensure dropdown menu is always at least as wide as the trigger button. - Changed site card hover effect to shadow-md instead of shadow-lg. * Revert removal of unused css - These changes weren't supposed to go into this PR * Fixup tests * Test no sort order persistence for guests (there's nowhere to store it) * Update changelog * Migration: store one map per membership wrt sort preferences * Use unified sorting preferences object * Cosmetics * Lose track of `filter_by_domain` in `Sites.Index` It's irrelevant to carry over * Rework index build/pagination options * Fix typespecs * Remove unused uri argument * Avoid passing URI around, maintain uri params instead * Remove unused assigns * Use prima's match_trigger_width instead of custom JS override - Upgrade prima to 0.2.6 and replace the custom Dropdown hook that manually set min-width with the built-in match_trigger_width={true}. * Skip an iteration * Update lib/plausible_web/live/sites.ex Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com> * Keep `filter_text` socket assign after all * Turn sort_options into a list again to avoid undefined ordering * Use path helpers for :stats * Fix compilation error * Use PlausibleWeb.Endpoint to enable path helpers * Use an embed to store sort preferences * Restructure index user preference * Remove unused component attrs * Remove validate_inclusions covered by Ecto.Enum type --------- Co-authored-by: Sanne de Vries <sannedv@protonmail.com> Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com>
* fix graph crashing * do not attempt to link to __blank__ period
* Update welcome_email.html.heex * Update site_setup_success_email.html.heex * Update site_setup_help_email.html.heex * Update create_site_email.html.heex * Update check_stats_email.html.heex * Update trial_one_week_reminder.html.heex * Update trial_over_email.html.heex * Create trial_ending_tomorrow.html.heex * Update trial_ending_tomorrow.html.heex * Create trial_ending_today.html.heex * Update email.ex * Update send_trial_notifications.ex * Update send_trial_notifications.ex * Update email.ex * Apply formatting * Remove unused argument from one of email functions * Make tests account for new phrasing of emails --------- Co-authored-by: Adrian Gruntkowski <github@todo.computer> Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com>
* API v2: fix returning buckets outside of queried range * For time:hour and time:minute, sessions are smeared using time_slots. The fix is to filter out time_slots that fall outside of the utc boundaries * For any other time dimension, there's no session smearing, but since sessions are put into time buckets by the last event timestamps, the query might return buckets that are outside of the query time range. The fix is to clamp those sessions into the last bucket instead. * allow time dimensions when querying views_per_visit * update changelog * stop generating bad timeslots instead
* Move subscription settings page content into a LiveView
Prepares the page to host the choose_plan modal as a LiveComponent in a follow-up PR. Pure refactor, no UX changes.
- Extract subscription page content into a new SubscriptionSettings LiveView
- Move data loading out of the controller and into the LiveView
- Embed the LiveView in the existing settings layout via live_render
* Incorporate feedback
- Render SubscriptionSettings LiveView directly from the router instead of via a controller action and template
- Update the shared settings layout to work without a request object
- Move view helpers from SettingsView to the billing components module
* Fix Alpine.js attribute warnings in settings templates
* Update lib/plausible_web/live/components/form.ex
Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com>
* Update lib/plausible_web/live/components/form.ex
Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com>
* Update lib/plausible_web/live/subscription_settings.ex
Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com>
* Update lib/plausible_web/templates/layout/settings.html.heex
Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com>
* Incorporate more feedback
- Move billing helpers to a dedicated Helpers module
- Add a CurrentPath plug to the settings pipeline so we can avoid all the branching in the layout template
- Remove conn dependency from the settings layout
* Address remaining PR review feedback
- Use `conn.request_path` instead of `Path.join` in CurrentPath plug
- Remove unused `%Plug.Conn{}` clause from `account_settings_sidebar`
- Use dot notation for always-present assigns in `account_settings_sidebar`
* Add SettingsContext on_mount hook for settings LiveViews
---------
Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com>
* Fix flaky test * Another one * Fixup
* Update ua_inspector * use upstream again * Add test against regression --------- Co-authored-by: Adam Rutkowski <hq@mtod.org>
* Escape goal name in the funnel tooltip to prevent XSS * Remove unnecessary use of String() --------- Co-authored-by: Adam Rutkowski <hq@mtod.org>
* Export BEAM processes to OTLP metrics endpoint * fix max nesting * update mix.lock * switch to Enum.map insted
JacobCoffee
pushed a commit
that referenced
this pull request
Mar 24, 2026
* Experiment with rollup bundler * WIP: Unbundle * Always allow overriding url with options.u * fix conditional * Update manual conditional #2 * Unbundle custom events code * Unbundle autocapturing of pageviews * Comment Object.assign * Rename functions in compiler * Rename trigger -> track, unbundle * Dont rely on window.plausible in custom-events.js * chore: Bump tracker_script_version to 14 * Cherry-pick PR plausible#5462
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
plausible/analytics:masterintov3.0.1-psfAfter merging
Rebase the
landingbranch onto the updatedv3.0.1-psf.