Releases: EvoEsports/minicontrol
MINIcontrol 0.10.0
This release focuses on improving responsiveness under heavy traffic, reducing event loop blocking, and streamlining multi-call and UI display code for better overall performance and reliability.
This is probably the last big point release version before releasing MINIcontrol 1.0.0.
0.10.0 has been a long time in the making and has been battle tested during the Kacky spinoff event, which helped @reaby figure out many performance shortcomings and fixes for them. Huge props for this massive release to him!
Check out the full changelog below:
Core
Code in the core was refactored to use consistent double quotes for string literals across multiple files
We also added a versioning script and added a version.json file for build tracking (will be used starting from next build for update checks)
Improved XMLRPC Query Handling
– Revised the query method to better handle both waiting and non‐waiting calls by registering dummy callbacks so that responses are properly discarded
– Updated header/handle management to avoid race conditions and ensure consistent payload creation
– Added performance counters for debugging XMLRPC traffic, queries and callbacks
– TCP buffer now waits to drain on write to stabilize XMLRPC connection
Enhanced Socket & Data Processing
– Modified the handleData loop to yield control periodically (using setImmediate) so that heavy bursts of responses no longer block the event loop
– Added progress checks in the data loop to prevent infinite loops when incomplete messages arrive
Optimized Multi‐call and Send Queue Mechanism
– Refactored the flushSendQueue routine to use a self-scheduling timeout (with chunking) instead of setInterval, avoiding overlapping flushes
– Batching of send calls via multisend was improved to reduce serialization overhead and prevent the send queue from filling inaccurately
– Implement block callbacks for Trackmania to reduce XMLRPC calls for 100+ players
– Refactored script method calls in GbxClient and Server - callScript now returns the answer with 1 second timeout, added sendScript method for improved handling
UI Manager Enhancements
– Redesigned displayManialink(s) methods to handle public and player-specific Manialinks more efficiently, ensuring older or duplicate manialinks are cleaned up properly
– Consolidated common code paths and improved asynchronous processing for rendering and sending Manialink XML payloads
– Fixed memory issues with handling Manialinks
Plugin System & Overall Stability
– Upgraded plugin dependency checking and loading/unloading logic, ensuring plugins are loaded only if dependencies are met (and cleaned up correctly during unload, unload still disabled)
– Various performance improvements and bug fixes across the system to improve responsiveness and stability under high load
– Change to use exact plugin name instead startingOf when using EXCLUDED_PLUGINS= environmental variable
Database
- Added fixes for xaseco migrator
- Add tables:
sectors,personalBest - Add indices to safeguard uniqueness on tables with uuid and login
- Add few new fields for
playerandmapstables
Managers and Settings
- Add
//colorsto settings, adds color:¤db¤ - Added a
widgets.performancesetting with a default value of 35 players, if there's more players than the configured value thecheckpoint widgetandsector records widgetstop sending updates andrecords widgetchanges to public updates only. - Add settings for TMNF HUD elements
- Fixed issues with player and map management.
- Fixed command manager to ignore case for chat command
- Add
tmc.maps.getTimeInfo()to get timings info about maps - Fixed UTF-8 error on Manialink multicall when joining server
- fixed
htmlentitiesto escape full UTF-8 range - Add
GetAllLogins()to playerManager - Add
GetCountryFromPath(path)to utils.ts - Fixes
//addlocalto work with Windows host systems - Adds
//pluginsto show enabled/disabled plugins
Plugins
Announces
- Announces now show custom nicknames
- Added settings for new and improved record thresholds
- Added new/equal/improvement messages for dedimania
Chat
- Introduced a profanity filter and improved chat functionalities.
- Adds admin badge
- Add announce message for celyan's emotes support
- Include +++ and --- as valid karma vote
- Use customNick instead of just normal nickname
- Autolink urls: surrounds urls with
$l - Update TMNF emotes support to version 2025-04-25
Database
- Added
totalPlaytimeandconnectCounters - Added
/activeand/topactivecommands to show playtime - Fixed: Adding customNick to player objects on connect
Dedimania
- Fixed Dedimania reconnect on failure
- Fixed Dedimania widget + made dedimania widget enabled by default (add
widgets/dedimaniatoEXCLUDED_PLUGINSto disable) - Fixed comparison logic to allow equal times
- Fixed Dedimania map uid validation
- Fixed Dedimania announce that you beat "0." record when you equal last dedimania record
DebugTool
- Enhanced memory management with safeguards against excessive memory usage
- Add performance counter: update every 5 seconds when
DEBUG_GBX_COUNTERS=true - Adds .env variable
DEBUG_GBX- when true, shows GBX callbacks
Menu
- Menu was rebuilt and redesigned from scratch
Maplist
- Fixed searching by author
- Added
/list nofinishand/list finish - Added [remove] button for admins
Sectors
- Added
/sectorscommand - Added
//sectors delmapand//sectors delall - Sector records are now cached at runtime and only saved to the database at the end of a map for performance improvements
Records
- Postponed registering of events onStart and after reading records and fix for out-of-range check for record, which will fix the duplicate constrain errors for database
- Personal bests are now cached at runtime and only saved to the database at the end of a map for performance improvements
- Enhance sorting on exact same time driven for records widget
Votes
- Added color
¤vote¤for vote messages - Fixed time limit reset on extends
- Added restart vote
/restart
MINIcontrol 0.9.0
Important
This release includes the first version of MINIcontrol's new SettingsManager.
Many settings previously configured via .env or Environment Variables have been moved to the settings manager, you will have to set the proper values there again.
New features
- Added Setings Manager, available via
//settings
Attention Developers: Going forward, adding plugin settings to.envis deprecated.
Please see documentation on how to expose your plugins settings for the settings manager. - Added TMX world record data to current map widget.
- Added settings whether locals/dedis/player joins should be announced in chat or not
- Added Admin panel widget - can be disabled in the settings manager
/helpand//helpnow display in a beautiful UI window instead of in chat
Bug fixes and improvements
- Fixed Maplist Fetch Rank when MINIcontrol is using a MySQL database
- Dedimania should no longer block MINIcontrol starting up if it is slow to respond
- Added a 1 second timeout to TMX info fetcher - can be disabled in the settings manager
- Fixed an issue with extending a map's timelimit when the ATime plugin is enabled
Other notable changes
//callis moved from Admin plugin to MINIcontrol's core, meaning it will work without the admin plugin active- Using
//callwithout parameters now shows a help window - Chat colors as well as badge colors (default red for admins) can now be changed in the settings manager.
WorldRecordsplugin has been moved totm2020namespace.LiveRecordsplugin has been renamed toLiveRankings
Developer improvements
- TMNF Custom UI now has a better API, you can access it via
tmc.ui - Fixed an issue with
ListWindowpropagation
MINIcontrol 0.8.1
Bug fixes and improvements
- Fixed
"and'characters in nicknames, mapnames, etc not being properly escaped, causing issues in widgets and UI windows - Fixed non-working /players window
- Fixed Live Records not working without database
- Several small bug fixes for Records and LiveRecords modules
- Updated package dependencies for
mysql2andsentry.io- requiresnpm installif not running via Docker - Updated server admin and developer documentation
- Removed unused scripts from
package.json
MINIcontrol 0.8.0
Happy 1 year anniversary to MINIcontrol!
On December 28 2023 @reaby started with the development of a small, modular controller for TMNF, TM2 and TM2020... and so, MINIcontrol was born.
We're thankful to everyone reporting bugs, sharing feedback, requesting new features and helping us improve the controller for you, the community.
Just in time for the anniversary, we've prepared a major new update.
See the changelog below for more information and see you in 2025 for more updates coming your way!
Important
Due to changed dependencies, server admins who run MINIcontrol outside of docker need to run npm install again after upgrading to this version.
New features
- [TMNF] UI has received a bit of a facelift
We're quite happy with where MINIcontrol's User Interface design is at now, so don't expect too many drastic changes in this regard - [TMNF] Added support for Celyan's Emote Mod
- [TMNF] Added missing legacy methods for changing Rounds, Team and Cup game mode settings
- Added a fix for the "Cannot connect to server: already connected" dedicated server bug
- Added the ability to search (T)MX for maps via
//searchcommand - Added new admin commands to view and clear contents of
BanList,BlackList,GuestListandIgnoreList
Bug fixes and improvements
- [TMNF] Clicking the "Add To Favorites" widget now no longer disconnects you from the server
- [TMNF] Fixed the TALimit plugin to not start the timer during Warmup
Other notable changes
- Due to technological difficulties, we've disabled the plugin manager and the ability to load/unload plugins during runtime for now
- Increased Event Listener limit from 50 to 100 per event - this should improve the ability of server owners to run many many plugins at the same time
- Fixed some Typescript types in the migrations
- [Plugin Development] Deprecated the usage of
escape()in the project - please usehtmlEntities()instead - [Plugin Development] [TM2020] Added
tmc.ui.setClipboard(login,contents);for setting a player's clipboard content - use this wisely - [Plugin Development] Excluded
node_modulesfrom VSCode Workspace - [Plugin Development] Renamed all templates from
.twigto.xml.twigto enhance compatibility between IDEs
MINIcontrol 0.7.1
MINIcontrol 0.7.0
New features
- Added/changed plugin - WorldRecords - Live Rankings, Local Records and World/Dedimania records in one widget
- Added support for TM2020 Leaderboards in Records widget
- Added plugin - Pay2Play - allows you to define a copper/planets amount for requeueing or skip the current map
- Added plugin - Add Server To Favorites - self-explanatory
- Added feature - Sentry Error Reporting - automatically sends anonymized error reports to Sentry.io for us to analyze
To opt-out of error reporting, setERROR_REPORTING=falsein your .env file. - Added command - /checkpoints shows additional information from the BestCPs widget
- Added PyPlanet migration script to allow you to easily migrate from existing PyPlanet installations (MP/TM2020 only)
Bug fixes and improvements
- Several small bug fixes and improvements to stability of MINIcontrol
Important note
- MINIcontrol now requires a NodeJS version of at least 21.5.0. We recommend you use the latest LTS version.
MINIcontrol 0.6.1
General bug fixes and improvements
- Chat commands like /extend should work properly again
- New widget and window style
- Dedimania records now get announced in chat
- [TM2020] Moved built-in Laps and Checkpoint counter to the bottom right
Developer improvements
- You can now use class aliases again in your plugins - e.g.
@core
MINIcontrol 0.6.0
General bug fixes and improvements
- Fix checkpoint counter becoming desynced from player state
- Fix server authentication when dedicated server
Userpassword is non-default - Fix //talimit not working in TMForever and other improvements for TM2020
- Adding maps via TMX has been improved by fetching map details from the dedicated server instead of relying on the TMX api.
- TM2020 records widget has been reduced in size and several native UI widgets are now hidden by default as MINIcontrol replaces them.
- Admins can now write in chat even if public chat is disabled
Map parsing changes
- Improved error handling for map parsing - thanks @tomek0055
//addlocalcommand and manialink window has been sped up by only parsing the map headers instead of the full map files- Fix map headers sometimes containing odd characters due to bad latin-1 -> utf-8 encoding
New commands and plugins
- New commands:
//requeueand//prev- Lets admins restart the map after it ends and go back to the previous map - thanks @MRegterschot - New plugin:
ATime- Lets admins set a dynamic timelimit based on the AuthorTime of the next map and a configurable multiplier - New plugin:
nadeocloud(TM2020 only) - Allows campaign downloads from Nadeo's infrastructure - thanks @MRegterschot
Developer improvements
- Added
.editorconfigfile for IDEs that support it - Folders that start with a dot now are no longer recognized as plugins, so MINIcontrol finally stops trying to load the
.gitfolder - Plugins can now install their own dependencies via
node_modules
Note: You must set the plugin'spackage.jsonto usetype: "module"or the plugins won't load - Improved the
meminfodebug display. It now shows a diff compared to the start value, not the last value - Command manager now allows for spaces in commands, e.g.
/jukebox drop
Note: Commands with spaces cannot share their first "argument" with another command, as those would override a command containing a space.
MINIcontrol 0.5.0
Breaking changes
- Changed license to GPL3 due to usage of LZO library to parse track files.
- Add new
tmnf/forcemodsplugin which replacestmnf/ui
Minor changes
- Add Environment / Car parsing to
/list(requiresdatabaseplugin to be enabled) - Add new
/liststyling. (Not final, please give us your feedback) - Map Queue (available via
/jb) is no longer part of the Maps list (available via/list) and is now a separate plugin. - Added new admin command
//chat <on/off>to disable public chat. This feature was ported from Kacky servers. - Added new admin command
//chat login <on/off>to disable player chat. This feature was ported from Kacky servers.
Notes
The new tmnf/forcemods plugin adds several new config parameters. See .env.example for reference.
The plugin will be made compatible with Maniaplanet in the future.
MINIcontrol 0.4.0
Breaking changes:
- Switched runtime from Bun to Node.js & tsx
- Switched ORM from drizzle to sequelize
- database support added for mysql, postgres with sqlite still supported
- new environmental variable: DATABASE is introduced, check .env.example for how to setup
- also there is few schema changes for database, recommended to start a new database or do a manual changes
Note for plugin developers
Your plugins will need to be updated so that all imports use relative paths with this release. We're sorry for the inconvenience.
Other changes and fixes:
New: Added /endwu command for TM2020 servers. Ends the currently running warmup.
New: Added /cancelpack command to interrupt pack downloads from (T)MX.
Improved: Maniaplanet compability
Bugfix: Dedimania works again on TMNF / TMUF
Bugfix: XAseco database migrations should work again with this release
Bugfix: Confirm dialogues now correctly show up only for the person who initiated the action instead of all connected players
Bugfix: Maps that were removed from the server that were still in the jukebox won't result in a crash anymore
Bugfix: Checkpoint counter fixed for multilap maps