2025.06
Release Notes
2025.06.2
This release did update to Java 21.0.8 (from .7) and it also updated minor versions of some libraries to handle some security issues. This holds especially for the HTTP plugin now the libs in plugins/http are updated to the latest version. And they are also really used in developer and when exporting/creating a war file. So now its easier to update those manually also if needed (just overwrite the files in the plugins/http folder).
For running the war command line exporter, we import projects that are in the given workspace dir. Because of some internal changes we really import it based on the project description instead of the pure directory that the are in. This could mean that for the pure subdirs of the workspace dir that don't have the same name in the .project file as the parent dir that those are not imported correctly, make sure that those are in sync.
This release also includes a few fixes for the FormContainer/Tabpanel behavior if it was set through scripting. To fully use all the fixes you need to update the bootstrapcomponents and the servoy-extra packages in your solution because they now use internally new Servoy API.
See the case list below for more details.
2025.06.1
Rhino fixes:
Divide problem when it must round
Fix for explicit toString() call on the new BigDecimal bignumber.
HTTP plugin fixes:
Fix for running on Java 24 (GET request just hangs).
Force http1 mode was not always enforced even when set, so content length was not set when you expect it to be.
Upgraded file-upload library to 1.6 (security fix) Upgraded commons-lang3 library to 3.18 (security fix)
See the case list below for more details.
2025.06
Features:
Events Manager
The Events Manager, along with the solution's EventsType property, now supports creating UI Events.
Modules can define UI Events for forms or solutions. Developers will see these events in the properties view and can declaratively attach functions (similar to button click handlers). The system automatically handles event registration and deregistration when forms are created or destroyed.
Example Use Case:
A module can define custom UI Events triggered by significant actions. Developers then see these events directly in the form or solution properties view, allowing them to attach event handlers declaratively, reducing manual scripting.
Rhino Engine Update
The Rhino JavaScript engine has been upgraded from version 1.7.x to 1.8.0. This update provides significantly better support for modern ECMAScript features.
The JavaScript editor will progressively support these newer ECMAScript features. While some APIs might already function, warnings for unknown functions or properties may appear. Developers are encouraged to report these issues to enhance documentation and code completion.
Form-Specific Less/CSS Support
A new Less/CSS tab has been introduced in the Form Editor, allowing you to define CSS styles scoped specifically to individual forms. Styles defined here apply only to the form and its hierarchy, preventing conflicts between similarly named classes in different forms.
For example:
This style is scoped exclusively to the form it's defined in. Even if another form defines a class with the same name (.myclass), there will be no conflicts or unintended influence between the two forms.
This feature enables advanced layouts, such as CSS Grid or Flexbox, tailored to specific forms. Future releases will continue to expand this functionality.
Database Array Column Support
Servoy now directly supports database columns of type Array, currently available in PostgreSQL and HSQLDB (in-memory database).
Example table definition:
Arrays can be assigned directly:
Currently, arrays must match exactly for querying purposes. Potential future enhancements could allow searching individual array values.
You can't alter the array contents directly, if you want to change the contents of an array, you need to make a copy (slice(0)) and then alter that and set the array back. see also breaking changes section below.
visibleDataprovider and enabledDataprovider
All components with existing visible and enabled properties now have corresponding data provider properties:
visibleDataproviderenabledDataprovider
A component's visibility or enabled state is now data-driven, with the final state determined by combining the standard property and the data provider's returned value. This facilitates dynamic component states managed by calculations or database values, removing the need for manual toggling through scripts.
Typed Permissions
Permissions are now defined as enums (JSPermission.XXX), providing developers with immediate feedback through compiler warnings if invalid or non-existent permissions are referenced.
Developer Enhancements
A new Less tab in the Form Editor allows direct entry and management of CSS styles.
Multiple improvements have been made to developer tools, particularly around the new Menu system.
Several minor enhancements, especially regarding nested property handling within the Properties view.
Improvements
BigInt and Numeric Precision Support
Initial BigInt support introduced in the previous release has been expanded. After further evaluation, native JavaScript BigInt had limitations in a Servoy context. To improve numeric precision handling, the Rhino engine now maintains Java's BigDecimal values directly within JavaScript. This prevents precision loss typically caused by JavaScript's numeric representation (floating point).
Calculations involving large decimal values, such as DECIMAL(100,10), now preserve their exact precision from Java through Rhino and into the TiNG client (browser). Basic formatting support in the browser relies on the Numbro library, which provides essential but limited formatting.
ECMA Parser Enhancements
The JavaScript builder/parser now supports additional ECMAScript features aligned with the updated Rhino engine:
Function parameter default values
Object method shorthand syntax
Code completion for
Array.flat()Parameter-less
catchblocks (try {} catch {})Optional_chaining, for null or undefined checks, so you can do stuff like:
myObject?.myProperty?.myMethod()without getting an error if myObject is null or undefined. TODO: code completion doesn't work yet after ?. Will be fixed in 2025.09
Relaxed Function Passing
Passing arrow functions directly to Servoy (e.g., as callbacks or listeners) is now more flexible and no longer restricted strictly to top-level form or scope functions.
However, developers must handle potential lifecycle issues manually—particularly when using arrow functions tied to forms that may be destroyed (e.g., callbacks used by schedulers). It's essential to clean these up during the form's onDestroy event.
Note Arrow functions do not automatically update in running clients when their source scripts change. Updates require explicit re-registration or client restart.
API
Enhanced support for managing responsive layouts through the solutionModel. These methods allow developers to access and manipulate responsive layout containers (ResponsiveContainer or CSSContainer) in forms that use CSS-based positioning:
databaseManagernow includes asynchronous methods for retrieving datasets, complementing the synchronousgetDatasetByQuery, like:
Plugins
RawSQL Plugin Enhancements
Following the HTTP Plugin's introduction of async Promise APIs, the RawSQL Plugin now also includes asynchronous variants of its methods:
These allow developers to initiate SQL execution and handle the result asynchronously when it becomes available.
FilePlugin.showFileOpenDialog
The showFileOpenDialog method of the File Plugin now supports file size restrictions. By default, it uses the servoy.webclient.maxuploadsize property. Developers can override this by calling file.setMaxUploadFileSize().
This size constraint applies not only to showFileOpenDialog, but also to most upload actions, including the File Upload component.
The (Multi)File Upload components also support specifying a maximum upload size on the client side, giving users immediate feedback if a file exceeds the allowed limit. Currently, only the File Upload component enforces both client- and server-side limits; MultiFile Upload relies on the server-side property.
Servoy may introduce a sensible default limit in the future to prevent excessive file uploads by default.
Security
Dependency updates
Rhino upgraded from 1.7.15 to 1.8.0 for broader ECMAScript feature support.
Eclipse updated to version 2025.03 (4.35).
Angular updated to 19.2.
AG Grid updated to 33.3.x.
Shipped Java updated to 21.0.7. Starting with this release, Java 21 is required for both the Developer and Server environments.
Shipped Node.js updated to 22.15.1.
Several Java and Eclipse plugin dependencies have been updated to their latest stable versions.
Behavior changes
JSFoundSetUpdater: When
performUpdate()is called, only records belonging to the active datasource are saved—unlike before when changes across all datasources were saved.Developer: On macOS, the default keybinding for
Locate Servoy Resourceshas changed fromAlt + Shift + KtoCtrl + Shift + K, as the original shortcut did not consistently register.RUNTIME: Because of the Database Array support the arrays that are stored in the record are sealed now. This is because changing the contents of an array that is stored in the record is not supported. If you want to change the contents of an array, you need to make a copy (slice(0)) and then alter that and set the array back. This is to prevent accidental changes to arrays that are stored in the record. The side effect is that if you StringSerializer and you store json array in the string column. That array can't be directly changed anymore, also for those you need to make a copy through slice(0)
Known issues
Case List
2025.06.2
2025.06.1
2025.06
Here's your HTML table converted to a Markdown table:
2025.06.0-RC2
create UI level events, ask in the new event type dialog if it is an ui event, signature
2025.06.0-RC1
Add an overloaded method to set a logger's log level using one of the LOGGINGLEVEL enum values
Add "deprecated" property of a form to JSForm and solution Model so we can access it programatically
I would like to use isEnableDataprovider/isVisibleDataprovider on components
stateless login - regression due to the big refactor when using oauth with a custom api
ClassCastException in the canvas when selecting the new "-none-" item that was added in the imageLoader
When adding a new column in the datagrid with the first '+' button, it adds the item at the end
create UI level events, ask in the new event type dialog if it is an ui event, signature
When you duplicate a media file inside a subfolder, it places the file in the main folder
introduce a css/less file tab in the form editor to have css specific for the form
DBTreeview: elements.file_treeview.setExpandNode(elements.file_treeview.getSelectionPath(), true) throws error
select2tokenizer not showing dataprovider-changes from outside [SERVOY]
onColumnDataChange in NG Grid returns the display value instead of the real value if the valuelist is using Global Methods [SERVOY]
Sidenav getSelectedMenuItem() returns a selected item but the sidenav UI does not reflect it
Evaluate the possibility to add a shortcut feature for the HTML area component
2025.06RC - LFC cardview does not calculate rows taking into account CSS and throws other errors
aggrid onDrop doesn't receive enough information about the data received and the column it is dropped onto
maxRecIndexPropertyValueListener in DAL is always removed in any removeDataLinkedProperty, not just in some
Support serializing CustomEvent instances from the clientside into JSEvent's serverside
Ability to specify the 'type' when creating JSEvents (in the serverside of Web Components)
Foundset retains multiple selected indices after sorting/filtering in multiselect grid
Global method valuelist with a large dataset take forever to load since new Servoy version
Handle bigints (java/javascript) to be able to send to the client (json doesnt directly support this)
handle bigint support in java (Database -> java , Java -> Scripting, Scripting -> Java , Java -> Database)
CLONE - plugins.jasperReports.relativeReportsDirectory returns an empty string
DBTreeview: Rightclick doesn't highlight the selected node / element in the tree
Select2Tokenizer gives an error when valuelist is based on globalMethodValuelist
Last updated
Was this helpful?