September 2026
The ASP.NET Core 10.0 Windows Hosting Bundle must be installed on the web server.
Projects using Web Snippets require a dedicated application pool that supports ASP.NET Core.
Update the IIS application physical path from:
<project root>\WebSnippets
to:
<project root>\WebSnippets\bin
Projects using Web Service Publishing Raw Mode must update the IIS application physical path from:
<project root>\WS
to:
<project root>\WS\bin
A split button is a button with a default action and alternative actions. They can be used to group links when users commonly use the default action and the alternative actions are closely related to the default action.
Top links and component links can be turned into split buttons.
Some messages can be improved by formatting the text. All dialogs defined in metadata (Admin -> Dialogs) now support Markdown. You can also use columns like ADMIN_ErrorMessageMarkdown to return formatted messages from stored procedures.
The Lightbox feature now also applies to the Picture control type when used in the Grid component.
The Output formatting setting for field information can turn addresses and phone numbers into clickable links. It was already supported in the Grid component and in normal InfoSQL boxes. It is now also supported in InfoSQL box tables.
The control now separates the current user and the user filter into two distinct controls.
When combining the GenAI component with the Chat component, by default users need to wait until the model has generated its full response before they can start reading it.
The GenAI component can now run in Streaming mode, receiving the response in chunks as it is being communicated, and then use Client Sync to make the Chat component show the partially generated response.
In previous versions, tool support in the GenAI component had to be improvised by giving tool descriptions in the system prompt.
This version introduces a dedicated result set for tool descriptions and tool calls. Using them should make model tool use more reliable.
The version introduces semantic search using HNSW vector indexes with optional SQL Server full-text search. Documents are indexed as text chunks and can be searched by meaning as well as exact matches.
If the Chat component runs another component in the background, instead of a progress bar the chat's generic thinking message will be replaced by the background component's progress text.
Resource URL and Audience can now have different values. Most IdPs will use the same for both settings, but Entra prefers different values.
You can now configure a suggested Scope in the protected resource metadata. This is used when the IdP requires a scope to issue tokens.
The existing JavaScript column is useful for declaring functions and running scripts that can execute independently of page content.
The new OnReadyJavaScript column allows you to declare scripts that run only after the page has finished rendering. This is useful for scripts that depend on page elements being available.
The new LinkIcon column lets you assign a system icon to a top/component link dynamically.
IsPrimary is a new alias for IsPrimaryTopLink and IsPrimaryComponentContentLink, and can be used for both link types.
DisabledReason is a new alias for BoxLinkDisabledReason, ComponentContentLinkDisabledReason and TopLinkDisabledReason, and can be used for all three link types.
For link labels, LinkLabel is the new preferred column name and should be used instead of NavigatorLinkText.
The column PassingField_<xxx> defines a passing field named <xxx> that is shared by all links in the same table. For example:
| PassingField_DocumentId |
|---|
| 123 |
In some cases, different cells require different passing field values. Previously, this was achieved using the legacy column <colname>_PassingFields, which in turn required concatenation and did not support link aliases.
The new column <colname>_PassingField_<xxx> defines a passing field named <xxx> that applies only to a specific cell. For example:
| Contract_CellLink | Contract_PassingField_DocumentId | Invoice_CellLink | Invoice_PassingField_DocumentId |
|---|---|---|---|
| ShowDocument | 1 | ShowDocument | 2 |
Tables can now be renamed from Database Designer. This affects the tables related objects like column names, constraint names etc. Some advanced cases that require drop/create are not yet supported.
Fixed lookup values now need to be applied to improve the workflow for developers using local databases.
Normally, each event listener processes events serially on a first-come, first-served basis. This model is easy to reason about, but it can lead to delays when many events are queued at the same time.
Menu item listeners now support the Execute in parallel setting. When parallel execution is enabled, the listener can be configured with 2, 4, or 10 threads. Events are still processed in queue order, with the oldest events dequeued first, but each thread can dequeue and process events independently of the others.
To use parallel listeners safely, the menu item's stored procedure should be written to avoid deadlocks.
Web Service Call already supports inserting credentials into arbitrary HTTP headers or the raw request body. To reduce the risk of injection attacks, this is a cumbersome process.
You can now export credential values directly to HTTP headers by returning a table that maps credential names to header names.
Any tool that responds to an URL can now be registered and invoked from the admin toolbar.
For example,
codex://threads/new?prompt=letsworkonmenuitemid{p_MenuItemId}