Matomo 5.0 is now available! This release brings big improvements across the board, making Matomo:

  • Faster
  • More secure
  • Easier to use
  • Compatible with the latest technology

You’ll notice better performance, enhanced security, and an overall smoother experience while using Matomo 5.0.

What’s new?

Enhanced accessibility

Matomo now displays new icons in the navigation menu, clearer notifications, and proper link underlines in URLs for a better user experience.

One of the many ways we’re striving to create an approachable, easy-to-use solution.

Strengthened security

We’ve enhanced security for more robust data protection. Your data security is our priority.

Faster insights

Run queries, fetch data, and generate faster than ever in Matomo. We’ve made improvements to query performance so you can get the insights you need quickly.

Modernised front-end

We’re paving the way for exciting future improvements by transitioning to Vue.js. This update lays the groundwork for a more responsive interface and faster development of new features.

Improved compatibility

Further support and compatibility-related improvements for PHP versions 8.1, 8.2 and the latest 8.3, so Matomo remains at the forefront of technology.

Thanks to the Matomo Community 💙

A total of 270 tickets closed were by 15+ contributors in this release.

Database upgrade

Note: This release contains database upgrades and upgrading your database might take some time if you have a lot of data in your database.

Please make sure you read the Update Matomo guide for high traffic instances, especially if you are using MySQL versions 5.5 or 5.6 that do not support index renaming and creating/updating the index can take a long time.

After You Update

  • Please help us spread the word! Maybe you can write about the project on your blog, website, twitter, talk at conferences or let your friends and colleagues know what is Matomo. Already 1,000,000+ websites are keeping full control of their web analytics with Matomo!
  • Use the forums if you have any question or feedback (free support),
    or purchase a Support Plan to get professional support and guidance.
  • To improve Matomo in your language consider contributing to translations.
  • You can also support our efforts by purchasing valuable Premium Features for Matomo or try our Matomo Cloud solution.

Downgrading to Matomo 4

After an upgrade to Matomo 5, it may be possible to downgrade again to Matomo 4 if needed by following instructions in this FAQ.

Platform Changes

Matomo is an open analytics platform. In an effort to help Matomo developers learn about improvements and changes in the core APIs, we document the changes since the last release.

In this 5.0.0 release there are many changes to the API. There are breaking changes in Breaking changes in HTTP API, New PHP events, Breaking changes in PHP events, Removed methods and constants in PHP Plugin API, New APIs, and Other Breaking changes.

Read more about all changes to the platform and APIs including breaking changes in Platform Changelog for Developers.

Note: the Marketplace showcases more than 20 plugins already compatible with Matomo 5 and this is just the beginning. All plugin authors are encouraged to make their plugins compatible with Matomo 5.0.0.

List of over 270 tickets closed in Matomo 5.0.0

Last updated: December 15, 2023


  • #19081 Use HTTPS by default for connections to (with working fallback to HTTP requiring super user edit the INI config) [by @peterhashair, @bx80]
  • #16028 Remove JSON2 API [by @sgiehl]
  • #16904 Matomo tracker select queries can get slow when most visits have same visitorId (Performance) [by @peterhashair]
  • #20375 Improve page conversion attribution performance with pre-calculated field (Performance) [by @bx80]
  • #19897 Improve speed of segment queries when multiple action segment parts are used (Performance)[by @diosmosis]
  • #18295 When aggregating data tables for a week, month, year or range period, don’t store all archive content in memory (Performance) [by @diosmosis]
  • #20578 Avoid API request for API.getPagesComparisonsDisabledFor on Login pages [by @sgiehl, @bx80]
  • #19984 Allow API parameter type hints [by @sgiehl]
  • #20596 Encapsulate plugins from using Matomo dependencies directly by introducing vendor proxy patterns [by @sgiehl]
  • #19624 Deprecate auto sanitize of API parameters & Common::getRequestVar and introduce Request class [by @sgiehl]
  • #19279 If “disableBrowserFeatureDetection” is enabled and remember(Cookie)ConsentGiven is called, a new visitor is recognized [by @peterhashair, @sgiehl]
  • #17202 Matomo can be tricked to record spoofed X-Forwarded-For IPs
  • #20101 Add privacy & security features to only allow adding users with emails from specific domains [by @tsteur]
  • #20772 URL overflows in goal conversions widget [by @sgiehl]
  • #16141 Improve handling of regex groups in CustomDimension extraction [by @9joshua]
  • #18375 Set default limit for concurrent archivers
  • #19840 Enable search on Visitors Software Configurations report [by @sgiehl]
  • #20011 Deprecate Do-Not-Track Support [by @sgiehl]
  • #20153 Enable segmented visits log feature for product reports [by @sgiehl]
  • #20158 Mention new consent guides in Matomo “Asking for consent” page [by @sgiehl]
  • #20352 Add ability to limit no of rows in FieldConfig::UI_CONTROL_MULTI_TUPLE [by @sgiehl]
  • #20482 Enable segmented log feature for social network reports [by @sgiehl]
  • #20651 Warning: Undefined array key “method” in PrivacyManager.php [by @michalkleiner]
  • #20717 Enhance console command plugin:list with version information [by @ziegenberg, @sgiehl]
  • #20132 Use the correct submit button text when editing/adding a scheduled report [by @diosmosis, @sgiehl]
  • #20495 Ensure to unsanitize goal pattern correctly [by @sgiehl, @bx80]
  • #20531 Clicking “no” in users manager when changing permission doesn’t reset the role setting [by @sgiehl]
  • #20622 More then 20 actions bleed over from widgets [by @michalkleiner]
  • #20020 Add new website modal buttons are squashed together [by @sgiehl]
  • #20072 User-ID String in real time widget might overflow [by @sgiehl]
  • #20693 Use matomo brand in less color names [by @sgiehl]
  • #20169 Invite new user screen says “Add new user” [by @bx80]
  • #16368 Keep MaterializeCSS up to date [by @sgiehl]
  • #18727 Restrict plugin name to 60 characters [by @peterhashair]
  • #19316 Updating visit dimensions might not work correctly in some cases [by @bx80]
  • #20030 Performance report not working from pages report when segment is in use [by @sgiehl]
  • #20048 Make Matomo compatible with passwords containing certain special characters [by @sgiehl]
  • #20361 Invalid data sent in uadata array, causes complete tracking failure in Queued Tracking [by @sgiehl]
  • #20409 Add `referrerpolicy=”no-referrer-when-downgrade”` to noscript tracking code [by @bx80]
  • #20413 Support ranges with two dates for invalidateArchivedReports API call [by @bx80]
  • #20484 Delete annotation feature is not translatable [by @bx80]
  • #20532 Test button in segment editor might throw an error [by @sgiehl]
  • #20560 Fix error message when UI asset can’t be written [by @sgiehl]
  • #20621 If custom logo feature is disabled, assume it’s not enabled even if one is already uploaded [by @tsteur, @sgiehl]
  • #20562 [PHP 8.2 compatibility] WARNING: Deprecated – Creation of dynamic property [by @sgiehl]
  • #20599 [PHP 8.1 compatibility] Improve type checking for Transitions API method getTransitionsForAction [by @bx80, @sgiehl]
  • #20636 [PHP 8.1 compatibility] Fix array access warning on float – /plugins/Goals/DataTable/Filter/CalculateConversionPageRate.php
  • #20627 [PHP 8.1 compatibility] deprecation warning — Return type of RequiredPhpSetting::jsonSerialize
  • #20692 core:purge-old-archive-data optimizes all tables twice [by @bx80]
  • #20773 Movers and Shakers shows Search Engine name escaped [by @sgiehl]
  • #20330 Make missing parts of PrivacyManager translatable [by @sgiehl, @bx80]
  • #17017 JS tracker should not track anything when the protocol is file:// to avoid tracking personal data by accident [by @peterhashair]
  • #18328 Updates Symfony components to 5.4.x [by @sgiehl]
  • #18980 [Vue] add support for on demand loading of plugin UMD files when a component in a plugin is first used. [by @diosmosis, @sgiehl]
  • #19502 [Vue] remove angularjs libraries from matomo [by @diosmosis, @sgiehl]
  • #19594 Do not accept invalid SSL certificates for requests to ASPSMS and Clockwork [by @sgiehl, @bx80]
  • #19710 Rename javascript event piwikPageChange to matomoPageChange [by @sgiehl]
  • #19813 Return status code 401 for invalid tokens in API requests [by @peterhashair, @sgiehl]
  • #19824 Add spellcheck=false to password inputs [by @sgiehl]
  • #19830 add convenience command to minify tracker JS during development [by @diosmosis, @sgiehl]
  • #19902 add multiFilter utility method to DataTable classes [by @diosmosis, @sgiehl]
  • #19989 Update jQuery to 3.6.3 [by @sgiehl]
  • #20009 Allow reports to specify a column/metadata other than “label” that uniquely identifies a row [by @diosmosis, @sgiehl]
  • #20029 Limit allowed characters for instance ids [by @AltamashShaikh, @sgiehl]
  • #20074 Prevent error in OptOutManager when language is not a string [by @tsteur, @bx80]
  • #20096 Attach browser features to tracking requests when they are send [by @sgiehl]
  • #20121 Speed up fetching range reports, evolution and sparkline reports [by @tsteur, @sgiehl]
  • #20556 SegmentEditor might fail to display suggestions when using PDO\MYSQL [by @diosmosis, @sgiehl]
  • #20610 Removes deprecated javascript methods broadcast.init, broadcast.propagateAjax and broadcast.pageLoad [by @sgiehl]
  • #20643 Allow reports to override the min/max label width values [by @diosmosis, @sgiehl]
  • #20744 Provide json output of console command `plugin:list` [by @ziegenberg, @michalkleiner, @sgiehl]
  • #20527 Regions might not be detected correctly when using free DBIP geolocation database [by @sgiehl]
  • #20655 [PHP 8.1 compatibility] Deprecated – preg_split(): Passing null to parameter #2 ($subject) of type string is deprecated in Draw.php(2302) [by @sgiehl]
  • #20788 The colour highlight for the bounce trend in the Visit Summary should be reversed [by @sgiehl]
  • #20394 introduce RecordBuilder concept to split up Archiver code [by @diosmosis, @sgiehl]
  • #20742 Fix syntax of JSDoc annotations `@param`/`@returns` to enable type hinting in IDE [by @rr-it, @sgiehl]
  • #20813 Configure linguist to exclude libs, generated and resource files [by @rr-it, @sgiehl]
  • #20816 allow running JS tests for a single plugin in tests:run-js [by @diosmosis, @sgiehl]
  • #20845 [PHP 8.2 compatibility] WARNING: Deprecated – Creation of dynamic property [by @sgiehl]
  • #20818 Add methods to allow creating internationalized listings [by @sgiehl]
  • #20846 Updating multiple plugins in UI doesn’t work [by @sgiehl]
  • #7573 When requesting Date Range or Custom Segment, only archive the requested record [by @bx80, @diosmosis]
  • #21013 Handle ajax call to resend an invitation correctly [by @sgiehl]
  • #20809 Allow to optionally defer JS from custom layout templates [by @michalkleiner, @sgiehl]
  • #20492 Remove “ALL WEBSITES” from the website selection dropdown
  • #20519 Add a new link to a Reviews website [by @sgiehl]
  • #20607 Add single click copy button for code snippets [by @bx80]
  • #20706 Create accessible hyperlinks [by @sgiehl]
  • #20713 Matomo leaks the IP address of the backend user to [by @bx80]
  • #20970 In the Diagnostics plugin (core) add a helpful link to Packet Too Large for max_allowed_packet [by @bx80]
  • #21034 Added “keywords” to the default search keyword parameters [by @Toflar, @sgiehl]
  • #9549 When installing Piwik, the port is not correctly saved for trusted_hosts [by @sgiehl]
  • #17747 Thousand numbers are wrongly displayed in email reports
  • #19966 Unable to delete entry containing dots with config:delete command
  • #20569 Widget “Become a Matomo expert” does not work right (Add user) [by @sgiehl]
  • #20640 UX: Search bar javascript issue [by @sgiehl]
  • #20838 When adding a website, it adds it twice instead of once [by @sgiehl]
  • #20861 Width of table on Goals Overview page is not correct
  • #20894 Row labels disappear on double click in table report
  • #20959 [PHP 8.1 compatibility] Deprecated – trim(): Passing null to parameter #1 ($string) of type string [by @sgiehl]
  • #21001 Fix tag cloud visualization failing on formatted values [by @bx80, @sgiehl]
  • #21023 Add new user: password manager might change new users username [by @sgiehl]
  • #21048 Transition window: text overflow [by @sgiehl]
  • #21061 Tracking Error “Data too long for column ‘config_device_model'” [by @sgiehl]
  • #20817 add actions goal metrics to processed reports in metadata and report data [by @diosmosis, @sgiehl]
  • #20868 Improve handling of incompatible plugins during an update [by @sgiehl]
  • #20880 No-data translations for Vue.js, Cloudflare and WordPress [by @michalkleiner, @sgiehl]
  • #20904 Validate lastMinutes value for Live.getCounters API [by @sgiehl]
  • #20910 Changes to show SPA/PWA tab for no data screen [by @AltamashShaikh, @sgiehl]
  • #20917 Fixing Order metric so that the plural name is used correctly [by @snake14, @sgiehl]
  • #20926 Introduce stylelint to lint css / less files [by @sgiehl]
  • #20957 No data page might show selected comparisons [by @sgiehl]
  • #20960 Language selection in Updater no longer works
  • #20961 File integrity overlay looks ugly on update screen
  • #21017 Reset password link might be incorrect when using additional login plugins [by @AltamashShaikh, @sgiehl]
  • #21081 Improvements to Others tab on “no data” screen [by @AltamashShaikh, @sgiehl]
  • #21085 Remove jquery.browser plugin [by @sgiehl]
  • #21089 Mark jQueryUI as deprecated [by @sgiehl, @michalkleiner]
  • #20691 Accessible designs for notifications & inline messages
  • #21117 Page evolution chart URLs incorrect when choosing “Display a table with Goal metrics” [by @sgiehl]
  • #21141 [PHP 8.3 compatibility] WARNING: Deprecated – Calling get_class() without arguments [by @sgiehl]
  • #20924 Redesign accept invitation screen [by @AltamashShaikh, @sgiehl]
  • #21091 Matomo tracking beacon not recording mtm_campaign, mtm_keyword (and others) [by @sgiehl]
  • #21132 Make API method VisitFrequency.get working with multiple sites [by @sgiehl]
  • #20475 Fix inconsistencies across dropdown elements [by @bx80, @sgiehl]
  • #17500 useEventValueAsRevenue still ticked after switching goal type [by @sgiehl]
  • #20948 Occasional Error message when Visitor Log is deactivate (regression) [by @sgiehl]
  • #20963 Too long city names might overlap in visitor profile [by @ARSHIL1804]
  • #21051 Evolution graph in acquisitions overview not showing data [by @sgiehl]
  • #21134 I can’t become a “Matomo expert” because it fails to detect my added website [by @caddoo]
  • #21137 User ID segment is available when visitor profile is disabled [by @sgiehl]
  • #21141 [PHP 8.3 compatibility] WARNING: Deprecated – Calling get_class() without arguments [by @sgiehl]
  • #21189 Fix for unexpected zero value last edit dates in segment archiving [by @bx80, @sgiehl]
  • #21203 Fix for ‘Label column not found in the table’ error in archiving [by @bx80, @sgiehl]
  • #21228 Top control drown down elements might be overlapped by table headers [by @sgiehl]
  • #21148 Create new Vue component for testing tracking code installation [by @snake14, @sgiehl]
  • #21187 Schedule reports UI shows wrong action button labels
  • #21200 Error message while accessing tracking code when Tour plugin is disabled [by @sgiehl]
  • #21204 “Plugins” menu item translation error on narrow screens
  • #21274 Upload & install plugin ZIP fails with “Wrong username and/or password.”
  • #20321 Date comparison selector should stay when changing site
  • #21029 Full refactor of site content detection and no data page logic [by @sgiehl]
  • #21265 process general goal metrics if no conversions, but site is ecommerce enabled [by @diosmosis, @sgiehl]
  • #21276 When adding a website, after an error occured, “Save” button remains un-clickable [by @sgiehl]
  • #21635 [Bug] Slow archiving query because of MySQL optimizer making wrong decision
  • #21580 Avoid additional uncached requests to SegmentEditor.getAll [by @sgiehl]
  • #21399 Add method getPageViewId to JavaScript tracker to receive current page view id [by @EPNW-Eric, @sgiehl]
  • #21406 [Bug]: Search icon not showing up on the device report [by @bx80]
  • #21468 Adjust day to fetch new geo location databases when done monthly [by @PowerKiKi, @sgiehl]
  • #21542 Add new plugin subscriptions menu item [by @bx80]
  • #21467 Exclude wbraid and gbraid URL parameters by default [by @tsteur]
  • #21204 “Plugins” menu item translation error on narrow screens
  • #21259 Matomo update check times out at times
  • #21274 Upload & install plugin ZIP fails with “Wrong username and/or password.”
  • #21282 Fatal error: “Call to a member function getColumn() on null” in DataTableRowAction/RowEvolution.php [by @sgiehl]
  • #21283 Rowevolution is showing the ID instead label
  • #21286 GDPR tools doesn’t support Custom Dimensions [by @sgiehl]
  • #21318 When disabling visitor profile feature, then also disable related segment to prevent archiving from failing
  • #21341 Fix for “What’s new” content visible when it shouldn’t be [by @bx80]
  • #21352 Fatal error: Call to undefined method getDataTables in ComparisonRowGenerator.php [by @sgiehl]
  • #21358 [Bug]: In the Visitor Map Piemonte, Italy inherits the visits of Liguria, Italy [by @sgiehl]
  • #21373 [Bug]: Trying to add two strings in DataTable\Row::sumRowArray: 0 + 0% for column revenue_evolution and nb_conversions_evolution in row [by @mneudert]
  • #21446 [Bug]: Blank screen crash when showing update notification [by @bx80]
  • #21451 Fix possible action data loss in segmentation due to signed int32 overflow [by @MichaelRoosz, @sgiehl]
  • #21461 Fix problem with incorrectly placed modals [by @sgiehl]
  • #21506 Fix operator handling in subquery segment values [by @mneudert, @sgiehl]
  • #21510 Preopened popups on dashboard might fail to load their content [by @sgiehl, @bx80]
  • #21515 [PHP 8.x compatibility] Fix possible deprecation warning in ProxyHttp class [by @sgiehl, @caddoo]
  • #21555 Fix “revenue per visit” calculation [by @mneudert]
  • #21594 [Bug] No Data screen for SPAs contains hidden space in variables [by @sgiehl]
  • #21598 Fix problem with metric formatting in cloud visualization [by @sgiehl]
  • #21612 [Bug] Ecommece Overview revenue chart broken with change from SEK -> KR [by @mneudert]
  • #21627 [Bug] System Check: Mouse over text no translatable [by @sgiehl]
  • #21628 [Bug] i18n: German mouse over has issues with ö [by @sgiehl]
  • #21637 [Bug] PHP Deprecated Creation of dynamic property [by @sgiehl]
  • #19774 Logged in but you don’t have any permission should not HTTP 500 [by @sgiehl]
  • #20283 Improve our “What’s new” feature to increase visibility
  • #20537 Archiving error when getmypid function is disabled [by @sgiehl]
  • #20585 Fatal error: Impossible to invoke a method (“getRows”) on a boolean variable in _dataTableViz_htmlTable.twig [by @sgiehl]
  • #21247 Implement new layout for no data screen [by @sgiehl, @caddoo, @michalkleiner, @mneudert]
  • #21265 process general goal metrics if no conversions, but site is ecommerce enabled [by @diosmosis, @sgiehl]
  • #21276 When adding a website, after an error occured, “Save” button remains un-clickable [by @sgiehl]
  • #21279 Hide page performance row action on totals row [by @sgiehl, @bx80]
  • #21365 [Bug]: Translation strings missing in 5.0 for user feedback text
  • #21452 Exclude twclid URL parameter by default [by @tsteur]
  • #21495 Escape underscore in archive name when used in like query [by @sgiehl]
  • #21522 Fixing PHP 8.3 deprecation error [by @snake14, @bx80]
  • #21526 Tabs in glossary are not rendered correctly [by @sgiehl]
  • #21573 [Bug] Fatal error: Call to a member function getSqlSegment() on null in Segment.php [by @sgiehl]
  • #21605 Move plugin related sub menu items to new Plugins menu item [by @sgiehl]
  • #662 [Enhancement] Add option to NOT copy from Google dataLayer when loading Matomo datalayer (_mtm)
  • #699 Implemented setEcommerceView [by @EPNW-Eric, @AltamashShaikh]

We are together creating the best open analytics platform in the world. You can help make Matomo even more awesome by getting involved in Matomo!