5.8 build 3579
This is a hotfix for a database clean task error
Previous change log
https://github.com/plan-player-analytics/Plan/releases/tag/5.8.3577
Migration guide from 5.7 to 5.8
https://github.com/plan-player-analytics/Plan/wiki/Migration-guide-from-Version-5.7-to-5.8
Change log
Bugfixes
- Fixed database clean task error when there were no plugins to clean
5.8 build 3577
This update brings new features, refreshes to old features, as well as a big bunch of bugfixes and improvements.
Quick rundown of new big things includes MSPT Jitter, overhauled server performance tab with new performance metrics, overhauled session tabs, date pickers and partial dataload via datapoint endpoint.
Fabric was also updated to support minecraft 26.2 and above.
Special thanks to AnttiMK & Minecraft0122 for contributions to this update
Migration from 5.7
No manual steps are required. Older versions may fail a scheduled task due to plan_settings table removal, but that error can be safely ignored. Migration guide to 5.8
Change log
Data gathering
MSPT Jitter (new metric)
MSPT Jitter (Average, Max) is new gathered performance metric. - Jitter is calculated from difference between subsequent tick speeds (milliseconds per tick) Example: MSPT of 35, 36, 34, 80, 37 -> Jitter = 1, 2, 46, 43 -> Average=23, Max=46. Average and maximum for each minute is recorded.
High jitter indicates that tick speed varies greatly between ticks, and can be used along existing MSPT metrics to further assess how high load affects gameplay.
Database (Breaking changes)
Website
- Removed plan_settings table (breaking) - This table facilitated serverConfiguration folder on Networks, which has now been removed. - Old versions will error upon trying to store settings. If you need to use older versions those errors can be safely ignored.
- Added plan_incomplete_registration table - This table now allows the last step of /plan register to work on any server, when previously it only worked on the server Plan webserver was running on.
New performance metrics
Performance tab was rewritten to include more interesting metrics that reflect how players and chunks impact server load. The impact of players on Entities and Chunks was also taken into account since some servers unload all chunks without players present.
There is now a help button available on the Performance as Numbers card to explain each metric.
Updated Server Performance graph
Server performance graph is now less jumpy and you can select any of the data you want to see rather than just some, using either presets on the left, or the labels at the bottom.
New sessions tab
Sessions tab was rewritten on all pages (Network, Server, Player) and it now gets you up to 10k sessions, which can be searched further and exported as CSV. You can choose a date range using the session calendar or the new date picker component.
All of the data on session page will reflect the selected dates. All ongoing sessions within selected date range are shown, even if they didn't start within the date range, but before it.
On the Export website this feature is not available and defaults to most recent data (Similar to before)
Other
Bugfixes
- The new date picker component is in use anywhere you can input dates to a text field (Query page)
- Servers overview (Network) now loads a lot faster (It only gets the data for the server you're looking at)
- Server overview, Network overview, Online Activity overview, Sessions and Performance tabs all got their number tables changed to get individual values independently from each other.
Fabric 26.2
- Fixed some IPv6 setups being unable to login
- Fixed Average MSPT not showing if MSPT was under 1ms
- Fixed Hour by Hour showing Daily new players and not hourly
- Fixed date saying 'Today' if it was in the future
- Fixed Alternative_IP.Address changes not being reflected in Javascript due to Cache policy
- Fixed boolean Extension values causing 'variable t not found' error.
- Fixed component Extension values erroring
- Fixed redirects on reverse-proxy setups with subdirectory addresses
- Fixed value not defined error on Playerstable when showing time or date from plugin data on player table
- Fixed stacked players online graph not stacking
- Fixed Players Online tooltip going under table headers
Settings
- Updated to Fabric 26.2 which required no API changes.
- AnttiMK implemented Fabric 26.1 support. 1.21.9-1.21.11 are no longer supported by this version.
Locale
- serverConfiguration folder and related config sync features have been removed on Networks.
- Display_options.Sessions.Show_on_page setting has been removed
- Changed default value for Time.Thresholds.Remove_time_series_after to 3650 on Bungee/Velocity (Default is not automatically replaced)
Extensions
- CN locale updated by Minecraft0122
Placeholders
- Fixed error related to Folia and CMI extension
- Fixed error related to deleting disabled extension data
Other
- Fixed error on top list placeholders for playtime or kill count
Webserver: /v1/datapoint
- Added database transaction queue information to /plan info command
- Fixed deadlock related to ban status update task
- Fixed /plan db uninstalled printing "success" before completing properly
- AnttiMK updated Java compile options so that test code can use features from newer JDKs
- Optimized Playerbase development graph generation query
- Optimized Players online peak query
- Possibly fixed TPSTableIdPatch failing on SQLite due to table lock
To implement dynamic date based filtering, new endpoint /v1/datapoint was implemented. It makes implementing new single-value metrics a lot easier, since it's possible to produce tables of metrics by just defining a column 'time slot' and each row as a metric - you can already see impacts with the new metrics that were already added. This endpoint will be further expanded upon in the future.
This endpoint takes in after/afterMillisAgo, before/beforeMillisAgo and server or player parameters. server parameter can take in multiple server uuids comma separated. The endpoint returns 200, 302 (cached by browser) or 400 (invalid type). Please use ETag for caching if calling this endpoint from program code.
Example /v1/datapoint?type=PLAYTIME&afterMillisAgo=86400000&server=uuid will get you playtime for last 24h on a server.
All the supported datapoint types can be found from https://github.com/plan-player-analytics/Plan/blob/master/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/datapoint/DatapointType.java
Deprecated endpoints
Following endpoints are deprecated in favor of the new /v1/datapoint endpoint:
- /v1/serverOverview
- /v1/network/overview
- /v1/network/servers
- /v1/onlineOverview
- /v1/sessionOverview
- /v1/performanceOverview
- /v1/network/performanceOverview
Accessing the deprecated endpoints will print a warning on the console (Due to performance impact).
New Web permissions
/v1/datapoint uses new web permissions data.player, data.server, data.network (and further subdivisions) to control visiblity. These permissions are granted automatically based on existing permissions:
/v1/datapoint will also check for access.player and access.player.self if looking for player specific data.
- access.network -> group is given data.network
- access.server -> group is given data.server
- access.player -> group is given data.player
5.7 build 3306
Hotfix for config update bug in build 3288.
Change log
- Fixed config resetting some values to default on reload
- Fixed table sorting with alphabetical things
- Minor dependency updates
- CI pipelines for releasing to Ore, Hangar and Modrinth
5.7 build 3288
This release contains bugfixes to build 3265 and a new theme.
Special thanks to Kopo, Leolebleis & Guinness_Akihiko for contributions to this update
Change log
Website
Fabric
- Improved readability of World Pie on servers that have over 7 worlds
- Improved readability of Server Pie on networks that have over 7 servers
- Moved Performance graph loading to Web Worker (async threading in browsers) - This should improve rendering times slightly
- Fixed issue where Join Address Groups would reset when using HTTPS
- Fixed a couple of instances where Trend was not properly showing
- Fixed 'showPlayersOnline is not defined' when viewing network page on networks with multiple Proxy servers
- Fixed a bug with Change history floating on top of the Save button in Theme Editor when using Night mode.
- Fixed CUSTOM locale defaulting to Chinese locale for time/date/country localization due to "Best match" in browser matching.
- Fixed Swagger documentation not showing
- Fixed 'New player retention' label in Server overview
- Fixed typo in a locale key
- Fixed Low TPS Insights showing entities instead of CPU
- Leolebleis fixed reverse-proxy https address not being recognized as correct address
Kopo updated Fabric to use Mojang mappings (Tested with 1.12.9-1.12.11)
Themes
Added solarized theme based on https://github.com/altercation/solarized
![]()
Config
Locale
- Possibly fixed a race condition that caused server identity to be reset, creating duplicate servers when server was shut down during Database patching
- Fixed trailing comments removing part of config setting value.
- Fixed some config changes being applied every time
Other
- Guinness_Akihiko updated KO locale
- Builds now require JDK 25 for switch to Mojang mappings.
5.7 build 3247
This update brings a big bunch of new features and improvements, such as Theme Editor, Milliseconds per Tick, Players online -tooltip, Database move/merge rewrite and many others.
Special thanks to Kopo, SaolGhra, TWJohnJohn20116, Shadowhackercz, Vankka, DrexHD, Jsinco & julianvdhogen for contributions to this update
Change log
The theme settings have changed.
See https://github.com/plan-player-analytics/Plan/wiki/Migration-guide-from-Version-5.6-to-5.7 for what might need changing in the config.
Website
Fixed vulnerabilities
- Fixed potential XSS injected through malicious plugin. (User would have had to click the link to activate XSS) What is XSS
- Fixed potential Session hijack vulnerability after successful XSS where attacker could read authentication cookie through javascript.
- It is recommended to run /plan logout * after the update to protect against this vulnerability, even if the sessions will eventually expire.
There has not been reports of exploitation of these vulnerabilities.
Theme Editor
You can now create your own themes for Plan without needing Html Customization. This is the main new feature of this version and is documented here.
MSPT (Milliseconds per Tick)
- theme.yml has now been deprecated and will be deleted if it only contains default values
Milliseconds per Tick (average/95th percentile) have been added to performance metrics on all applicable platforms.
Players online -tooltip
You can now hover over Players online graph to see who was online at specific time (up to 63 players).
Query page improvements
Performance graph improvements
- New filters have been added
- Played on date
- Activity group on date
- Last seen between
- All 'between' filters now support 'Before' and 'After' by deselecting one of the checkboxes (e.g. played between -> played before)
- Multi-select components have been replaced with a mobile friendly, text searchable alternative that no longer requires pressing Shift for multi-selection
- Fixed timezone inconsistency between View time input fields and the graph
Other
- Performance graph tabs now sync the graph range-finder so that you can view different data for same time easier
- Network performance graph colors now vary between servers to be easier to read
- Fixed extra Series label appearing in HTTP mode on Performance graph (This was the plugin version history series in HTTPS mode)
- Added Uptime data to Performance as Numbers tables
- Kills table can now be searched/sorted/exported and gets up to 25000 entries from the database
Config
- Added support for nickname search in player tables
- Fixed some night mode text invisibility issues
- SaolGhra fixed error r.includes is not a function related to Litebans
- Fixed 'View full query' button in the modal that opens when clicking Server calendar
- Fixed clicking Server calendar results including players who played on other servers during selected days
Data
- Changed default Display_options.Player_head_image_url to https://crafthead.net/helm/${playerUUIDNoDash}/120 (Existing configs need to be manually updated)
- Jsinco updated 'Data_gathering.Join_addresses_.Filter_out_from_data' to support regex. Note that any existing setting values with . (dot character) will now match any character.
- Display_options.Theme (default "default") now refers to theme name in the theme editor rather than "What theme.yml to copy values from"
- Display_options.Night_mode (default false) added
Sponge
- MSPT average and 95th percentile added to plan_tps table
- Register date 0 (1970-01-01) is now regarded as invalid.
- Ban status is now updated by an automatic task that cycles through all known players small amount at a time
Fabric
- Sponge API 14 is now used, API 8 is no longer supported.
Velocity
- Fabric was updated to 1.12.9 by DrexHD (Supports 1.12.11 as well)
Database
- Velocity was updated to 3.5.0-SNAPSHOT
Database move system rewrite
Rewrote the system responsible for copying data from one database to another since previous system would crash under large datasets. The goal of this was to allow copying large SQLite databases to MySQL even on larger servers. The system was tested against a 3 GB MySQL database on a server with 1 GB of allocated memory. (Sidenote: Please don't try to run your server off 3 GB large database.db SQLite file)
Other
- /plan db move, /plan db backup, /plan db restore use the new system
- Added /plan db merge command (permission: plan.data.merge) which allows merging SQLite data to existing MySQL. This is useful for those merging multiple servers into a network when all servers had Plan installed on separate SQLite databases.
Locale
- id column added to old plan_tps tables that did not have it yet via Patch.
- Lock hints for selections inside transactions to reduce deadlocks
- Fixed 1020 "Record has changed since last read in table" error on MariaDB 11.8.3
- Fixed dyplicate key violation related to AllowListBounce
- Possibly fixed ShutdownDataPreservationTransaction failing on existing join address insert
- Fixed playtime queries where session started before view window or ended after.
Extensions
- Dates, time amounts & country names are now translated based on the selected locale. (If specific ones aren't please report it as a bug)
- HighCharts & Calendar are now translated based on the selected locale
- TWJohnJohn20116 updated zh_TW locale
- Shadowhackercz updated CS locale
- julianvdhogen updated NL locale
Placeholders
- Fixed ArithmeticException related to LibertyBans when bans were infinite
- Fixed an issue related to rendering boolean values
- Updated Jobs extension to support newer version
- Added Time.Periodical_tasks.Extension_player_data_refresh_every setting (default 15 MINUTES) which only affects plugins that decide to support it.
- Made gathered PlaceholderAPI data update periodically
Other
- Fixed network_players_online always saying 0
- Added Typescript support.
- Vankka updated DependencyDownload to clean up libraries folder of old versions
- Kopo updated the build system to speed up builds & IDE indexing performance
5.6 build 2965
This build has a second hotfix for SQLite performance regression since it was reverted to wrong version that still had the regression.
Please see https://github.com/plan-player-analytics/Plan/releases/tag/5.6.2959 for change log of the previous version.
Change log
- Reverted SQLite driver to version 3.42.0.1 due to performance regression (Thanks to Vankka for pointing out my mistake)
5.6 build 2961
This build has a hotfix for SQLite performance regression.
Please see https://github.com/plan-player-analytics/Plan/releases/tag/5.6.2959 for change log of the previous version.
Change log
- Reverted SQLite driver to version 3.45.1.0 due to performance regression
5.6 build 2959
This is a maintenance update with bugfixes and updates to dependencies.
Special thanks to Kopo, YannicHock & Zaemong for contributions to this update.
Change log
Commands [action required]
SQL Driver download address change
- /plan and /planproxy now require plan.command permission to be used. This is to allow hiding /plan from tab completion, since it showed up even if a player had no access to any of the subcommands.
Platform specific
- PaperMC changed their maven repository address so Plan now downloads SQL drivers from https://repo.papermc.io instead of https://papermc.io/repo - This is mentioned since some users use firewall to block external connections.
Website
- Fabric now uses 1.21.3 api, 1.21.4 also still supported. fabric-permissions-api 0.3.3 now required. Thanks Kopo
- Fixed Nukkit incompatibility with EntityTameable being moved to a different package
- Fixed Folia ConcurrentModificationException related to ping task
- Fixed Folia region tick thread crash if another plugin was using Plan placeholders on server thread
Database
- Fixed Calendar being one day behind when server timezone was set to negative GMT, eg. GMT-8.
- Calendar now responds to selected language on the UI
- Fixed Calendar popup going under Sidebar
- Fixed some countries not appearing on the map due to missing country name -> ISO-3166 alpha-3 translation
- Added web permissions for different Server Performance graph data types. This allows configuring permissions for viewing TPS graph and nothing else.
- Fixed Logo image not loading when using reverse-proxy with a subdirectory
Config
- Fixed CorrectWrongCharacterEncodingPatch applying to non-Plan tables in the same database.
- Fixed ping insert duplicate key error
Extensions
- Increased default time series data retention to 10 years (3650 days) - previously 90 days. Does not change existing configs.
- Removed &useSSL=false from default MySQL Launch_options. Does not change existing configs.
Locale
- StringProvider can now store values up to 250 characters long before truncation.
- CMI Extension added by YannicHock
Placeholders
- Fixed French (FR) locale causing website loading issues
- Japanese (JA) locale updated by Zaemong
- Catch any exceptions that occur during placeholder request to not cause problems in other plugins using Plan placeholders
- Added %plan_top_{category}_{n}_value_raw% placeholders for unformatted values (Useful for custom time formats)
- Added %plan_server_players_online% and %plan_network_players_online% placeholders that show the latest data in the database (~1 minute accuracy)
Change log 5.6 build 2883
This release brings redesigned join address visualization, Folia support, updates to Fabric 1.20.5, quality of life features and fixes some bugs.
Special thanks to jhqwqmc, Sniper_TVmc, mcmdev, DrexHD and ZhangYuheng for contributions to this update
Change log
Fabric
Folia
- Fabric support was updated to 1.20.5 by DrexHD, older fabric versions are no longer supported as Fabric 1.20.5 requires Java 21
Config
- Folia support was implemented by ZhangYuheng. Please note that sessions from Folia servers will have incorrect world times on Folia since the platform doesn't support PlayerWorldChangeEvent yet.
Website
- You can now configure Plan using environment variables. This can be useful for those running servers in docker environments. Examples:
- Plugin.ServerName -> PLAN_PLUGIN_SERVERNAME
- Database.MySQL.Password -> PLAN_DATABASE_MYSQL_PASSWORD
- ServerInfoFile.yml is also supported, eg. PLAN_SERVER_ID, PLAN_SERVER_UUID to have specific servers keep their identity if your server destroys all files on shutdown.
- With string lists variable needs to be format "- One\n- Two" where \n is newline
Redesigned Join Address visualization
Join address visualization was difficult for servers with 100s of join addresses. With the redesign you can select multiple addresses as a group to be visualized, and rename it to your liking. This can help you track different advertising campaigns and server list entries across time.
The same selectors are used on the Player Retention graph when you are grouping registered players by Join Address.
The address groups you make are linked to your user if you have login enabled, or stored to browser localstorage to keep them even if you close the page.
In addition:
Editing Queries
- It is now possible to disable join address gathering in the config
- It is now possible to filter out specific addresses from the data in the config. This can help if you have a geyser server that isn't configured to forward hostnames, since the geyser server IP would appear in the data instead.
- Join addresses that don't look like IPs or domains are now automatically filtered out. You can disable this behavior with Preserve_invalid setting.
Commands
- You can now press 'Edit Query' on the Query Results page to change the filters and view. This can be useful if you want to quickly select a timeframe from calendar and then filter the results further with other filters.
Database
- Fixed permissions not being checked for tab completion of commands which allowed players to get list of player names via tab completion.
Export
- Fixed duplicate key exception during enable in some rare cases related to UpdateWebPermissionsPatch
- Fixed CorrectWrongCharacterEncodingPatch failing on mysql.user table being a view
- Fixed error storing access log when IP was spoofed (Longer than IPv6)
Placeholders
- Fixed allowlist bounces data not being visible on exported pages.
Extensions
- Added %plan_server_uptime% placeholder
Locale
- Composite punishment support was added to LibertyBans Extension by mcmdev
- You can now configure PlaceholderAPI values that you want to ignore from other plugins. This is useful if some plugin doesn't report placeholder value after player leaves the server.
- Placeholders that aren't replaced are now no longer stored as a changed value.
- French (FR) locale was updated by Sniper_TVmc
- Simplified Chinese (CN) locale was updated by jhqwqmc
5.6 build 2820
This build contains some bugfixes to things that were missed in last release. If you missed that, here's the change log for that
Special thanks to jhqwqmc for contribution to this update
Change log
- Fixed a error in extension boolean storage when using SQLite. A minor bug, but spammed the console a bit.
- Fixed Join Address not appearing on the /plan ingame command due to formatting error
- jhqwqmc updated Simplified Chinese Locale (CN)