2025.12

Release Notes

Overview

This release of Servoy is packed with updates, including the new AI Runtime Plugin! ...Plus many other enhancements and fixes.

For information relating to what's new in ServoyCloud, please see the separate release notes.

AI Runtime Plugin

A new AI Runtime Plugin is now shipped by default with Servoy. This powerful plugin enables developers to connect industry-standard AI tooling to their Servoy applications to deliver AI functionality in their offering, including chat models, vector embeddings, semantic search, agents and more.

For a complete understanding of this plugin, see our new programming guide Building AI Features.

Enhancements

Export to Pipeline

It is now possible to setup your application delivery Pipeline in ServoyCloud directly from Servoy Developer IDE. This approach lowers the barrier to get started with automated pipeline delivery - it's now as easy as exporting a .war file!

To get started, right-click your active solution and select Export Solution -> Setup pipeline . For more details, see our ServoyCloud release notes: Pipeline Setup

Github Copilot in Servoy Developer

Looking for an AI boost in your development? We included, by default, the Github Copilot plugin, and we added a MCP Server, that is started when the developer started. This provides Copilot with tools and information about Servoy.

circle-info

Servoy-native Copilot Coming in 2026.3 We are building our own Eclipse plugin to connect developers to AI tooling. This will give greater control and allow even tighter integration between AI coding assistants and Servoy Core. Therefore GitHub Copilot will go away next release — replaced with something better! Of course, you may continue to use Copilot if want.

PGVector Support

In this release, we ship a PostgreSQL version that includes PGVectorarrow-up-right, the extension that provides Vector Store functionality. This allows you to turn any PostgreSQL database into a Vector Store to be used for vector embeddings for document ingestion, classification, semantic search and more when using our new AI Runtime Plugin.

For more information, see the Vector Embedding section in our guide on Building AI Features.

Native Vector Column Support

In addition to PGVector, we also added native support for a Vector Column Type.

This means developers can use vector embeddings directly in the QueryBuilder API with the new QBVectorColumn class, which has special functions like vector_score and vector_distance .

In short, this enables developers to build Semantic Search capabilities on their relation data with fine control. For more information, see the Vector Embedding section in our guide on Building AI Features.

Components: Multi-Select / Array Support

For certain UI components we introduced a multiselect property. It allows these components to be bound directly to an Array data-provider (columns and variables). This means that developers no longer need to bind to a string and split on a delimiter (i.e. \n) as before, but can directly connect the component to the Array column/variable.

All Async Plugins — JavaScript Promise Support

For plug-ins that have Async behavior (such as HTTP, HeadlessClient), we've added support for JavaScript Promise return types and such methods also support a callback function, which will be called when the promise is resolved. For example, see http.executeAsyncRequest.

NGDesktopUI Plugin — Supports Nested Menus

NGDesktopUI plugin: has now support for nested menus (based on the Servoy Menu object). The old menu are deprecated.

Dialogs Plugin — Support for Primary Button

Dialog plugin: the last argument of the showXxx functions can now be a number (zero-based), which specifies which of the buttons should be the default/primary choice.

ECMA Parser Enhancements: Strong Typing

Strong Typing for Collections (Map, Set)

Enhanced generic typing for Map and Set, so code completion now understands what types are stored and returned. This includes correct type inference when iterating, such as through Map.entries() or Map.keys().next().value.

Strong Typing for Iterators (Array, FoundSet)

The forEach() callbacks for Array, Map, and Set are now automatically typed, so parameters like the element, index, and collection have the correct types without adding JSDoc. This improvement also applies to foundset.forEach(), where the record parameter is fully typed based on the FoundSet definition.

Next Release — Continued Strong Typing in API Callbacks

In the next release, this enhancement will be made available for all Servoy callback functions, including File Plugin callbacks and HTTP Plugin execution callbacks.

We’ll also improved debugging for block-scoped variables. With let and const fully enforcing block scope, these variables were previously hidden from the debugger. The debugger will correctly expose let and const variables when execution enters their scope.

Solution Model Enhancements

Static Typing for Solution Model Objects (ValueLists, Forms, WebComponents, etc.)

The JSValueList type has now code completion for all the design time created valuelist, so you don't need to use strings in calls like:

The JSForm type has gotten 2 additions, The first one is JSForm.NAMES.xxx which works the same as the JSValueList so all the design time form names are shown there and that can then be used where you now would use a string. Also we added JSForm.INSTANCES.xxx which directly return a JSForm instance for that Form (so this is a short cut for solutonModel.getForm(JSForm.NAMES.myform)). In the future we could improve this to return an actual JSForm type instance so we can have also typed components in there (JSForm.elements.elementName returns then a JSWebComponent<Bootstrap.Button> which then can have directly its spec properties.

For setting or getting properties from the JSWebComponent, we also added there more strict typing so you know what can be set or get from a component:

Testing

Test Mode URL for Deployments

For E2E test a client needs to generate a bit more verbose output, so you can have better selectors, for this we always had on the admin page a "testmode" property that would set that server in testing mode, but sometimes it can be handy to have this on a more staging or production server, so we added support for a property that can be added to the url: svy_testmode=true to set that specific client in testing mode.

Breaking Changes

Possible breaking change is that the const keyword is now really working like a let by default. So it is block scoped. Also lets are blocked scope always now (they only where that in specific conditions)

Dependency Updates

  • Embeded Postgresql* is upgraded to 17.6 including the Vector extension.

  • Upgraded to Angular 20.3.14

  • Updated to a new NodeJS LTS release (24.11.1, coming from 22.x)

  • Upgraded to Eclipse 2025.12 (4.38) (we updated to the just released version of eclipse also, to fix a MacOSX issue)

  • Upgraded Java to 25.0.1 (The runtime still can work with Java 21)

Case List

See the case list below for the cases fixed in this release.

This has some new signing behavior for the update site of the developer, so it could behave a bit different then before depending from which version you upgrade from.

2025.12.1

2025.12.0 (final)

2025.12.0-RC2

2025.12.0-RC1

Components
Key
Summary

Last updated

Was this helpful?