Release notes

SmartFoxServer 2X

All patches between two full releases are cumulative - installing the latest one provides all the previous fixes within that minor version number.

VERSION 2.19.0 (full installer)

::::: Server Side :::::
[NEW] Tomcat i updated to version 9.0.70.
[NEW] GeoLite database updated.
[NEW] Extension Flood Filter added, which allows to configure Extension calls rate limits on a per-request basis.
[FIX] GameAPI sending an invitation from the server side raise an exception (using null as the inviter object).

::::: Admin Tool :::::
[NEW] In login view, port and encryption checkbox are set automatically based on the URL protocol.
[FIX] Menu button on mobile devices partially not working due to notifications container covering it.
[FIX] In Dashboard module, server uptime slowly diverges if browser window is minimized or loses focus.

======== Previous versions ========

VERSION 2.18.4 (patch)

::::: Server Side :::::
[FIX] Rare issue where a packet of size < 65536 bytes (16 bit size) before encryption could exceed the 16 bit size after encryption, resulting in a truncated packet.


VERSION 2.18.3 (patch)

::::: Admin Tool :::::
[NEW] Under Server Configurator > Remote Admin it is now possible to use an IP range (using CIDR notation) in the "Allowed client IP addresses" setting.
[FIX] When editing a configuration parameter featuring a modal edit panel, hitting the enter key would cause the AdminTool to be reloaded.
[FIX] In Analytics, error in log processing for long Room life-cycles (life-cycle >= 24 days).
[FIX] In Analytics, when launching log analysis process, locale forced to English instead of system's default.


VERSION 2.18.2 (patch)

::::: Server Side :::::
[NEW] QuickJoinOrCreateRoom request allows to join a Room by matching its variables to a specific Match Expression. If no match is found a new Room can be created and joined immediately. The request is available in both the client and server-side API.
[NEW] suppressUserList option for Rooms, suppresses the room list upon joining a Room as well as removing the USER_ENTER, USER_EXIT events. It can be used in special cases where Rooms are not used for User interaction, to save bandwidth.
[NEW] SFSApi.emptyRoom(...) allows to remove all users from a specified Room.
[NEW] Client side LagMonitor can be configured to work as a keep-alive mechanism. By default it is turned off. It can be activated via AdminTool > Zone Configurator > General > Enable Keepalive.
[FIX] Issue when sending error codes from server side, causing a cast exception on the client side with a subgroup of client side errors.


VERSION 2.18.1 (patch)

::::: Server Side :::::
[FIX] In the SignUpComponent's Password Recovery feature the new password would not be updated in the database.
[FIX] Incorrect logging settings for the Analytics component.
[FIX] A config setting in the Tomcat manager servlet that would not render the manager accessible from external addresses.


VERSION 2.18.0 (full installer)

::::: Server Side :::::
[NEW] Native support for Apple's M1 chips.
[NEW] Java Runtime 11 is the default JRE now.
[NEW] Tomcat updated to version 9.0.55.
[NEW] Java Mail updated to version 1.6.2.
[NEW] GeoLite database updated to latest version.
[NEW] RoomStorage API now support a 'CUSTOM' type where you can pass your own implementation of the IRoomStorage interface.
[NEW] Added two extra methods to SFSBannedUserManager, getBannedUserByIp() and getBannedUserByName(), to find banned users.
[NEW] Send ROOM_CREATION_ERROR to client when exceeding the number of Rooms that can be created at once.
[NEW] Added new setting UseSSL in SFSMailer configuration.
[FIX] Missing default value (50sec) for userMaxLimboSeconds to CreateMMORoomSettings.
[FIX] Missing client side error when QuickJoin is invoked in a Zone with no Rooms.

::::: Admin Tool :::::
[NEW] Added maxThreads and maxConnections parameters to Server Configurator module, Web server tab, for both HTTP and HTTPS Tomcat connectors.
[NEW] In Zone Monitor, added a "reason" field when banning a user.
[NEW] In all modules based on the UI Builder system, text inputs now have an increased width (varies with screen width).
[FIX] In Zone Configurator and Zone Monitor modules, when accessing the Zone or Room Extension settings, if the Extension's JAR file contains a very large number of classes, a client JavaScript error is thrown and the "Main class" dropdown remains empty.
[FIX] Under certain circumstances, all log lines in Log Viewer's Runtime Log tab are grouped in a single row in the table.


VERSION 2.17.3 (patch)

::::: Server Side :::::
[FIX] Issue with the Flood Filter triggering too quickly in respect to the configured message rate, resulting in requests being denied when it's not necessary.


VERSION 2.17.2 (patch)

::::: Server Side :::::
[FIX] Issue with the log analysis tool whereby parsing logs would not get created.
[FIX] Extension compiled for JREs > 8 will not stop the server from completing the boot process, although they will fail to load. Keep in mind that SFS2X runs on Java 8. If you're compiling with a more recent JDK make sure to set the compiler's Compatibility Level to 8.


VERSION 2.17.1 (internal release)


VERSION 2.17.0 (full installer)

::::: Server Side :::::
[NEW] Improved Websocket performance, with reduced runtime memory footprint.

::::: Admin Tool :::::
[NEW] HTML5 AdminTool is the official and solely supported AdminTool.


VERSION 2.16.3 (patch)

::::: Server Side :::::
[NEW] By default Bitswarm events BitSwarmEvents.PACKET_DROPPED are no longer triggered, as they are rarely utilized and can use up performance in high traffic servers with lots of outgoing packet loss. Developers can manually enable the event via config/core.xml by adding the following: <triggerDroppedPacketEvents>true</triggerDroppedPacketEvents>.

::::: Admin Tool :::::
[NEW] added new Words Filter File Manager under Zone Configurator > Words Filter. It allows to create, edit and remove word files for the Zone's Words Filter. Word files are now identified by a .words.txt extension. This will not affect your active words file, but new files created with the AdminTool will use this convention from now on.
[FIX] Issue with uploads over HTTPS that eluded the previous patch (which also dealt with the issue).


VERSION 2.16.2 (patch)

::::: Server Side :::::
[FIX] Corner case in which an Extension causes, during the init phase, an exception of type java.lang.Error, derailing the rest of the boot process.

::::: Admin Tool :::::
[FIX] Under certain circumstances, all log lines in Log Viewer's Runtime Log tab are grouped in a single row in the table.
[FIX] In Extension Manager, Servlet Manager and Server Configurator (SSL Certificate deployment), file uploading fails if AdminTool connection to server is encrypted.


VERSION 2.16.1 (patch)

::::: Admin Tool :::::
[NEW] In Zone Monitor module, added button to disconnect a user abruptly, alongside the Kick and Ban actions.
[FIX] In Extension Manager, folder action buttons are not displayed when connected to a SFS instance running under Windows.
[FIX] In Servlet Manager, folder action buttons are not displayed when connected to a SFS instance running under Windows.


VERSION 2.16.0 (patch)

::::: Server Side :::::
[FIX] Websocket session's buffer size now matches the maximum request size configured in SFS2X.

::::: Admin Tool :::::
[NEW] Final version of the new HTML5 AdminTool which officially replaces the legacy, Flash-based tool.
[NEW] Added the Analytics module.
[NEW] Added experimental support for custom AdminTool modules.
[NEW] Updated module icons.
[FIX] Wrong global Room count under the Dashboard module.
[FIX] In Zone Configurator module, adding a Room to an empty Zone throws a JavaScript error preventing the Room to show in the tree list.


VERSION 2.15.0 (patch)

::::: Server Side :::::
[NEW] Revamped server engine's UDP pipeline to improve scalability for very high packet rates.
[NEW] Refactored UDP socket pipeline to improve raw packet throughput.
[NEW] Introduced a new DatagramChannel cache to reduce thread contention.
[NEW] Separate UDP and TCP queues with dedicated thread-pools for higher packet-per-second throughput.
[NEW] New configuration parameters added to config/core.xml to fine tune the UDP pipeline for very high traffic (e.g. >1M+ pps).

::::: Admin Tool :::::
[NEW] The new HTML5 AdminTool is out of beta phase. It is now the recommended AdminTool instead of the legacy, Flash-based tool.
[NEW] Thread-dump button in Dashboard allows to obtain a full thread-dump of the server.
[NEW] Dual TCP/UDP queue graph under Dashboard > Message Queue Status.
[NEW] Re-organized dropped-packets stats, now split into TCP and UDP counters.
[FIX] Disconnection issue in FireFox browsers when downloading a zipped log file via the Log Viewer module.


VERSION 2.14.0 (full installer)

::::: Server Side :::::
[NEW] Jetty webserver replaced by Apache Tomcat 9.0.x.
[NEW] New revision of BlueBox and Websocket services.
[NEW] X-Forwarded-For directive support is now optional and turned off by default.
[NEW] New attribute 'storable' for RoomVariables, allows to selectively exclude variables to be saved by the Room Persistence API.
[NEW] Configurable limits for API's FindRoom and FindUser methods in Zone Configurator (default value = 50).
[NEW] Beta release of the new HTML5 AdminTool (see below).
[UPD] Updated geolocation database.
[FIX] Issue whereby an Admin user would not be able to login if the server was full.
[FIX] SFSApi.removeRoom() might log that a Room is removed when in fact it isn't.
[FIX] Potential concurrency case where proximityUpdate event would report duplicates of the same entity.

::::: AdminTool :::::
[NEW] Improved BlueBox monitor now reports both last message time and last polling time.
[NEW] New tab in Dashboard to launch Tomcat's own manager GUI.
[NEW] Under Server Configurator > Web Server, new panel to add/remove users that can access Tomcat's manager GUI.

::::: AdminTool HTML5 (beta) :::::
[NEW] Provides 8 complete modules --> Dashboard, Server Configurator, Zone Configurator, Zone Monitor, BlueBox Monitor, Extension Manager, Servlet Manager and License Manager.
[NEW] In Dashboard module, live update of charts can be paused to better explore the data points moving the mouse over the series.


VERSION 2.13.7 (patch)

[FIX] Throwing an SFSLoginException from a JavaScript Extension doesn’t trigger the related event on client side.


VERSION 2.13.6 (patch)

[FIX] Patched issue in Jetty websockets causing potential native memory leaks (see:
[UPD] Updated geolocation database.
[NEW] Added new Servlet Manager module in AdminTool to upload and manage Jetty servlets.
[NEW] Added new feature in AdminTool's Server Configurator module to upload SSL certificates.
[NEW] Added support for "X-Forwarded-For" header for websocket/BlueBox, to detect IP of clients behind a proxy.


VERSION 2.13.5 (patch)

[FIX] Improved performance of Jetty's websocket implementation.


VERSION 2.13.4 (patch)

[NEW] Added support for allowed websocket origins. Provides extra configuration parameters under ServerSettings > Web Server, to specify which origins are allowed to connect via websocket. Useful to protect against connections coming from URLs other than those hosting the actual game/app.
[FIX] Improved BlueBox performance via dedicated thread pool to avoid a corner case interference with socket engine performance.
[FIX] Websocket max message size is now synchronized to the maxIncomingPacketSize parameter found in config/core.xml.


VERSION 2.13.3 (patch)

[FIX] Regression bug introduced by previous patch (2.13.2) for BlueBox connections.


VERSION 2.13.2 (patch)

[FIX] Corner case where join requests from already disconnected clients could lead to ghost users remaining stuck in a Room.


VERSION 2.13.1 (patch)

[NEW] Support for Java 8 lambdas in Extensions.
[NEW] Added option to pre-start all threads in the auto-load balancing thread pools.
[FIX] Updated commons-collections 3.2.2 which fixes a security issue (
[FIX] Extensions JS API calls with optional parameters can cause runtime exception if optional values are not passed.
[FIX] Performance improvement for Group event dispatch, when running lots of NPCs.


VERSION 2.13.0 (full installer)

::::: Server Side :::::
[NEW] Jetty-based support for websocket, with full support for binary and json (legacy) protocols.
[NEW] Support for server-side JavaScript Extensions via the high performance Nashorn JS engine.
[NEW] Added new methods to BaseSFSExtension for conveniently accessing BuddyApi, GameApi and MMOApi classes.
[NEW] Added getProperties() method to Room and User objects in order to access the properties map directly.
[NEW] Added configurable length of activation codes in the Signup Assistant component.

::::: Client Side :::::
[NEW] "Binary" JavaScript client-side API with full support for the SFS2X binary protocol.


VERSION 2.12.5 (patch)

[FIX] Latency issue when force-disconnecting users trying to login with the same account.


VERSION 2.12.4 (patch)

[FIX] Problem with parsing and output of IPv6 addresses in the logs.


VERSION 2.12.3 (patch)

[FIX] MMOItems not updated correctly when leaving an MMORoom and re-joining immediately after.
[FIX] MMOItems not updated correctly when moved out of the user's AOI.


VERSION 2.12.2 (patch)

[FIX] Issue when creating a new Zone using the AdminTool.


VERSION 2.12.1 (patch)

[FIX] Third party JSON library causing issues with numeric types for WebGL clients.


VERSION 2.12.0 (full installer)

::::: Server Side :::::
[NEW] JoinRoomInvite request, allows players to invite other clients in a game Room to play, available also from client side.
[NEW] Private User Variables, allow to create User Variables that are local to the player, and not broadcast to other clients. They can be mixed with standard User Variables.
[NEW] SFSObject type TEXT allows to transmit vare large strings > 32 KBytes and up 2 GBytes. See SFSObject.putText/getText() methods.
[NEW] Updated Jetty to version 9.3 for web services (BlueBox, uploads, encryption initialization).
[NEW] Support for IP ranges for black/white lists in IP Filter.
[NEW] Zone maxFailedLogin config property, allows a limited number of wrong login attempts per session before kicking the user out.
[NEW] Updated MaxMind’s IP geolocation database and API to latest version.
[NEW] Zone geoLocationEnabled config property, allows to geolocate users and expose it via User.getCountry() method.
[NEW] Embedded Java 8 Runtime.
[NEW] Options for SignUpAssistant Password Recovery, allows to specify which field to match as the ID for password recovery (e.g. default = user name, can be changed to match email, nickname or any other available field).
[NEW] Signed installer for macOS.
[FIX] CreateMMORoom from Javascript / Unity WebGL client causes server side error.
[FIX] BlueBox / Jetty exception (AsyncContext#dispath s=ASYNCWAIT i=false a=DISPATCH).
[FIX] Jetty upload limits.
[FIX] Manual disconnection after having logged out causes server side NPE.
[FIX] Incorrect handling of custom permissions codes on the client side.

::::: AdminTool :::::
[NEW] AdminTool now supports TLS connection.
[NEW] Upgraded interface and Flash Player compatibility. Will allow for future expansions that are in development. Among other things will allow the AdminTool to be delivered as a native application, when the Flash Player will be phased out from certain browsers.
[NEW] Setting in the "Remote admin" tab of the Server Configurator module makes it possible to encrypt the Admin Tool's connection to the server.
[NEW] A custom name can be assigned to the server in the "General" tab of the Server Configurator module, for easier identification in case of environments running multiple SmartFoxServer instances.
[NEW] Updated Log Analysis application for the Analytics module, now compatible with IPv6 addresses and new IP geolocation API.


VERSION 2.11.1 (patch)

[FIX] Fixed potential NPE with offline BuddyVariables cache.


VERSION 2.11.0 (patch)

[NEW] Added support for the new Elastic License system.
[NEW] The AdminTool's License Manager module now allows to reload the changes applied to a license without restart. This is useful for both elastic and perpetual licenses after an upgrade.
[FIX] Fixed NumberFormatException in Analytics module's log analysis routine.


VERSION 2.10.0 (patch)

::::: Server Side :::::
[NEW] Support for TLS encryption for both TCP and UDP protocol.
[NEW] Added SQL aliasing support to DBManager.
[NEW] LoginAssistant now supports non-default login password which can be used in conjunction with the encrypted protocol (see updated LoginAssistant documentation).
[NEW] AdminTool: CPU monitor now shows both system and process usages.
[NEW] Completed support for Java 8 runtime (SFS2X still only requires Java 7 to run).
[FIX] Synchronization issue during a soft-restart might cause the operation to fail with a address bind error.
[FIX] AdminTool: removed Handshake, Login, Logout requests from Flood Filter, as these requests aren't filterable.
[FIX] SpectatorToPlayer and PlayerToSpectator now work correctly with SFSGame Rooms, auto-updating the gameStarted RoomVariable.
[FIX] Sec-WebSocket-Protocol header no longer causes an exception for websocket clients (sub protocols are not supported, simply ignored).

::::: Client Side :::::
[NEW] Revised and synchronized versioning policy for client side API: the major and minor version indicate the supported "feature level", while the sub value indicates the platform specific release. All new API supporting TLS encryption in SFS2X 2.10 start at version 1.6.x.
[NEW] ActionScript 3 API, release 1.6.0.
[NEW] Unity/C# API, release 1.6.0.
[NEW] Java/Android API, release 1.6.0.


VERSION 2.9.2 (patch)

[NEW] Added flag for DBRoomStorage to specify text-based serialization (default = binary) for Room storage.
[FIX] BlueBox issue that could shorten the connection time under specific circumstances.
[FIX] Additional check during packet decompression to avoid exceedingly large packet taking extra resources.
[FIX] Added proper conversion from Int to Long in SFSObject/Array, using JSON serializer.
[FIX] The RoomStorage storeRoomVariables is now working correctly when set to false.


VERSION 2.9.1 (patch)

[FIX] Incorrect Buddy Online state when storing BuddyList after the user has left the server.


VERSION 2.9.0 (full installer)

::::: Server Side :::::
[NEW] Improved thread management and scalability via AutoScaling-ThreadPools. The new system renders obsolete the previous manual configuration of System and Extension Controller threads. The AutoScaling-ThreadPool automatically detects higher loads and balances the number of threads and the queue size to handle increasing amounts of workload. The new thread pool are fully configurable in each and every detail although the default settings should cover a large number of scenarios.
[NEW] Jetty 9.x replaces old Jetty 6.x offering improved performance, support for servlet api 3.0 and HTTPS support out of the box.
[NEW] BlueBox v3.0: revamped and improved edition compatible with the latest Jetty 9.
[NEW] HTTP Uploads API with new server side event to manage the uploaded files.
[NEW] Added support for websockets over SSL (WSS).
[NEW] Added support for Scala 2.10.
[NEW] Added VARIABLES_MAP key for server side events such as USER_VARIABLES_UPDATE, ROOM_VARIABLES_UPDATE, BUDDY_VARIABLES_UPDATE. The value from this key is a Map of Variables.
[NEW] SignUp component now allows re-sending of activation email in a later session and activation of the account in a later session.
[NEW] a few updated libraries (SLF4J, HttpClient).

::::: AdminTool :::::
[NEW] Extension Manager module, allows to manage, upload and deploy extensions directly from the Admin GUI.
[NEW] "Thread pools" tab added to the Server Configurator module to configure the new threading system introduced in SmartFoxServer 2X v2.9.
[NEW] Administration permissions can now be assigned in the "Remote admin" tab of the Server Configurator module. Administrators can now be given access to some modules only and server halting/restarting capability can be inhibited.
[NEW] New settings added to the "Web server" tab in Server Configurator module to activate HTTP and HTTPS support separately in the internal web server. Also, HTTP and HTTPS ports can now be configured from within the Admin Tool itself (no need to edit the Jetty configuration manually anymore).
[NEW] New settings added to the "HTML5 WebSockets" tab in Server Configurator module, now supporting SSL encryption activation.
[NEW] The "new version" alert in the Admin Tool's header now indicates the minimum required version in case the update is provided as a patch.
[NEW] New button to reset realtime charts added to Dashboard module.
[NEW] In the Zone Configurator module a new flag allows to explicitly declare that values entered in the Area of Interest and map limits settings of an MMORoom should be treated as floating point numbers.
[NEW] All passwords in Server Configurator module are now displayed as asterisks.
[NEW] Zone Monitor module now shows if the bad words filter is active on the monitored Room.
[NEW] All tables showing configuration parameters in Server Configurator, Zone Configurator and Zone Monitor modules now retain the column width if resized.
[FIX] Negative numbers couldn't be entered as map limits in the "MMO settings" tab of the Zone Configurator module.
[FIX] Fixed problem with new Zones created at runtime causing an index out of bounds error in the Zone Monitor module.


VERSION 2.8.5 (patch)

[FIX] Removed exception in MMORoom update cycle that would prevent some users to receive their AOI updates.


VERSION 2.8.4 (patch)

[FIX] Issue with private SFSGame invitation for 2 people.
[FIX] Issue when leaving and joining MMORooms which would cause a previous update to get to the client while in the new Room.
[FIX] Reset of the buddy "status" property upon disconnection, otherwise it would show as online when disconnected.


VERSION 2.8.2 (patch)

[FIX] Malformed compressed packets can cause socket thread to take up to 100% CPU.


VERSION 2.8.1 (patch)

[FIX] Exception when leaving MMORoom.
[FIX] Missing global attribute on RoomVariables in persistence API.


VERSION 2.8.0 (patch)

[NEW] MMO API, providing several new classes and functionalities for large and extra large virtual worlds and games.
- MMORoom: uses Area-Of-Interest based updates to minimize traffic in MMORooms with thousands of players interacting together
- MMOItem: non player entity that can be used to represent bonuses, triggers, bullets, etc, in an MMORoom
- MMOItemVariable: dynamic custom properties for MMOItems
[NEW] Room Persistence API, providing a set of simple API to store Room data to any storage system, including out of the box support for File and Database storage.
[NEW] SFSEventType.USER_VARIABLES_UPDATE is now also dispatched at Room level.
[NEW] Added CreateRoomSettings.setRoomProperties(...) allows to add custom properties to the Room that will be available in the Room Extension.
[NEW] Updated Admin Tool.
[FIX] Fixed problems with SFSGame creation. leaveLastJoinedRoom would always result as true.
[FIX] Invitation system might end up inviting the Room creator when a private SFSGame is launched with a certain configuration.
[FIX] User now receives a USER_EXIT when leaving a Room that is being destroyed.
[FIX] Added more SystemRequests to the SystemControllerFilter system: SetUserPosition, AddBuddy, BlockBuddy, RemoveBuddy, SetBuddyVariables, BuddyMessage, InviteUser, InvitationReply, CreateSFSGame, QuickJoinGame.
[FIX] Runtime string format error in PlayerToSpectator request.
[FIX] Issue with Bluebox queue internal limit, now set to 120 messages max.


VERSION 2.7.0 (full installer)

[NEW] Introducing SmartFoxServer2X Analytics: provides advanced tools for in-depth traffic analysis, demographics, visitors, geolocation, client technology statistics, and tons more.
[NEW] Introducing LoginAssistant Component: simplifies the process of creating a DB-driven login systems.
[NEW] Introducing SignUpAssistant Component: simplifies the process of creating a DB-driven sign up system, including the activation process and password recovery.
[NEW] Room uptime added to AdminTool's Zone Monitor module.
[NEW] Stats Extra Logging option under AdminTool's Server Configurator module allows to log extra useful info for the Analytics module.
[NEW] Embedded Java Runtime v7.
[NEW] Official support for C++ clients. The new release provides a portable, standard C++ API that allows a host of new client technologies to interface with SmartFoxServer 2X, including mobile phones and tablets, desktop computers, consoles and embedded systems.
[FIX] Disconnection not detected from clients when Zone is turned off at runtime.
[FIX] Issue with WordsFilter triggering when turned off.
[FIX] Issue with SFSEmail object not being UTF-8 encoded in foreign languages such as Chinese, etc.
[FIX] AdminTool's BlueBox Monitor module causing an NPE due to a client being connected through BB but not yet logged in.

(c) 2004-2023 GOTOANDPLAY snc -- All rights reserved --