Skip to main content
Version: v11.15.0

WaveMaker 11.15.0 - Release date: 8 February 2026

Features

Studio

Profiles & Property Management Simplified

WaveMaker has reworked how application, service, connector, and prefab properties are managed across profiles. Default values are now sourced directly from their respective configuration files, and profile entries are created only when a user explicitly overrides a value.

This change eliminates property duplication, improves version control clarity, and enables consistent, build-once deploy-anywhere workflows. See the detailed documentation for structure changes, migration behavior, and deployment implications. For more information, see Unified Configuration and Profile Management.

Studio Design Update: All Controls Consolidated into a Single Top Nav Bar

The Studio design has been streamlined by merging the secondary top bar into the primary top bar, reducing visual clutter and improving discoverability of frequently used actions.

This update reorganizes menus and controls into a single, consistent header layout while preserving existing functionality. Several items have been repositioned to align better with user workflows, improve canvas focus, and create clearer separation between project context, page actions, and global settings.

Users may notice changes in where certain options appear, but no capabilities have been removed—only consolidated and better organized.

Refer to the image below for a clear understanding of the UI changes and their new locations.

Debounced Auto-Save in Design Workspace

Implemented an Auto-Save mechanism that automatically persists the user's data. The system monitors user interactions (such as typing or canvas interaction) and triggers a save operation after 5 seconds of inactivity(debouncing operation ) following the last user input. This ensures data is saved efficiently and improves user experience.

The auto-save process resets the timer on every interaction, ensuring that data is only saved once the user pauses, preventing frequent or redundant saves during continuous input.

Live save status display in the header showing "Saving..." and "Saved" states based on API responses.

How Auto-Save Works (Use Case) The user starts typing or interacting with the canvas (e.g., drag and drop, delete, copy, paste, template or layout selection, property changes). A 5-second inactivity timer is started. If the user interacts again within 5 seconds: The previous timer is cleared. A new 5-second timer is initiated. While changes are pending and the save request is being prepared: The header displays the status “Saving…”.

If no interaction occurs for 5 seconds: The auto-save API is triggered automatically. Upon successful API response: The data is persisted and synced with the backend. The header status updates to “Saved”, confirming successful completion.

This implementation follows a debounced auto-saving approach, ensuring efficient API usage and a seamless user experience.

Enhancements

Web

Async Support Added to `App.onBeforeServiceCall`

Previously, App.onBeforeServiceCall only worked with synchronous logic. The framework expected the request object to be returned immediately.

That meant any asynchronous modification like generating tokens, fetching keys, or encrypting headers silently failed. The API call triggered before your async code finished, and your changes were ignored.

Earlier Behavior (Async Logic Did NOT Work)

App.onBeforeServiceCall = function (req) {
return new Promise(resolve => {
setTimeout(() => {
req.headers["x-token"] = "encrypted-value";
resolve(req);
}, 1000);
});
};
  • Async code starts running
  • API call is triggered immediately
  • Header update finishes too late
  • Request is sent without x-token

What’s New

App.onBeforeServiceCall now supports:

  • Synchronous returns
  • Promises
  • Conditional sync + async logic
  • async / await

The API call waits until the request is fully resolved.

Supported Usage (All Scenarios)

Case 1: Synchronous Modification

App.onBeforeServiceCall = function (req) {
req.headers["x-app"] = "my-app";
return req;
};
  • Works as before
  • API call uses the modified request

Case 2: Asynchronous Modification (Promise)

App.onBeforeServiceCall = function (req) {
return generateEncryptedToken().then(token => {
req.headers["x-token"] = token;
return req;
});
};
  • Promises are fully supported
  • API call waits for async completion

Case 3: Conditional Sync or Async Logic

App.onBeforeServiceCall = function (req) {
if (!req.secure) {
return req; // sync path
}

return generateEncryptedToken().then(token => {
req.headers["x-token"] = token;
return req;
});
};
  • Works correctly in mixed scenarios
  • Always returns the final request

Case 4: Using async / await

App.onBeforeServiceCall = async function (req) {
const token = await generateEncryptedToken();
req.headers["x-token"] = token;
return req;
};
  • Clean and readable
  • Fully supported
  • Request is modified before the API call

If you rely on async logic—security headers, tokens, encryption, conditional auth— this hook now behaves the way you always expected it to.

Programmatically Access Widgets in Tabs, Accordions, and Wizards

Accessing widgets inside Dynamic widgets like Tabs, Accordion, and Wizard is tricky. To simplify this, we now expose a dedicated method that allows you to programmatically access internal widgets with ease.

Syntax:

Page.Widgets.<dynamicWidgetName>.getWidgets(widgetName, index);

Parameters: widgetName (Required): Name of the widget to access. index (Optional): Zero-based pane index (Tab / Accordion pane / Wizard step).

Returns: With index: An array containing the matching widget from the specified pane. Without index: An array of matching widgets from all panes of the dynamic widget.

Example:

Access a widget from a specific Tab
Page.Widgets.MyTabs.getWidgets('label1', 0)[0].caption = 'Updated';

Access widgets across all Accordion panes
Page.Widgets.MyAccordion.getWidgets('checkbox1')
.forEach(w => w.show = false);

Access a widget in a Wizard
Page.Widgets.MyWizard.getWidgets('username', 2)[0].required = true;
ESLint Inspection Integrated into Angular UI Builds

WaveMaker now supports running ESLint inspections as part of the Angular UI build and deployment process. A new inspection step can be enabled in CI/CD to automatically analyze UI code during build and report linting and code-quality issues.

This inspection is optional, configurable, and runs only for Angular-based builds. Teams can choose to log issues for visibility or enforce strict quality gates by failing the build when critical ESLint errors are detected.

This enhancement helps catch UI issues early in the pipeline, improves consistency across projects, and enables better code-quality enforcement in automated builds. Refer to the detailed documentation for configuration options, build conditions, and enforcement behavior.

React Native

Toggle (Switch) Widget: Consistent Circle Size Across ON and OFF States
Fixes inconsistent toggle circle resizing when height or width is customized. - The toggle circle maintains a consistent size in both ON and OFF states. - Changing the height or width of the switch affects layout dimensions, not internal toggle behavior. - Visual and interaction behavior remain predictable regardless of size customization.
Toast Notification Widget: New Customization Options
Adds support for a dismiss button, anchor elements, and customizable message icons.
Panel Widget: Custom Icons for Collapsed and Expanded States
Introduces separate properties to define icons for collapsed and expanded panel states.
Wizard Widget: Display All Step Titles Simultaneously
Allows all wizard step titles to be visible regardless of active or inactive state.
Accordion Widget: Subheading Fix and Icon Direction Option
Fixes the subheading property and adds control to reverse expand/collapse icon position or direction.
Chip Widget: Enable Styling for Item Text
Allows styling customization of text inside individual chip items.
Select Dropdown Component: Spacing Consistency Across Android and iOS
Resolves layout and spacing inconsistencies in the select dropdown modal.
Accordion Widget: Base View/Class Exposed for Title Styling

A common base view/class has been introduced for the Accordion title, enabling consistent and reusable styling across applications.

  • The Accordion title should support:
    • A configurable background color
    • An icon alongside the title text
  • Styling should be applied through a common view or base class, enabling reuse and consistency across applications.

Bug Fixes

Web

Studio Crash When Loading Google Maps Prefab

Fixed an issue where Studio could crash with an out-of-memory error when loading pages containing the Google Maps prefab.

Autocomplete & Popover Issues in CSP-Enabled Projects

Fixed an issue where Autocomplete and Popover components failed to load or displayed styling issues in CSP-enabled projects.

Bar Chart Tooltip Value Formatting

Fixed an issue where bar chart tooltips displayed values in thousands instead of the configured numeric format when using a single Y-axis.

Incorrect Content-Type for multipart/form-data Requests

Fixed an issue where file uploads via the Import APIs tool were sent with an incorrect Content-Type in multipart/form-data requests.

VCS Actions Not Working Outside Page Workspace

Fixed an issue where View Changes, Push, and Pull operations failed in Studio when accessed from non-page workspaces after reloading the app.

React Native

Resolved an issue where WMX widgets were not working after the Expo 54 upgrade.
  • Fixed dependency version inconsistencies between the app and WMX widget packages introduced during the Expo 54 upgrade.
Fixed an issue where the Bottom Sheet overlapped the Android system navigation bar on devices using 2-button or 3-button navigation.
  • The Bottom Sheet now correctly respects Android navigation bar insets across phones and tablets, in both portrait and landscape orientations, ensuring consistent behavior between Expo Go and prebuilt app builds.
Fixed an issue where enabling Wavepulse via QR did not open the Wavemaker React Native app.
  • Deep linking from the Wavepulse companion flow now correctly launches the RN app and enables Wavepulse as expected.
Fixed an issue where the Camera widget did not trigger the onSuccess event after recording a video.

The onSuccess event now fires correctly for video recordings, ensuring dependent workflows, scripts, and bindings execute as expected.

Fixed an issue where an extra white space appeared above the bottom bar when the Bottom Sheet was set to full height.
  • Bottom Sheet layout now aligns correctly with the bottom bar, ensuring consistent inset handling without visible gaps.

Design System

Features

Global Color Tokens
  • Enabled edit support for derived tokens within Global Color tokens.
  • Derived tokens can now be edited individually in the Style workspace.
Token Import / Export
  • Improved token import and export flow.
Variants
  • Updated variant grouping behavior.
  • Enabled edit and create actions for variants directly from the Page workspace.
Auto Layout Alignment Update

Auto Layout containers now apply a default alignment when none is specified, ensuring gap behaves consistently.

What Changed

  • Previously, when alignment was not set, gap was ignored.
  • A default alignment (top-left) is now applied so gap works as expected.
  • As a result, some child elements may shrink to content width instead of stretching.

Developer Guidance

  • Always set direction and alignment on Auto Layout containers.
  • If a child element should remain full-width, explicitly set width: 100%.

New Widget

Icon Button (Toggleable)

Introduced a new toggleable Icon Button widget for quick, state-based interactions.

Key Features

  • Selected Class – Icon class applied when the button is selected
  • Unselected Class – Icon class applied when the button is unselected

New Properties on Widgets

Text Widget

The Text Widget now supports additional options for improved interaction and clarity

  • Leading Icon – Display an icon at the start of the input field
  • Trailing Icon – Display an icon at the end of the input field
  • Supporting Text – Show helper or hint text below the input field
  • Leading Icon onClick – Trigger actions when the leading icon is clicked
  • Trailing Icon onClick – Trigger actions when the trailing icon is clicked
Toggle Widget
The Toggle Widget now supports customizable icons for clearer state indication:
  • Selected Icon – Displayed when the toggle is selected
  • Unselected Icon – Displayed when the toggle is unselected
Slider

The Slider widget now supports icon-based controls for improved usability and accessibility:

  • Show Icons – Display increment and decrement icons alongside the slider
  • Start Icon – Customize the decrement icon
  • End Icon – Customize the increment icon

Newly Added Tokens

WidgetsTokensOld ValueNew ValueDeveloper ActionMigration
Form Controlsform.mapping.field.padding(none / not tokenized)space.2.valueNone — token added. For older projects migration sets this to space.0.value.Done
Form Controlsform.caption.display-inline-blockIf a developer has already defined this property in app.css, that style will continue to take precedence. The token uses the same base value by default, so no action needed.Done
Progress Circlelabel.font-sizeHardcoded CSSlabel.font-size (token)Review custom CSS if exists — these tokens may override label styles.N/A
Progress Circlelabel.font-familyHardcoded CSSlabel.font-family (token)Review custom CSS if exists.N/A
Progress Circlelabel.font-weightHardcoded CSSlabel.font-weight (token)Review custom CSS if exists.N/A
Progress Circlelabel.line-heightHardcoded CSSlabel.line-height (token)Review custom CSS if exists.N/A
Progress Circlelabel.letter-spacingHardcoded CSSlabel.letter-spacing (token)Review custom CSS if exists.N/A
Popoverborder.colorHardcoded CSS / inline CSSborder.color (token)Review custom border CSS — these tokens may override existing rules.N/A
Popoverborder.widthHardcoded CSS / inline CSSborder.width (token)Review custom border CSS.N/A
Popoverborder.styleHardcoded CSS / inline CSSborder.style (token)Review custom border CSS.N/A

Tokens Edited

WidgetsTokensOld ValueNew ValueDeveloper ActionMigration
Page Contentpage.mapping.content.paddingspace.0.valuespace.6.valueNone — migration handled to auto-override to space.0.value for older projects (ignored if override exists).Auto-overridden to space.0.value
Tabstabs.nav.border.width{border.width.base.value} (bottom-only){border.width.0.value} {border.width.0.value} {border.width.base.value} {border.width.0.value}None — updated to full border shorthand to allow configuring all four sides.Auto-expanded
Form Controlsinput.group.btn-width{space.10.value}{space.7.value}None — UX correction (input-affordance width change).N/A
Buttonsbtn.border.colornonecolor.transparent.valueNone — migration replaces invalid none value where override existed.Auto-fixed

Tokens Removed

WidgetsTokensOld ValueNew ValueDeveloper ActionMigration
Cardscard.footer.*Supported (tokens present)RemovedUse container inside card for footer-like content going forward. Existing cards with footer token overrides will continue to work.Backward compatible
Popovermin-widthtoken (previously)RemovedNone — min-width now controlled via property panel.N/A
Popovermin-heighttoken (previously)RemovedNone — min-height now controlled via property panel.N/A

Bug Fixes

Added validation for variant creation to enforce consistent naming.
  • Variant names must start with a letter (A–Z or a–z)
  • Allowed characters: letters, numbers, hyphens (-), and underscores (_)
  • Spaces and other special characters are not supported

Technology Stack

WaveMaker Studio

UI Frameworks (Web and Mobile)

DescriptionJS LibraryVersion
JS Bindingjquery3.7.1
jquery-ui*1.13.3
MVC FrameworkAngular18.2.13
ngx-bootstrap9.0.0
Stylesbootstrap3.3.7
Chartingd37.8.5
nvd31.8.11
Fullcalendar6.1.15
Built-in functionslodash-es4.17.21
Device support, gestureshammerjs2.0.8

Backend Frameworks (Web and Mobile)

DescriptionJava LibraryVersion
Spring Framework6.2.12 -> 6.2.15
Security frameworkSpring Security6.5.6 -> 6.5.7
Spring Data2025.0.5 -> 2025.0.7
Spring Boot3.5.6 -> 3.5.9
Spring Session3.5.2 -> 3.5.4
Java JSON utilitiesGson2.13.2
DB Persistence libraryHibernate(Jakarta)5.6.15. Final
Sample databaseHSQL2.7.4
JSON libraryJackson2.20.0 -> 2.20.1
Logging frameworkSLF4j2.0.17
Logging ImplementationLog4j22.25.2 -> 2.25.3
Http client libraryHttpComponents - httpclient5.5.1
Servlet Framework6.0.0
Database Connection PoolingHikariCP7.0.2
Commons Lang33.19.0
Guava33.5.0-jre
Postgresql Driver42.7.8
Hibernate Validator8.0.2.Final
Jgit7.4.0.202509020913-r
Commons Codec1.18.0
Commons IO2.19.0
Commons Text1.13.1
Antisamy1.7.7
Freemarker2.3.34
Apache Tika3.2.3
Mariadb JDBC Driver3.5.2
Mongodb Driver5.6.1 -> 5.6.2
Jakarta Validation Api3.1.1
commons-validator1.10.0
json-smart2.5.2

Web

Runtime Environment

DescriptionVersion
JDK21.0.6
WebSphere Liberty23.0.0.9+
JBoss Wildfly27+
Tomcat10.1.39

This is the default Tomcat runtime support. Apps can be deployed to any standard Java Web Server running on JDK 11. For more information, see here.

Angular Web

DescriptionVersion
Java21.0.6
Node22.18.0
Maven3.9.11 -> 3.9.12
npm10.9.3
Ant1.10.11

For more information about building projects with Maven, see here.

Mobile (React Native)

Environment Setup

DescriptionVersion
Java17
Node22.11.0
Maven3.9.9
npm10.9.0
Android StudioMeerkat 2024.3.1 to Narwhal 4 Feature Drop 2025.1.4
Xcode16.2 to 26
SDK Build Tools36.0.0
wm-reactnative-cli1.9.3 -> 1.9.5
Android Gradle Plugin (AGP)8.14.3

SDK Update

DescriptionVersion
Expo54.0.12
React Native0.81.4