Vaadin 25.2: Build UIs in plain language, and call the browser from Java | Vaadin
Contact us
Start building
Blog
Vaadin 25.2: Build UIs in plain language, and call the browser from Java
By
Miikka Andersson
On Jun 24, 2026 6:10:25 PM
In Product
Vaadin 25.2 is the second feature release in the 25.x line. It brings three main additions: you can put AI to work inside your data views, call native browser capabilities from plain Java, and turn your existing end-to-end tests into load tests.<br>You also get new and updated components, deeper Signals integration, tighter security defaults, and Copilot gains an in-app review workflow, a customizable palette, and an EU-hosted option.<br>Also shipping this week: Vaadin Enterprise Edition, a separate edition aimed at organizations building and maintaining business-critical Java applications, was announced alongside 25.2 — see the Vaadin EE announcement. A new release of Vaadin's Swing modernization tool, SwingBridge 1.2 , also shipped — see the SwingBridge 1.2 announcement for what's in it. This post stays focused on the Vaadin 25.2 release.<br>AI-powered Grids, Charts, and forms (Preview)<br>25.2 adds three new AI controllers that let end users drive parts of your UI in plain language. They build data views and fill forms by describing what they want.<br>These are Preview features. Enable them with the feature flag com.vaadin.experimental.aiComponents. APIs may still change, so try it out and let us know what you think.<br>AI-generated Grids and Charts<br>The new GridAIController and ChartAIController make it easy to allow end users to create their own data grids and charts through natural-language prompts. The prompt is sent to an LLM, together with a database schema description. The LLM generates an SQL query and a grid or chart configuration, which can be applied to a Grid or Chart instance in the UI.
The SQL query and grid/chart configuration can be stored as strings e.g. in a database, from where they can be reloaded and rendered with fresh data without further use of AI.<br>The data returned by the query is never sent to the LLM, making this a safe choice for applications handling sensitive data. The DatabaseProvider used for these should be configured with a read-only database account, however.<br>These features are designed to work together with the Dashboard component, making it easy to implement end user configurable dynamic dashboards.<br>AI form-filler<br>FormAIController provides LLM-based automatic form-filling based on prompts and/or uploaded documents or images by connecting a layout containing Vaadin input field components with an AI prompt and/or file upload components. Drop an image or document containing the data you want to fill the form with, and the controller passes it to an LLM that parses it, finds the relevant information, and fills in the fields. The 25.2 version is an early preview of this functionality.<br>Native browser APIs in Java<br>Seven browser capabilities are now available from server-side Java, with no JavaScript required. Geolocation and the Clipboard are the ones most apps will reach for first; the rest cover going fullscreen, keeping the screen awake, page visibility, native sharing, and screen orientation.<br>Geolocation<br>The Geolocation API gives your Java code access to the browser's location. Use Geolocation.getPosition() for a single reading, or Geolocation.watchPosition(component) for a continuous stream tied to a component's lifecycle. The watch starts when the component attaches and stops automatically when it detaches. You can consume readings two ways: a signal style for "always show the latest position," or a listener style for "process every reading in order."<br>Geolocation.getPosition(this,<br>pos -> map.setCenter(new Coordinate(pos.coords().longitude(),<br>pos.coords().latitude())),<br>error -> Notification.show("Couldn't get your location"));
The browser handles its own permission dialog, and the API requires a secure context (HTTPS), except on localhost during development.<br>Clipboard<br>The Clipboard API lets your Java code copy text, HTML, and images to the user's clipboard. Actions bind to a clickable component and run during the click event, so the browser sees a genuine user gesture and allows the write. A copy button is one line:<br>Button copy = new Button("Copy");<br>Clipboard.onClick(copy).writeText("Hello, world!");<br>Clipboard.onClick() works with any component that fires a click, such as a context-menu item, an icon, or a list row. If you need to know whether the write succeeded, the write* methods have overloads that report back to onCopied and onError consumers on the UI thread.
Clipboard access goes both ways. Beyond writing text, HTML, and images, the API can read the clipboard on the server and react to browser paste events, including pasted files, so you can build paste-to-upload and similar flows, not just a copy button.
Fullscreen<br>The Fullscreen API can take the whole page or a single component fullscreen, exit on demand, and expose the...