Neos 2.5 highlights

Key insights

Welcome to the 2.5 release of Neos. There are many updates in this version that we hope you'll like, some of the key highlights include:

Alternate keys

Neos now supports alternate keys on entities, allowing you to define unique identifiers alternative to the primary key. This feature is particularly valuable for data import scenarios and communication with external partners.

Alternate keys enable unique index generation, automatic repository search methods, and entity view integration with two-way binding for references, including support for composite keys and nested navigation.

Migration note: When upgrading to version 2.5, Neos automatically generates alternate key metadata from existing unique indexes on your data tables.

API response comparison for an entity view with embedded references and collections:

Traditional entity view (primary key based):

{
  "orderID": 1001,
  "orderNumber": "ORD-2025-001",
  "date": "2025-11-02",
  "rowVersion": "AAAAAAAAB9E=",
  "customer": {
    "customerID": 42,
    "code": "ACME-CORP",
    "name": "Acme Corporation",
    "preferredProductCategory": {
      "preferredProductCategoryID": 703,
      "code": "ELECTRONICS",
      "name": "Electronics"
    },
    "rowVersion": "AAAAAAAAB9F="
  },
  "details": [
    {
      "orderDetailID": 5001,
      "quantity": 5,
      "rowVersion": "AAAAAAAAB9G=",
      "product": {
        "productID": 301,
        "categoryID": 53,
        "code": "LAPTOP-PRO",
        "name": "Professional Laptop"
      }
    }
  ]
}

Entity view based on alternate keys (using natural business identifiers):

{
  "orderNumber": "ORD-2025-001",
  "date": "2025-11-02",
  "customer": {
    "code": "ACME-CORP",
    "name": "Acme Corporation",
    "preferredProductCategory": {
      "code": "ELECTRONICS",
      "name": "Electronics"
    }
  },
  "details": [
    {
      "quantity": 5,
      "product": {
        "categoryCode": "ELECTRONICS",
        "code": "LAPTOP-PRO",
        "name": "Professional Laptop"
      }
    }
  ]
}

For comprehensive documentation, see Alternate keys and Alternate keys in entity views.

Constants management enhancement

Neos now provides a comprehensive constants management system to centralize configuration values, magic numbers, and other fixed values. You can create constants static classes through Neos Studio with scope control (Shared/Backend/Frontend) and support for all C# constant-compatible data types.

For comprehensive information, see Constants.

Enhanced UI constants

Neos now provides standardized constant classes for UI development to eliminate hard-coded strings and ensure consistency across your frontend code.

// Instead of hard-coding
string color = "primary-500";
string size = "medium";

// Use the constants
string color = StandardColorNames.Primary500;
string size = StandardSizes.Medium;

Available constant classes include StandardColorNames (theme colors), StandardSizes (UI sizing), FontWeights (typography), and MessageSeverities (message levels).

For detailed usage, see UI Constants.

Hardcoded strings detection tool

A new tool in Neos Studio helps identify hardcoded strings that could be replaced with constants or resources. The tool analyzes both server and client-side C# code, showing file locations, occurrence counts, and smart suggestions when hardcoded strings match existing constants.

Access the tool from Tools > Hardcoded strings in Neos Studio.

For complete usage instructions, see Constants - Finding hardcoded strings.

New EntityViewRetrieving event rule on entity

A new event rule type has been added to allow to customize the filter when the underlying entity of the entity view is retrieved. For more information, see Event rules - Retrieving event rule.

Expose Web APIs as MCP Tools

Neos now supports the Model Context Protocol (MCP), allowing you to expose Web APIs as MCP tools. This enables AI models to interact with your APIs seamlessly. For more information, see Model Context Protocol (MCP).

Partial templates

Partial templates allow you to break down complex UI view and UI component templates into smaller, reusable fragments. Defined within a UI view or component, they share the full parent context (properties, actions, methods, computeds) and are evaluated at generation time.

Common use cases include splitting large templates into logical sections and creating responsive layouts with different desktop/mobile views.

For more information, see Partial templates.

Datagrid card mode

The datagrid now supports a card mode for responsive layouts. New attributes allow you to control when and how the datagrid switches between grid and card mode. You can also customize the card content using the card-template node.

For more information, see Datagrid.

Tenant Management

Publishing messages

We have added the possibility to publish messages to one or more tenants or to a specific version of a cluster. A common use case is the announcement of an upcoming update. To see more details, see the documentation.

Additional properties for the Tenant entity

The goal of this feature is to allow to customize the Tenant entity by dynamically adding additional data, see the documentation.

Definition of metadata for additional properties

Displaying additional properties

Editing additional properties

Reporting

Neos Studio performance improvements

Most reporting-related asset transfers (templates, styles) are now performed in UTF8 instead of the more expensive and cryptic Base64. Also the templates and styles listings do not include the Content property anymore: this should improve the overall performance of Neos Studio.

Styles bundle with 'AutomaticNeosStyles' collection

Alongside the report templates, we have report styles bundles.

A report styles bundle is expected to contain a collection of styles called "AutomaticNeosStyles".

When a template is statically configured to use a styles bundle or if the styles bundle is invoked dynamically via the WithStylesCollection API, the "AutomaticNeosStyles" collection will be imported and applied automatically (Viewer and PDF).

More information: report styles.

Styles bundle designer

Report styles are editable in a similar editor as the one used for the report templates.

Each time we want to edit an "AutomaticNeosStyles" collection we will need to pick a report that will act as a temporary container for those styles and allow to preview them in an actual document.

A launcher allows to pick a report that will embed the edited bundle of styles. For convenience, the reports referencing the bundle are emphasized:

Tenant module override

In a similar manner as the Content of a report template, the Content of a styles bundle can be overridden by a Tenant module.

UI Customization

Custom view picker

A new custom-view-picker component is available to manage custom views.

For more information, see Custom view picker.

Custom view sharing

To share a custom view, the user must now have access to Custom view sharing function.

Also, a shared custom view can be set as the default for users who do not have one.

Default custom view assignment

A new function Default custom view assignment has been added to enable setting a custom view as the default.

Neos dashboard

The Dashboard module allows you to display, customize, and manage dynamic dashboards within the Neos platform. It provides a synthetic and interactive view of important data for monitoring your activity.

More information : Dashboard.

v2.5.21

Published on Jun 17, 2026.

Features

  • Added the ability to customise tenant selection screen according to each tenant status (disabled via tenant manager or currently unavailable, eg: migrating). See this article. (17606)

Fixes

  • Fixed a memory leak in Semantic Kernel dependency injection configuration. (17577)
  • Fixed disabled tenants displaying in tenant selection screen. (17606), closes 34071

v2.5.20

Published on Jun 01, 2026.

Fixes

  • Database migrations for the cluster have been moved to background processing. (17221), closes 33741
  • Fixed the error in the cache building process. (17221)

v2.5.19

Published on May 26, 2026.

Fixes

  • [Neos Studio] Fixed tenant API path detection for tenant identifiers containing _ or -. (17229)
  • [Tenant Management] Improved unavailable-tenant cache recovery after Redis subscription failures. (17229), closes 33766
  • Fixed Pub/Sub processing so remote calls to Tenant Management GetClusterVersions now propagated the user. This prevented 403 permission errors when tenant cache was unavailable. (17219), closes 33858
  • Fixed the NeosAI cluster Dapr app-id which was colliding with the identifier of the main application. (17201), closes 33805

v2.5.18

Published on May 22, 2026.

Features

  • Added new neos_unavailable_tenant metrics. See this article. (16942)
  • Blocked gateway routing to unavailable or migrating tenants by returning HTTP 503 instead of forwarding requests. See this article. (16942)

Fixes

  • Fixed deployment documentation for specific Redis instance deployment. (17163), closes 33776

v2.5.17

Published on May 13, 2026.

Features

  • Added a BackgroundService-based execution mode for background server methods when Dapr Workflow was disabled. See this article. (17048)
  • Added configuration to switch between local background execution and Dapr Workflow support. See this article. (17048)

Fixes

  • Fixed tenants cache rebuild triggering unnecessary subscriptions on business clusters. (17057)
  • Prevented default tenant lookups from triggering state store or database access in TenantsAccessor calls. (17057), closes 32402
  • Update of the Dapr .NET SDKs to version 1.17.9. (17069)

v2.5.16

Published on May 06, 2026.

Features

  • [Documentation] Added documentation about deployment, rollback, and tenant migration workflows. (16896)
  • [Observability] Added neos_tenant_cache_rebuild_requests_total metric (see this article). (16896)
  • [Tenant Management] Added POST /api/v1/methods/resetalltenantcache endpoint to force rebuilding all tenant cache. See this article. (16896)
  • [Tenant Management] Added TenantsResolutionCacheFullRebuildUseTaskRunnerByDefault and TenantsResolutionCachePartialRebuildUseTaskRunnerByDefault to override tenant cache building dispatch mode (task-runner vs backend service). See this article. (16896)

Fixes

  • [Tenant Management] Added synchronous tenant-cache rebuilding for partial rebuilds (eg: during tenant migration). (16896)

v2.5.15

Published on Apr 28, 2026.

Features

  • [Tenant Management] Added an endpoint GET methods/tenantscacherebuildingstatus to check tenants state stores rebuilding status. See this article. (16769)

Fixes

  • [Security] Updated NuGet.* package references to 6.14.3 across the affected .NET projects to address GHSA-g4vj-cjjj-v7hg. (16796), closes 33222
  • [Tenant Management] Fixed tenants cache not rebuilding correctly when firing multiple database migrations. (16769)
  • [Tenant Management] Improved tenant cache rebuild reliability by clearing tenant cache completion markers before triggering a full rebuild, so tenant data can fall back to the database while caches are being reconstructed. (16785)
  • [Tenant Management] Optimized tenant-user state store rebuilds by batching tenant/cluster retrieval and processing. (16769)

v2.5.14

Published on Apr 14, 2026.

Fixes

  • Fixed an issue where semantic function invocations were not logged in Neos AI for GPT 5.2 and other models without direct tokenizer support. (16636), closes 32962
  • Fixed SignalR backward compatibility issue introduced in version 2.5 caused by tenant and user identifier casing normalization. (16734), closes 33026

v2.5.13

Published on Mar 24, 2026.

Fixes

  • [Helm] Fixed volume name too long error while deploying chart. (16259), closes 32383
  • Fixed datagrid row detail height recalculation to follow asynchronous detail content changes and reload scenarios. Detail rows now resize more reliably without relying on a short timeout window. (16450), closes 32179

v2.5.12

Published on Mar 05, 2026.

Fixes

  • [Helm] Fixed Zipkin pod OOM crashes in production by configuring JVM heap settings to automatically detect container memory allocations (16138), closes 32267
  • Fixed user permissions cache invalidation on tenant update. (16179), closes 32015

v2.5.11

Published on Mar 03, 2026.

Fixes

  • [Task Scheduler] Fixed tasks failing to start with Dapr version 1.16+. (16122), closes 32233

v2.5.10

Published on Feb 24, 2026.

Breaking changes

  • [Background tasks] The Identifier parameter of ServerMethodStartOptions must now conform to the RFC 1123 subdomain format (lowercase alphanumeric characters, '-' or '.', starting and ending with an alphanumeric character), following the upgrade to Dapr 1.16. (15968)
  • [Neos studio] NEOS_DAPR_HttpMaxRequestSize is now deprecated following its deprecation in Dapr 1.16. You should use NEOS_DAPR_MaxBodySize instead. Set the value using size units (e.g., 16Mi for 16MB). The default is 4Mi. See this article in Dapr documentation for more details. Note that using this parameter is not recommended since the limit in deployed environnement will still be 4Mi. (15968)

Features

  • [Dapr] Updated Dapr version from 1.13 to 1.16. (15968)

Fixes

  • Fixed an issue related to the generation of the MCP class of a server method. (15964), closes 32032

v2.5.9

Published on Feb 20, 2026.

Features

Fixes

  • [Studio] Fixed Json reporting data export from the Report Designer. (15759), closes 30289
  • Fixed decorator execution order by sorting business assemblies by module hierarchy. (15934), closes 31991
  • Fixed namespace generation for invalid alternate key message in entity view repository. (15763), closes 31691
  • Updated Stimulsoft library from version 2026.1.1 to version 2026.1.3 (fixes bugs with images). (15830), closes 31617

v2.5.8

Published on Feb 06, 2026.

Features

  • Added support for optional embedded editable references in API POST/PUT scenarios, with proper null-handling during editable reference updates. UI generation now reports an error if a UI view uses an entity view containing a non-required editable reference. (15700)

Fixes

  • [Helm] Fixed report server volume not mounting with correct fsGroup. (15681), closes 31656
  • Fixed loading of a specific non-embedded collection using the EnsureDataLoadedAsync method. (15696)

v2.5.7

Published on Feb 02, 2026.

Fixes

  • Fixed loading and generation of event rules when using inheritance across multiple modules. (15645), closes 31577

v2.5.6

Published on Jan 28, 2026.

Features

  • [Helm] Added the ability to mount more than one volume on backend/taskrunner pods using the volumes property. See this article for more details. (15541)

Fixes

  • [TenantsAccessor] Reduced load on Tenant Management service during initialization by caching tenant resolution data with automatic memory management (see this article for technical details). (15610)
  • Fixed retrieving UI event rules when overridden. (15608), closes 31512
  • Fixed UIView event rules generation for inherited views by resolving rules per module and avoiding generation when no inherited event rules are defined. (15606), closes 31539

v2.5.5

Published on Jan 26, 2026.

Features

  • Added the row-detail-expanded-by-default attribute to the datagrid to expand row details by default. (15524)

Fixes

  • [TenantManagement] Fixed tenant cache not rebuilding correctly on user request. (15538), closes 31431
  • Fixed UIView event rule callback chaining when the same rule was defined in multiple sibling/independent modules, ensuring the correct next-callback module is selected. (15583), closes 30621

v2.5.4

Published on Jan 12, 2026.

Features

  • Updated Stimulsoft library from version 2025.3.5 to version 2025.4.2 (fixes saving changes after performing the Undo command in the Designer). (15415)

Fixes

  • [NeosDashboard] Fixed hardcoded UI view titles. (15289)
  • [NeosDashboard] Fixed images incorrectly marked as colored when they were not. (15289)
  • [NeosDashboard] Fixed overlooked references to the NeosDashboard icon that needed renaming. (15289)
  • [NeosDashboard] Fixed the dashboard list not refreshing after adding a new dashboard. (15289)
  • [NeosDashboard] Fixed the missing toolbar in the dashboard list screen. (15289)
  • [User Permissions] Preserved system-generated user logins (e.g., ) during user creation and update with Microsoft Entra External ID or Azure AD B2C, preventing them from being overwritten by normalized email. (15368), closes 30895
  • Added daprVersion parameter support in Helm chart, enabling proper Dapr sidecar version alignment when deploying clusters with previous versions. See the documentation for more details. (15356)
  • Fixed Helm chart Dapr sidecars version which is now explicitly configured to match the SDK version used by the ecosystem. (15356)
  • Fixed the loss of default value when changing a column from nullable to non-nullable during migration. (15349), closes 31070

v2.5.3

Published on Dec 12, 2025.

Features

  • [Helm] Added the ability to set specific memory request/limit for each deployement (see this article). (15190)

Fixes

  • [Neos Studio] Fixed detection of server method calls in client code to correctly handle multi-line invocations, (15226), closes 30703
  • [NeosDashboard] Fixed colors defined by a user on a dashboard data source not being taken into account. For now, colors can no longer be set by a user on Doughnut and Pie data sources (they still can be set by code directly on the data source definition). (15205), closes 30772
  • Fixed source of UI component template diagnostics. (15213), closes 30831
  • Fixed the data type resolution for entity view repository key construction when the key included a reference, ensuring correct repository generation. (15219), closes 30837
  • Fixed the save behavior when selecting Save on the prompt indicating there are unsaved changes when closing a UI, to avoid saving embedded UI views that use data sharing. (15254)
  • Revert anonymous route check to use “contains” instead of “startsWith”, restoring the behavior from version 2.4. (15246), closes 30879

v2.5.2

Published on Dec 08, 2025.

Fixes

  • Added missing change to finalize the fix for the cyclic DI migration loop. (15194)

v2.5.1

Published on Dec 04, 2025.

Fixes

  • [Neos Shared UI] Revert padding change of the root element of neos-template-list UI component. (15161), closes 30715
  • Fixed an endless database migration loop caused by a cyclic dependency in dependency injection. (15166), closes 30731
  • Fixed CSV export of datagrid to ignore column header sort indicator position. (15167), closes 30726
  • Fixed error when pressing Tab to focus in datagrid with buttons in column-templates. (15141), closes 30691
  • Fixed generation of access APIs for bound images. (15136), closes 30675

v2.5.0

Published on Nov 28, 2025.

Breaking changes

  • [License Management] Added unique indexes to the following tables: CommercialModule, CommercialSolution, Customer, Feature, TechnicalFunction. Don't forget to remove duplicates from the database. (14622)
  • [User Permissions] Marked FunctionType property of the Permission entity as obsolete. The function type must not be stored in the database since it may not match the actual function type (if the type has changed in Neos Studio). (14061)
  • [User Permissions] Removed GetAssignedFeatureChildrenTreeNode server method. Use GetUserFunctionTree server method instead. (14329)
  • [User Permissions] Removed GetFunctions and GetVisibleFunctions server methods. Use the ILicenseFunctionLoader service instead. (14306)
  • [User Permissions] Removed TreeNodeFeature data object. Use the UserFunctionTreeNode data object instead. (14329)
  • Added a tenant locking mechanism to prevent changing the current tenant after DbContext initialization; attempts now throw an InvalidOperationException. Updated documentation to guide per-tenant scope usage when iterating across tenants. (14934)
  • Added cluster option UIDefaultBehavior:LayoutOverflowFix to prevent content overflow in layouts with fixed width, fixed height or the attributes layout:width="fill" or layout:height="fill". This option is disabled by default for existing clusters as it can lead to scrollbars appearing in areas with tight dimensions. For more information, see this article.
    More details : 14372
  • Added strict validation to UI templates to emit an error when a UIComponent references a Computed that does not exist. Previously, this situation produced no error. (15037)
  • Added validation to UI templates to warn when a UI component belongs to a module not referenced by the template's module or its parent modules. (15037)
  • AIEvaluationOptions.ExpectedAnswer has been renamed to AIEvaluationOptions.EvaluationContext, and use of AIEvaluationOptions.ExpectedAnswer is marked as obsolete. (14242)
  • Marked the Icon text property on the ViewModel as obsolete. The strongly-typed IconId property should now be used instead. (14732)
  • Modified frontend generation of entity view parameters. Now, to access the value of a parameter, you must use the Value property: EntityViewParameters.ParameterName.Value. A metadata migration automatically updates the existing code, but since the migration is based on a regular expression, there may be some edge cases that are not handled. (14468)
  • Modified how to obtain Device in UI code : It is now a static class (GroupeIsa.Neos.Designer.UIAbstractions.Device) instead of a property (of type GroupeIsa.Neos.Designer.UIAbstractions.SystemEnvironment.IDevice) on the current instance (this) so that it can be used in UI shared methods. (14766)
  • Renamed the options parameter of the StartAsync method to serverMethodStartOptions to prevent naming conflicts when a server method also defines a parameter named options. You are only affected by this change if you explicitly used the named argument options when calling StartAsync. (15095)
  • The selected-tab-index attribute of the tabs component now uses strict two-way binding: the internal value and the parent value are synchronized immediately in both directions. Any logic that relied on the internal state temporarily diverging from the parent value will no longer work. Review your usage of the attribute. (14104)
  • The tab-item components are now hidden when their visible attribute is bound to an element with a null value (same behavior as the condition of a if component). A tab-item is still visible by default when nothing is set in its visible attribute. (14104)
  • The ISavingRule interface changed from ISavingRule to ISavingRule, removing contravariance. Any custom interfaces inheriting from it must also remove the in modifier to remain compatible. (14750)

Features

  • [Deployment] Improved security and performances of Neos docker images by switching to alpine based images (except for report server). (13684)
  • [Deployment] Added the ability to persist RabbitMQ data in a volume to prevent data loss on failure/restart of the instance. See this article for more details. (14536)
  • [Manager] Improved the Swagger button to make it usable in multi-tenant mode: It opens the tenant selection page before accessing Swagger. (14828)
  • [Neos Studio] Added a confirmation dialog requiring the method name when deleting a server method in Neos Studio. (14829)
  • [Neos Studio] Added focus on the Name field when creating a table, an entity, entity view, UI view and UI shared method. (14847)
  • [Neos Studio]Added copy of the full type c# name in some Neos studio editors. (14796)
  • [NeosAICore] Added editor-options parameter to neos-ai-rich-text-editor component to pass options to TinyMCE editor init function. (14341)
  • [NeosAICore] Added html-preview-editor-options parameter to neos-ai-writing-assistant component to pass options to the HTML preview. (14341)
  • [Tenant Management] Added the ability to send a message to one or more tenants/clusters. (14070)
  • [Tenant Management] Tenant management now needs a task-runner to handle background tasks (such as rebuilding cache). See this article if you want to override deployment default configuration. (14539)
  • [UI Customization] Added an option to set a shared custom view as the default for users who don't have one. (14404)
  • [UI Customization] Added entity view parameters to custom views. To persist an entity view parameter in custom views, assign true to the SaveInCustomView property of the parameter (in the Initialized event rule of the UI view): EntityViewParameters.MyParameter.SaveInCustomView = true; (14540)
  • [UI Customization] Added permission to assign default views. (14685)
  • [User Permissions] Added SendTemporaryPasswordEmail property to UserPermissions configuration to disable sending temporary password email to new users. See this article for more details. (14539)
  • Added "Print settings" option in UI view actions. The option is only used when the user is using the desktop application. (14221)
  • Added buttons-layout component that horizontally displays a set of buttons. By default, buttons are displayed in the same order as they are listed in the buttons-layout component. The order can be reversed in the theme. This affects all buttons-layout components including the ones displayed by Neos framework and modules. (14064)
  • Added collapse-mode attribute (collapse, hidden) on panel-menu component to specify whether the menu was hidden or collapsed when minimized. (14648)
  • Added custom-view-picker component. (14621)
  • Added Dashboard module (14986)
  • Added editor-options attribute to the rich-text-editor component to pass options to TinyMCE editor init function. (14341)
  • Added expanded attribute on panel-menu component to control the open/closed state of the menu. (14648)
  • Added footer-template node to be able to add content in datagrid footer. (15069)
  • Added GetFormattedValue(item) method on the UI view property (IViewModelProperty interface) to obtain the formatted value of the property of the specified item. (14374)
  • Added header-padding and content-padding attributes on group-box component. (14773)
  • Added InvokeWithResponseAsync<T> to IRemoteServiceInvoker to return both deserialized data and the HTTP response, enabling header access (e.g., total record count). (14988)
  • Added label attribute on global-search-button to customize or hide the label button. (14648)
  • Added LoadGroupSummariesAsync method in the IViewModel interface to be able to get group summaries in UI code. (14392)
  • Added LoadSummariesAsync method in the IViewModel interface to be able to get summaries in UI code. (13994)
  • Added LookupDisplayProperty on UI view properties. See documentation. (13997)
  • Added max-lines attribute on heading component. (14648)
  • Added message-position attribute on input components to be able to hide the validation message. (14354)
  • Added mode attribute on frames-container : tabs (default mode) or stack (frames are stacked and tabs are not visible). (14748)
  • Added panel-menu-header and panel-menu-footer templates to customize the header and footer content of the panel-menu component. (14648)
  • Added style:font-style and style:hover-font-style directives to italicize text. (14357)
  • Added style:font-weight and style:hover-font-weight directives. (15062)
  • Added toggle-button-visible attribute on panel-menu component to allow hiding the "Collapse" button. (14648)
  • Added ValidateDataAsync(bool validateUnchangedItems) method on ViewModel. (14803)
  • Added validation-message component. (14369)
  • Added a distinctive icon for key properties in bound entity views (except for views based on complex alternate keys). (14732)
  • Added a extension methode IsPrivate() to System.Net.IPAddress. (14696)
  • Added a new card mode to the datagrid component for a more mobile-friendly experience. (14564)
  • Added a new event rule "Entity View Retrieving" on the entity. (14617)
  • Added a new module named NeosAIEMail2Entity with an email analyser agent to convert emails into JSON format and then persist the data in an entity, a webhook subscription, and an UI to see the logs. (14480)
  • Added additional properties feature. The goal of this feature is to allow authorized users to customize the Tenant entity by dynamically adding additional data. (14245)
  • Added alternate keys support on entities, enabling unique business identifiers with unique index generation, repository methods, and entity view integration. (15007)
  • Added an article explaining how to restore an encrypted database. (14915)
  • Added an unique agent for Neos studio to replace Ketty Elio and Gaia. (14242)
  • Added an unique agent in Neos to replace Gaia, Querya and Vasco. (14634)
  • Added background taks tracking in the manager page. (14537)
  • Added C# constant classes (StandardColorNames, StandardSizes, FontWeights, MessageSeverities) available in UI code to replace hardcoded strings, along with a "Hardcoded strings" tool in Neos Studio to identify candidates for replacement. See documentation. (14194)
  • Added console logs in the browser to help debug UI-side permission evaluations when a permission is denied. (14858)
  • Added display of the UI view action keyboard shortcut in dropdown menu. (14613)
  • Added methods FindEnum and GetEnum in UI code to be able to get an enumeration type from its name. (14171)
  • Added methods for handling unbound report generation response without having to take the persistence mode into consideration. The new APIs will accommodate for both legacy and Network Attached Storage-based deployments:
    • ReportGenerationResponse
      • GetDownloadIdentifierAsync(ITemporaryFileStorage)
    • ReportGenerationSucceededNotificationArgs
      • CreateFromResponseAsync(ITemporaryFileStorage, ReportGenerationResponse)
        More details : 14853
  • Added methods to entity views to retrieve original values and track changes (HasOriginalValue, GetOriginalValue and GetOriginalOrCurrentValue). (14645)
  • Added new theme variables : DatagridFooterBackground, DatagridFooterForeground, InputReadonlyFocusBorder, ModalFooterBackground. (15059)
  • Added partial templates on UI views and UI components. (14266)
  • Added SignalR open telemetry traces. (13713)
  • Added sorting when building the list of features: DisplayOrder, ModuleName, Name (14626)
  • Added support for defining alternate keys on entities. (14555)
  • Added support for placing repeat component between splitter and splitter-panel components in the UI template. (14560)
  • Added support for placing repeat component between tabs and tab-item components in the UI template. (14560)
  • Added support for reporting multiple validation errors from entity view saving rules without throwing exceptions via AddError, and propagated these errors to cancel save operations. (14750)
  • Added support for using alternate entity keys as the key of bound entity views. (14555)
  • Added the ability to auto-create a user after authentication with a specific role. (14415)
  • Added the ability to create constants in Neos Studio. These constants can be used in both backend and frontend code. See documentation. (14194)
  • Added the ability to customize read data isolation for a multi-tenant cluster, see documentation. (14001)
  • Added the ability to customize status code pages (eg : 403, 502). Please see this article. (14014)
  • Added the ability to expose entity views and server methods as MCPs. (14676)
  • Added the ability to include skill instructions within an AI agent's instructions. (14704)
  • Added the ability to retrieve the warning messages in the IInputComponent in the Automation library (14381)
  • Added the ability to use user permissions in global filters. (14248)
  • Added the reasoning effort parameter for AI agents. (14704)
  • Added theme padding configuration for card component. (14773)
  • Adjusted the full-size modal to fill the entire viewport on screens narrower than 768px. (14637)
  • Automatic report styles collection and tenant module override:
    • Added a report styles designer.
    • Added AutomaticNeosStyles collection handling during report generation.
    • Added capability to override a report styles bundle for a given tenant module.
      More details : 14568
  • Default sort input is now available in unbound entity views, as it is applied when calling SetItemsSource in the Retrieving event. (14411)
  • Disabled user account synchronization when the cluster was configured as single-tenant and logged an informational message instead. (14475)
  • Fixed the number of active filters in the filter-bar (inputs display mode). (14760)
  • Improved input-date, input-date-time components to not focus the input after selecting a value from the calendar on touch device. (14767)
  • Improved lookup component to not focus the input after selecting a value from the modal on touch device. (14767)
  • Improved tree-view component to display a spinner when a node is loading on expand. (14870)
  • Improved default value entry in Neo Studio. (15038)
  • Improved persistence of custom views to only store differences from the original UI view. (14442)
  • Improved reporting server startup in development. (14138)
  • Improved TechnicalDemos to trigger email processing and extended Order description length. (14480)
  • Improved the datagrid to request the displayed value of a scalar property with lookup if it has not been loaded (e.g. new row with the lookup property having a default value). (14916)
  • Improved the installation of npm packages at cluster startup using neos run to prioritize the local npm cache. (14850)
  • Modified property documentation handling: Use markdown-viewer component instead of converting Markdown to HTML during generation. (14930)
  • Modified the order of the custom view dropdown items. Now, custom views come before the actions of creating, saving, and returning to the original view. (14623)
  • Reintroduced AddBeforeContraintsCreation method, now it’s no longer obsolete. (14425)
  • Remove mandatory entry of 'temperature' and 'top-p' parameters from AI agents. (14215)
  • Removed user account synchronization when modifying permissions. This synchronization is functionally unnecessary. (14434)
  • Removed WSL as a prerequisite for installing the framework on windows. Memurai is now installed instead of Redis inside WSL. (13923)
  • Trimmed client API payloads by sending only scalar key properties for references and excluding server-side read-only properties (except keys) in POST/PUT requests. (15022)
  • Updated Stimulsoft library from version 2025.3.5 to version 2025.4.2 (fixes saving changes after performing the Undo command in the Designer). (14718)
  • Updated technical documentation for the user accounts synchronization feature (UML Sequence Diagram). (14458)

Fixes

  • [Helm] Changed Redis bitnami images reposity to use legacy images. Please see this article for more details on Bitnami's policy change regarding its Docker images. (14313)
  • [Tenant Management] Fixed cluster import displaying monotenant clusters. (14344), closes 29166
  • [Tenant Management] Fixed tenants not being returned by the global search. (14390)
  • [Tenant Management] Fixed timeouts when making changes in the tenant manager with a large number of users. (15100), closes 30546
  • [Tenant management] Fixed unwanted page reloading on tenants, clusters, and databases screens. (15107), closes 30570
  • [UserPermissions] Fixed cluster roles not being visible in other clusters when the UserPermissions module was an indirect cluster dependency. (14924), closes 30374
  • [Designer] Fixed ability to edit the template report without using Dapr (neos run -dp:false). (14096), closes 26326
  • [License Management] Fixed titles in creation and modification modals. (14702), closes 29471
  • [Neos Studio] Added validation to ensure enum members have unique persisted values. (14925), closes 30371, 30380
  • [Neos Studio] Fixed removal of UI view properties when an inherited UI view exists. (14902), closes 30081, 30362
  • [Neos Studio] Fixed client-side filtering on an expression boolean property. (14849), closes 30308
  • [Neos Studio] Fixed detection of invalid server method signatures (including generic type parameters). (14898)
  • [Neos Studio] Fixed full screen mode of code editor in modal. (14845), closes 28899, 29490
  • [Neos Studio] Fixed generation messages emitted for overridden metadata so that the message is associated with the metadata’s base module rather than the module of the last override. (14898), closes 29531, 29647, 29651
  • [Neos Studio] Fixed IntelliSense for code starting with whitespace characters. (14793), closes 28779
  • [Neos Studio] Fixed obsolescence version evaluation using base module names for overridden elements. (14898)
  • [Neos Studio] Fixed quick search in the "Add entity property to entity view" modal. (14126), closes 28769
  • [Neos Studio] Fixed the Modal component preview in the theme edition UI. (14476), closes 29511
  • [Neos Studio] Fixed the association of a resource to a function to use the resource module instead of the function module. (15021), closes 30457
  • [Neos Studio] Fixed the dark variant of the string resources icon. (14291)
  • [Neos Studio] Fixed the filter on UI view properties where enum members could depend on the current item. (15012)
  • [Notification Center] Fixed character casing of the user identifier when searching and sending notifications. (14070)
  • [Reporting] (Backward compatibility) Fixed the CSV export feature provided by the Reporting service to be able to work with requests emitted from Business clusters based on Neos v2.2. (14095), closes 28747
  • [Reporting] The subscriber GenerateAndNotifyAsync uses the correct UI Culture when localizing its eventual error messages. (13983), closes 28647, 28690
  • [Security] [Reporting] Removed display of exception messages from the Stimulsoft Viewer (sensitive information disclosure risk) and replaced them with the same family of localized messages as the ones that are shown in the toast after a failed PDF generation. (13983), closes 28647, 28690
  • [Security] Fixed CVE-2025-55315 (CVSS CRITICAL 9.9). Please update your backend / task-runner docker images to use at least ASP.NET Core Runtime version 8.0.21 (see this article for backend and this article for task-runner). (14583), closes 29701
  • [Tenant Management] Added a fixed height to the cluster editing modal to have a scrollbar in the list of versions. (15020), closes 29016
  • [Tenant Management] Added a new diagnostics menu to verify user synchronisation. (14423)
  • [UI Customization] Fixed a migration command that caused an error with a SQL Server database. (14471), closes 29507
  • [UI Customization] Fixed navigation buttons in the custom view editing UI that ignored the “Style rules” tab. (14834), closes 30268
  • [UI Customization] Fixed restoration of sub view property captions when returning to the original view. (14085), closes 28710
  • [User Permissions] Fixed formatting of error message when saving a user. (14763), closes 30066
  • [User Permissions] Fixed retrieval of permissions for a function whose type changed without permissions being updated after the type change. (14047), closes 28667
  • [User Permissions] Fixed roles cache not updated correctly for tenants on separate database. (14661), closes 29839
  • [User Permissions] Fixed the creation of a user in cases where the name of a role does not match the space management. (14742), closes 29912
  • [User Permissions] Fixed the display of permissions for a previously selected role after saving a new role. (14830), closes 29913
  • [User Permissions] Renamed Print image to NeosPrint to avoid conflicts. (14055)
  • Added a warning when quick search is performed on the client side and one of the properties is not present on the UI side. (14784), closes 30042
  • Added detailed logs to track mail webhook processing and facilitate debugging. (14765)
  • Added JSON-based create and update support in entity view repositories (AddFromJsonAsync and UpdateFromJsonAsync methods). (14535)
  • Added transpilation error for unsupported nullable member access patterns after conditional access operator (e.g., obj?.NullableProp.HasValue) to prevent generation of malformed TypeScript code. (14302), closes 28383
  • Database initialization failed when adding a cluster to a tenant (15036), closes 28071
  • Fix breaking change and restore backward compatible retrieval of reports generated by code when using the new persistence mode (and not having to set $env:NeosReportLegacyMode = $True in local development either). With this fix, the ReportGenerationResponse.ReportContentInBase64 property is always populated before the business backend code is called with the response. (14207), closes 28924
  • Fixed "Export sample business data (.json)" action in the Neos Designer for Stimulsoft reports. (14077), closes 26895
  • Fixed color attribute of divider component to be able to use theme colors. (14604), closes 29642
  • Fixed grid directives inside a grid-layout but with logical components (e.g. context) as parents. (14560)
  • Fixed In and Not in filter operators for Localizable String properties. (15094), closes 30586
  • Fixed neos setup command installing too recent version of DaprCLI on linux. (14328)
  • Fixed neos setup on MacOS with ARM64 processor. (14478)
  • Fixed Retrieving event rule call when loading groupings. (14286), closes 28986
  • Fixed a bug where server-side read-only properties could still be required, leading to save errors. (14856), closes 30253
  • Fixed an error when calling an entity view API when another entity view has the same name suffixed with a number. (14058), closes 28632
  • Fixed an issue where child collection properties were omitted from API requests when the same property name was unbound on the parent. (14812), closes 29933
  • Fixed an issue where collection items could remain in a modified state after saving on the client side when the relation property was not present on the child entity view. (14755), closes 29890
  • Fixed assignment of a base entity in TPH mode on an entity to prevent pre-populating the associated table. Having the table defined on a child entity in TPH mode can result in an invalid EF Core configuration (even though it may work depending on the order in which configurations are applied). (14951), closes 30389
  • Fixed autocompletion of grid: directives when inside a grid-layout but with logical components as parents. (14596), closes 29643
  • Fixed browser warning emitted by a button in a repeat on a string array. (14839), closes 30298
  • Fixed button border when focused. (14842), closes 29524
  • Fixed button spacing in component toolbar when attribute animated is false. (14453), closes 29461
  • Fixed character casing of the user identifier in SignalR notifications. (14070)
  • Fixed client-side (TypeScript) code generation when an entity-view uses an interface with a scope set to MetadataScope.Backend. (14249), closes 26697, 29049
  • Fixed compilation of the generated project CSharpAbstractions when there are only backend enums in the cluster. (14758), closes 30058
  • Fixed crash during full generation and other operations involving .resx file deletions by properly tracking and removing these files in the in-memory solution. Improved workspace stability with thread-safe handling of document updates and deletions. (14436), closes 29443
  • Fixed cursor restoration in textboxes by preserving the selection to prevent the caret from jumping to the end. (15061), closes 30514
  • Fixed datagrid error when closing UI view in PositionChanged event rule. (14722), closes 29988
  • Fixed default filter operator for Color properties. (14893), closes 30349
  • Fixed default values of carousel component attributes. (14128)
  • Fixed deletion of references and collections on entities. (14281), closes 28729
  • Fixed diagnostics for template UI bounds values not being reported in the code editor. (14079), closes 28706
  • Fixed display of horizontal divider component inside a grid-layout component. (14604)
  • Fixed display of lookup suggestions (where free values are allowed) that appeared even when focus was lost during data loading. (14862), closes 30319
  • Fixed existing AppResources string resources not being found when opened from the code editor. (14228), closes 29022
  • Fixed extra data loading when displaying the datagrid of an non-embedded collection with infinite scrolling enabled and no vertical scrollbar. (14083), closes 28723
  • Fixed file encoding changes when saved using Visual Studio. .cs files are now forced to utf-8 in generated .editorconfig file. This fix is only available on new clusters when using neos init command. Please see this article for how to fix it on your existing clusters. (14135), closes 28751
  • Fixed filter reset when applying a custom view that doesn't have a filter. (15080), closes 30501
  • Fixed frame matching logic to prevent incorrect reuse of frames when FrameId presence differs between existing and new navigation requests. (14282), closes 28784
  • Fixed gateway returning status code 400 instead of 403 when an authenticated user has no tenant on a cluster. (14014), closes 25251
  • Fixed generated reports folder not available from cluster backend/task-runner pods. (14201), closes 28924
  • Fixed generation of authorization conditions when they are only present on sub-functions. (15077), closes 30564
  • Fixed generation of EF Core one-to-one relationship configuration by placing IsRequired after HasForeignKey to prevent model-building errors. (14489), closes 29522
  • Fixed generation of the Multiline option of the UI view properties. (14559), closes 29618
  • Fixed generation results display in Neos Studio: avoided toasts on partial generation without new errors/warnings and improved deduplication using raw messages. Unwrapped facade build exceptions to show the root cause. (14459), closes 29446
  • Fixed GET model generation for optional reference properties. (14493), closes 29513
  • Fixed handling of unbound entity views with editable reference properties (14577)
  • Fixed incorrect download URL in report generation notification when manually emitted by backend code. (14294), closes 29111
  • Fixed initialization of the filter bar with a In filter on a property with lookup. (15009), closes 30419
  • Fixed logical deletion when physical fails flag wrongly being set to true when an entity view has unbound properties and the entity has no status property. (14330), closes 29148
  • Fixed metadata generation to prevent valid properties from referenced objects (e.g. Customer.Name) from being removed in UIViews. (14732), closes 29129, 29851
  • Fixed missing semantic function throwing exception in neos ai monitoring. (14571), closes 29433
  • Fixed navigation tree node updating when changing the name of a entity that exists across the different layers (Backend, Frontend and Shared). (14304), closes 28746
  • Fixed neos setup failing to install Redis on recent Ubuntu/Debian versions. (14781), closes 30123
  • Fixed OData filtering for GUID properties. (14902)
  • Fixed OData sort clause generated by the lookup to escape the ' character. (14795), closes 30217
  • Fixed opening from Neos Studio a solution with a space in its path. (14549), closes 29565
  • Fixed partial URL generation for images and files in EF Core queries. (14071), closes 28683
  • Fixed race condition during save by awaiting pending asynchronous event handlers, ensuring property and position change events completed before data was saved. (14373)
  • Fixed report generation in Legacy mode. (14488), closes 29515
  • Fixed reversion of UIView item inheritance status back to Inherited instead of Overridden when the item is saved with a content identical to the base item (applies to Actions and ActionLocations, Computeds, EventRules, Fields, PreValidationRules, Properties, StyleRules and UIMethods). (14405), closes 26697
  • Fixed rule overloading when the parent UI view was redefined in a child module. (14284), closes 29029
  • Fixed serialization/deserialization of a LocalizableString when publishing an event. (14070)
  • Fixed server code generation in business assemblies to avoid creating unit test files when the test project was missing. (14961), closes 30314
  • Fixed server data export using the NeosDataExchange module so that the entity view parameters are taken into account. (15074), closes 30502
  • Fixed server data export when the file name contained an accent. (14642), closes 29870
  • Fixed several reactivity issues with UI validation rules. (13782), closes 26210, 27746
  • Fixed signature of server methods with nullable parameters followed by at least one mandatory parameter (i.e. non-nullable and without a default value) (do not add the = null default value). (15105), closes 30478, 30491
  • Fixed sorting indicators of the datagrid so that the entity view default sorting is not redisplayed once the user has changed it. (14857), closes 30320
  • Fixed string comparison on client side when one of the two strings is null. (14865)
  • Fixed style of the disabled checkbox in the datagrid. (14771), closes 29128
  • Fixed task-runner not working on Linux in development. (14832), closes 30247
  • Fixed tenant cache reset when creating/modifying additional property metadata. (14851), closes 29843
  • Fixed the “Between” filter operator to handle cases where the first value is greater than the second. (14890), closes 30348
  • Fixed the load-data-on-scroll component which could load indefinitely. (14770), closes 30084
  • Fixed the ability to group unsortable server-side properties in a custom view. (14646), closes 29118
  • Fixed the call to baseRule after the introduction of CancellationToken. (14244), closes 29039
  • Fixed the checkbox selection in the datagrid when a client-side filter is applied. (14849)
  • Fixed the columns order in the column picker: visible columns are now listed first (sorted by their visible index), followed by hidden columns sorted alphabetically by caption. (14562), closes 29597
  • Fixed the display error of an external role whose label in the current language and in the default language is not specified. (15013), closes 30022
  • Fixed the display of a property's enumeration values in lookup suggestions. (14610), closes 29632
  • Fixed the display of the tooltip with the description of UI view actions displayed in a dropdown menu. (14287), closes 29094
  • Fixed the error display of an unnamed role in its cluster in the default language. (15079), closes 30568
  • Fixed the error when pressing Enter while focusing on the "..." button in a filter chip popover. (14288), closes 29093
  • Fixed the namespace generation for entity partial classes. (14852), closes 29983
  • Fixed the number of active filters in the filter-bar (inputs display mode) by excluding non-filterable properties. (15072), closes 30532
  • Fixed the number of items in the data grid footer when the source attribute is set. (14563), closes 29622
  • Fixed the opening of a popover from a UI method linked to a button. (15038)
  • Fixed the order of enum members when using visibility expressions. (14981), closes 29359
  • Fixed the position of the data grid's column picker, which could extend beyond the window. (15012), closes 30430, 30431
  • Fixed the removal of roles from an external cluster when state stores are invalid or missing. (14958)
  • Fixed the UI template so that logical components (e.g., if) can be used at the root level. (14561), closes 29612
  • Fixed the value displayed in a lookup on an editable reference that was not updated when the user changes the value of the property used as the display property on the editable reference. (14048), closes 22199
  • Fixed to commit the add row when scrolling in the datagrid. (15093), closes 29255
  • Fixed to not load aggregations of non-displayable UI view properties. (15014), closes 30429
  • Fixed to persist the active input before navigating with the Tab key in the datagrid. (14762), closes 30009
  • Fixed transpilation of the NavigationResultState type. (14694)
  • Fixed tree view explorer scoped entities synchronization (DataObject, Interface, EnumType, ConstantsStaticClass, StringResource). (14907), closes 29131
  • Fixed untimely triggering of a validation rule (checks that the metadata count is greater than zero) when deleting all metadata. (14822), closes 29931
  • Fixed vertical scroll bar of the tree-view component. (14606), closes 29730
  • Fixed Visual Studio opening when SQL Server Management Studio is installed on the machine. (14866), closes 29596
  • Fixed warning when a data column is required with the TPH inheritance model. (15019)
  • Fixed YAML serialization of multiline strings to ensure consistent behavior regardless of the line break style in the serialized text. (14732), closes 29129, 29851
  • Fixing a 400 Bad Request error when calling an API with the tenant in the URL. (15005), closes 30434
  • Improved generation to avoid an unclear error message about sorting when a key is missing in an entity view. (14863), closes 29604, 30062
  • Improved generation warnings related to quick search. (14787), closes 29864
  • Improved log handling in neos run by fixing long output redirection and truncating very large messages. The common case was a failed compilation where the output was redirected to the console, producing extremely large logs. This caused the application to hang and prevented the generation process from ever completing. The new behavior avoids this issue by limiting output size while keeping the most relevant parts visible. (15070), closes 28895
  • Made collection properties in create models nullable when nested inside editable references. (14836)
  • Moved IODataParser implementation to the Application layer to make it available in background server methods. (14831), closes 29525
  • Prevented opening the expression editor for entity view properties without name or data type, showing an error. (14863), closes 29604, 30062
  • Removed --prefer-offline argument from npm install command. (15017), closes 30424
  • Removed the invalidation of unnecessary user caches/permissions and pub/sub UserAccountSaved when updating the user's last login date. (15016), closes 30446
  • Removed useless run of dotnet tool restore command when running neos init. (14328), closes 29090
  • Renamed the directives layout:horizontal-alignment and layout:vertical-alignment to layout:align-self-horizontal and layout:align-self-vertical to be more explicit and understandable. neos migrate-metadata automatically renames them in existing templates. (14363)
  • This prevents unintended loss of existing collection items when posting entities containing editable references. (14836), closes 30273
  • Updated Stimulsoft library from version 2025.3.4 to version 2025.3.5 (fixes an error when trying to use the Undo feature in the Stimulsoft Designer). (14151), closes 28679
  • Updated the documentation related to the tenant management and nested clusters in the deployed environment. (14210), closes 28689

Previous releases

You can find the changelog of previous releases by clicking on the following links :