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 featuresarrow-up-right.

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:

  • visibleDataprovider

  • enabledDataprovider

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:

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.

circle-info

Note Arrow functions do not automatically update in running clients when their source scripts change. Updates require explicit re-registration or client restart.

API

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 Resources has changed from Alt + Shift + K to Ctrl + 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

Components
Key
Summary

Cursor in FormEditor is always pointer after first click

2025.06RC Key binding ALT+SHIFT+K is not working for Locate Servoy Resource

Textbox is disabled at runtime when place field wizard is used

Menu editor - refresh needed after an item is added

create UI level events, ask in the new event type dialog if it is an ui event, signature

FIELD with type calender does not keep to format

Limit file size and restrict file type on file.showFileOpenDialog plugin

TypeError: Cannot read properties of null (reading 'script')

Servoy Server loses license codes on startup

War file built with export_war.bat contains no solutions inside

2025.06.0-RC1

Components
Key
Summary

Add an overloaded method to set a logger's log level using one of the LOGGINGLEVEL enum values

Add support for autocomplete/suggest on Array.flat() method

Add "deprecated" property of a form to JSForm and solution Model so we can access it programatically

clean out constants/api that is only used for Smart or WebClient

ResponsiveContainer should be accessible via solutionmodel

I would like to use isEnableDataprovider/isVisibleDataprovider on components

Form less file does not get duplicated when form is duplicated

Error on first show of a Data Grid form set into grouping mode

Hidden context menu and/or bad positioning

cannot add menuitem to a menuitem from property view using small "+"

Error when running svykanbanexample - parser error

Browser error when dragging a formcomponent that has a formcomponent inside

stateless login - regression due to the big refactor when using oauth with a custom api

Browser error from in datagrid sometimes when selection changed

Make permissions an enum that can be used in scripting

Mac property configurator isn't showing correctly the first time

Missing keybinding 'Locate resource'

ClassCastException in the canvas when selecting the new "-none-" item that was added in the imageLoader

Ecma parser fails to parse code with the if & comment combination

Add support for Async & Promise with datasets

Add support for Async & Promise with rawSQL plugin

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

Upgrade Eclipse (and tycho) and all java mvn dependencies

Allow reordering the menuitems of a menu in Solex

Servoy Menu - Menu Editor versus Properties View : Navbar isDivider property

Servoy Menu - Menu Editor versus Properties View : Permissions

Servoy Menu - Menu Editor versus Properties View : Text and toolTipText

Warning on this when using it in nested arrow functions

Make it easier to see if an element has designtimeProperties or not

When you duplicate a media file inside a subfolder, it places the file in the main folder

Selection is not visible in Variables view on Servoy dark theme

Dragging elements in outline gives very strange behaviour

Variant does not show the correct preview

Open (default) external browser for the links in the tooltips

Copy property value from datasource

introduce a css/less file tab in the form editor to have css specific for the form

ResponsiveContainer is missing the formIndex property

Restore do default in properties doesn't visually set handlers back to -none-

infinite loop in the parser because the exp expression is not fully implemented

Handle missing exception object in catch block (visitors and dltk model)

Fix parser warning when calling the operator ~~ to return Number

ES6 allows function parameters to have default values

Support ES Object Method shorthand syntax

DOCS Generator: Server Plugin Settings should be auto generated

Remove Smart Client references in the docs

overload support in our doc file for createPopupMenu

Foundset does not track difference with high precision floats

DBTreeview: elements.file_treeview.setExpandNode(elements.file_treeview.getSelectionPath(), true) throws error

select2tokenizer not showing dataprovider-changes from outside [SERVOY]

agLargeCellTextEditor - Z-Index in Modalforms is broken [SERVOY]

onColumnDataChange in NG Grid returns the display value instead of the real value if the valuelist is using Global Methods [SERVOY]

[jwt plugin] allow acceptNotBefore when verifying web tokens

Grouping on optional fields on datagrids doesn't work as intended

event property missing in onSelectedRowsChanged

Sidenav getSelectedMenuItem() returns a selected item but the sidenav UI does not reflect it

Form with Navbar with Servoy menu throws errors

Evaluate the possibility to add a shortcut feature for the HTML area component

create cypress component test for bootstrap extra components

create cypress component test for servoy extra components

2025.06RC - LFC cardview does not calculate rows taking into account CSS and throws other errors

Solution using form less do not start when running in Safari

Limit file size and restrict file type on file.showFileOpenDialog plugin

The property "resultDisplayTimeout" is ignored

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

TypeError: Cannot read properties of null (reading 'script')

TypeError: Cannot read properties of undefined (reading 'querySelector')

createPopupMenu is duplicated in the DOM

Augment plugins.http.Request API

stateless login - oauth + deeplink

tabpanel form not layouting well when tabindex is changed from scripting

stateless login - regressions due to the big refactor

Listform component throws internal error when using inmem and responsive paging

Numbers: Incorrect thousands separator for fr-ch

update Fabricjs to V6 in svycanvas

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)

Individual document name for Servoy PDF Viewer download

Servoy Default label has different styling in TiNG

select2tokenizer missing essential functionality

Foundset retains multiple selected indices after sorting/filtering in multiselect grid

svyCanvasExample doesn't work with images, although it has that option

Error when launching client/page expired

Google Maps Component Warnings

Unable to Drag Components into CSS Position Container in Servoy 2024.3

Memory issues NGDesktop file service

NGDesktop failed printing after update to 2024.12

svywebcam switch camera for Android

SQL is unintentionally adding alias

check the rhino 1.8 unit tests

Global method valuelist with a large dataset take forever to load since new Servoy version

FoundsetUpdater also saves other pending records.

databaseManager.getFoundSetCount() to support ViewFoundSets

FunctionDefiniton should be relaxed a bit so you can give arrow functions to it

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)

Multi solution breaks with different login types

I would like to use utility modules ( without resource project ) in pre-import-hook

stateless login - what happens if the authenticator does not find the user

component doesn't refresh when adding a new slide array

CLONE - plugins.jasperReports.relativeReportsDirectory returns an empty string

Grid scrolls back to top if scrolling without previously focusing the grid

aggrid-groupingtable - LocaleText dateFormatOoo doesn't seem to work

Row selection column should be pinned to the Left.

DBTreeview: not refreshing context when autoRefresh is enabled

DBTreeview: Rightclick doesn't highlight the selected node / element in the tree

Select2Tokenizer gives an error when valuelist is based on globalMethodValuelist

Select2Tokenizer TAB jumps to unknown place

Allow footer form to be pinned to the bottom of the sidenav

Treeview (dataset) lacks possibility to set column width

Last updated

Was this helpful?