TopLogic - the automated application engine
  • Releases
  • Dokumentation
  • Github
  • Discord
  1. Home
  2. Releases
  3. TL_8.0.0-alpha13
  4. #30209

8.0.0-alpha13
TopLogic Release

2026-11-13

enhancement

major
#29993
Configuration: Each configured function can be implemented in either Java or TL-Script, using the same configuration syntax (including in the React configuration editor)
#30000
Design System UI pass, part 1: one selection form; surface-interactive-selected becomes surface-interactive-strong
#30006
Engine Extensions for the Tax Application: writable secret storage in the database, application context path in development mode (tl.contextPath), and instance search by attribute value
#30025
React UI: Hide commands and units for which the logged-in user does not have the required role on any object
#30031
The database does not enforce uniqueness of reference values without duplicates: a unique index on the link tables, separate link tables for bags
#30041
Self-service accounts: invitations expire and record their acceptance, invitations can be accepted and managed in the React UI, localized mail templates
#30045
View layer slots: report a <slot-content> that reaches no <slot>, empty fallback of a <slot>, slot positions in split panels and the sidebar
#30053
Agent runs: bound the pool of parallel tool calls (AgentLoop.TOOL_WORKERS) and tell a user whose chat message waits for a free worker
#30054
Agent screenshots belong to their chat: deleted with it, shown as thumbnails in the chat
#30057
Administration of the React UI: scheduler (task list, run now, stop, activate/deactivate, cluster lock, run history) with one unified active/inactive switch per task
#30058
Administration of the React UI: memory trend chart (memory use over time incl. garbage collection) and the remaining monitoring views of the classic UI
#30059
Administration of the React UI: maintenance functions of the classic maintenance pages (database export/import/history compaction, SQL console, reload, search index, security storage, encryption)
#30061
React UI: recent changes of the user with revert of a commit (user menu)
#30062
Model editor of the React UI: instance browser and instance import of the selected type
#30063
Administration of the React UI: people (contacts with optional login) in one form
#30064
Administration of the React UI: login messages (messages shown at login, with their validity)
#30065
React Interface: Workflow Administration with BPMN Editor, Step Views from the View Designer, and Task Editing (BPE)
#30066
React Administration: View and Explain an Account's Effective Permissions on an Object (Role Inspector)
#30074
React Interface: Signing In with Passkeys (WebAuthn) — passwordless or as a second factor alongside TOTP; managing your own passkeys in the settings
#30075
Log View (React UI): Display the details of an entry (stack trace) in a dialog in a readable format
#30076
React Interface: Password change with confirmation message and validation before the identity prompt; protection against brute-force attacks on passwords and one-time codes
#30081
TL Views: Change Authenticator App (New TOTP Secret), Reset Two-Factor Authentication by Administrator
#30086
XML import: <update> of <unless-known> must restate the structure of the descendants it updates
#30088
View layer: document how a ChannelSource keeps a monitor running while its view is hidden and ends it with the window
#30095
OpenAPI Client: Parameter Value from a Secret Source
#30096
Rights System: Remove the configurable group mapper from the ElementAccessManager
#30097
Generate JavaScript libraries (umljs, ace, require.js, bpmn-js) in the Maven build instead of checking them in; update bpmn-js to version 18
#30098
Design system as an engine module: built by Maven instead of a checked-in copy with seals
#30104
Nightly preview builds of the engine with a fixed Maven version and a changelog instead of a rolling SNAPSHOT
#30108
pac4j Registration: The account mapping receives the identity provider's full identity (subject, claims) rather than just a login name
#30116
CommonMark: Displaying Tables (GFM) as HTML Tables
#30117
Refetch timeout does not specify the thread holding the commit/refetch lock
#30120
View layer: options of a string attribute cannot have display labels
#30122
Remove TLDoclet exceptions in ext/javadoc/javadoc-ignores
#30126
tl-chat: Chat actions run as React commands within the window rather than via a separate ChatServlet; the chat's proxy workaround is no longer used in favor of engine polling
#30131
View layer: show the fallback of AttributeWithFallbackStorage as placeholder of a form field
#30132
View layer: value listeners of the model (<value-listeners>) react to field changes in the React form, through a UI-independent listener contract
#30148
RecollateStringColumnsProcessor: Run ANALYZE after changing the collation (PostgreSQL)
#30149
Let a chat agent run page commands that the page of the chat allows, e.g. open a dialog
#30150
Ship a provider with recorded model answers for the agent tests of applications
#30151
React View Layer: Commands Without HandlerResult - View commands report errors as exceptions; React command handlers return their response as a msgbuf message
#30157
React Interface: Insert images into the HTML editor using Ctrl+V and drag-and-drop; resize using handles; never wider than the content
#30158
TL Chat: Let a chat agent pass the input of a page command it runs
#30160
Adding Albert to an application: shipped React chat page, how-to article and archetype defaults
#30163
SQLFactory: Generate column changes (modifyColumnName/Type/Mandatory) only with a complete column definition
#30167
Remove database defaults for columns: Add required columns using "create, populate, set as required"
#30172
Create accounts at an external login and assign their groups from a claim
#30179
An application generated with useSSO=true offers the generic OpenID login, switched on by the tl_pac_* environment variables, also on the development server
#30183
Self-Service: Open self-registration without an invitation
#30190
Remove the control application tl-factory from the engine, it is developed in its own repository
#30200
Agent Access and Recording: Commands operate on stable object IDs; technical keys are used only for recording and playback
#30215
View layer: a value channel whose value is remembered per user
#30223
Self-service mails: texts editable in the service configuration, language of an invitation selectable
#30225
Model: handlers declared on an attribute (change) or a type (creation, deletion), run within the commit
#30227
Design System UI pass, part 1b: tables with depth and visible column boundaries
#30250
TL Views: <start-job> / <job-status> - close button for an ended job, point of no return, partial result of a cancelled job, closing the dialog from the follow-up, follow-up sees the job's commits
#30253
tl-ai-core pulls the Playwright browsers (driver-bundle, 200 MB) into every application: browser tools move into the optional module tl-ai-browser
#30266
React Configuration Editor: Multi-line text (HTML, Markdown, code, multi-line) uses the entire line by default
#30267
Setting and removing administrative secrets; writable directory storage
#30268
System Environment: Display the source of configuration variables and set variables from the administration interface
#30276
AI Agents: Meaningful commit messages for changes made by an agent instead of "Agent edit"
minor
#30139
TL Views: Unit and Custom Number Format for Number Fields
#30188
TL Script: Read a binary value as text; Read a web app resource as a binary value
#30209
React Table: Show and Hide Columns Based on Channel Values (exists-if)
#30218
ModificationListener: no supported way to report to the user what a Modification changed, once the commit succeeded

defect

critical
#30146
Data migration is not protected against parallel execution when multiple cluster nodes are started simultaneously
#30196
Canceling a background job (TL Views <start-job>, Scheduler Task, JMS Consumer) interrupts the thread in the middle of a database operation and closes an embedded H2 database (MVStore panic, application becomes unusable)
#30224
TestFlowSvgPortable does not compile: FlowFactory.chart() has the parameter fixedView
#30301
React-Views: TestTreeTableRowEdit no longer compiles on master (ExpandArguments.ROW_INDEX replaced with ROW_ID)
major
#29847
Scripted test TestTransactionMonitor-01_RevertRevision fails when a scheduled task commits concurrently
#30043
TL Views: a value the server sets while the React rich-text editor has the focus is never applied; the composer keeps its text after sending
#30067
React Interface: Logging in in one browser tab immediately logs you out if a second tab for the application is open
#30077
TL Views: Wizard—re-entering an "Auto-Next" step without a separate navigation path leaves the user with no way to return to the workflow
#30078
React Interface: When setting up two-factor authentication, the key for manual entry is not displayed; only the QR code is shown.
#30079
Configured SecurityParents do not work with StructuredElementWrapper
#30082
React UI: Tabs in a dialog change the page's address and remain in the URL after the dialog is closed
#30090
Scheduler: A task that is due at startup is detached during shutdown while it is still running (NullPointerException in TaskImpl.getLog())
#30099
Scheduler tests: testStartTaskImmediately and testPeriodically have occasionally timed out since the scheduler was revised
#30103
tl-maven-plugin: If merging the view overlays fails during application build, the build remains green
#30106
tl-chat: Commands at the top of a data-list do not display their status (hidden, disabled with reason); clicking on a locked command produces no response
#30107
tl-maven-plugin: If generating a layout fails during application build, the build remains green
#30109
tl-chat: After logging in, the chat in the same browser window remains at "Log in to use the chat"
#30110
An aborted external login (OIDC) leaves a logged-in session without tokens
#30115
delete-module / delete-class do not clean up hasWrapperAttValue data
#30118
Passkeys per application can be used either for password-less login or as a second factor, but not both at the same time
#30119
AlterColumnProcessor does not update stored schema for abstract types
#30123
The scheduler incorrectly reports "There is no thread to remove" when a task fails to start
#30124
OpenAPI Server: The error message for a failed script is unreadable and is generated outside the interaction context
#30125
Agent access: /agent-api answers a request without a valid credential with a redirect to the login page instead of 401
#30127
An application at the server root keeps its session: the session cookie is sent to all its paths, and the React page announces its icon
#30128
A run without provider credentials ends as an authentication failure, and HTTP 402 is a billing failure for every provider
#30133
View layer: a field mandatory by dynamic visibility loses its required marker on a validation change
#30141
TypeIndexer: Java 21 as a supported source version; Index records
#30143
TL Chat: While an agent is performing multiple steps, their last message remains visible, and the status bar displays the current step instead of just showing "…" and "Working on …"
#30144
Chat sessions are invisible to their owner in an application with model-based security
#30147
React Interface: The "More Actions" menu does not close when the Escape key is pressed if all items are disabled
#30159
React UI Script Recorder: Recordings of tree, multiple-selection, and dropdown assertions can be replayed in a different session
#30164
TL Chat: A run that fails with an exception leaves no error in the conversation; it is gone after a reload
#30165
React: A command with ignoreStaleUi to a control that left the display still fails with 404 "Control not found"
#30166
TL Chat: runPageCommand gives the model the refusal of a page command in English instead of the user's language
#30173
OIDC login button is offered although the client has neither discovery URI nor provider metadata
#30176
The development server stops on /admin/stop from any address
#30177
The development server ignores X-Forwarded-* headers, so a relative callback URL behind a proxy names the wrong origin
#30184
DeleteTableProcessor does not remove " <alternative>" elements from the stored schema
#30201
Commit veto of the model constraints: a failed job (and its log) shows only "Cannot store, constraints violated." without the problems
#30216
Background processing fails with the error "Session revision invalid" if the window saves data while it is running (jobs, AI runs)
#30231
HtmlResKey: Also read the value as an attribute (add format)
#30244
tl-archetype-deploy: Declare the archetype integration test's dependency on tl-demo
#30247
Migrating to PostgreSQL with `autosave=NEVER`: Expected SQL errors abort the transaction
#30251
tl-ai-core, Anthropic provider: Claude 5.5 models missing from the bundled model catalog, and claude-haiku-5-5 sent a thinking budget (HTTP 400)
#30252
tl-ai-mcp-server: tools/list is not filtered by the caller's tool access, and /mcp/ with a trailing slash answers 404
#30254
tl-chat: A missing API key is reported as a rejected key ("The model rejected the access key")
#30255
tl-ai-core: agent turn rolled back with "Create on objects of type ... without permission" when a tool creates a part in an object created in the same turn - remove the duplicate pre-commit guard, check initial values in TL-Script
minor
#29961
React applications include modules from the classic interface (self-service, WYSIWYG editor, code editor, search, monitoring, AI administration)
#30044
TL Views: a sidebar separator stays visible when every item after it is hidden; the anonymous session sees the system separator with nothing below it
#30085
Default values <country value="..."/> and <time-zone value="..."/> (CountryDefaultProvider, TimeZoneDefaultProvider) cannot be used
#30089
The TL script functions `binarySize()` and `modelHealthReset()` return integers instead of doubles and log an error on every call
#30121
Compile-Errors in Eclipse in TL 8 alpha12
#30134
View layer: <composition-table> ignores the visibility (dynamic-visibility, hidden, read-only) of its composite attribute
#30140
TL Views: TestViewsLoad does not detect an undefined variable in a computed-column's value expression
#30142
CommaSeparatedStringSet: Non-deterministic serialization creates duplicate key attributes in the schema baseline
#30180
Flowchart (Gantt): Clicking on an element does not select anything if frozenRows &gt; 0
#30181
Flowchart (Gantt): The chart is always displayed in full—no vertical scrolling, but it becomes unreadable when there are many rows
#30185
Flowchart (Gantt): LineDeco labels (e.g., “Today”) are cut off beneath fixed headers; edges without arrowheads
#30187
Exporting diagrams as SVG (reactFlowToSvg, flowToSvg) is not suitable for Batik or printing
#30191
Module shutdown stops no module at all if the class of its InContext job cannot be loaded (database stays open in the container's JVM)
#30197
React Table: Date cell in in-place edit accepts any partial keyboard input (e.g., year 0002)
#30198
React Views: Tree Table ({{{<tree-table>}}}) without row editing ({{{row-edit}}}) – not a replacement for the classic tree grid
#30199
React-Views: When a constraint is violated, the editable table displays only a red border, not an error message
#30204
React Table: When there are multiple row types, attribute columns are resolved only for the first type (label, sorting, filter)
#30205
React Table with Row Edit: A column based on a derived attribute is editable, but saving fails
#30206
React: A disabled `upload-command` does not display a reason; `null-input-disabled` always disables it
#30207
React: Button with an upload action does not open the file dialog
#30208
React Table: No cell display for external links (URL)
#30211
React: The built-in rules for `delete-object` and similar take precedence over the configured ones (making `visible-if` ineffective)
#30212
React: `null-input-disabled` only checks the first input
#30213
Binary attribute: Querying the content type loads the entire content; BLOB columns in object tables are loaded only for small values
#30214
View layer: tooltips drop the line breaks of their text (.tl-tooltip__body has white-space: normal)
#30226
React Table: Commands are unaware of the displayed rows or their order
#30237
React-UI: No display while a command is running on the server
#30256
React-UI: Set the color role of a row, cell, or view as a separate script (row-role, cell-role, role) instead of the ineffective status classes tl-status-*
#30257
React-UI: Commands from a window in a detached session generate two WARN lines per command
#30258
React-UI: The only way to display tabs for a single type is by using a type deviation in `access-control`, and that is logged as a WARN.
#30259
KB: Committable.rollback() is called after a successful database commit if the changes or caches fail to be published
#30265
TL Script: When `throw()` is used or a `TopLogicException` occurs, `try()` passes only the message text to the `catch` block instead of the `ResKey`.
#30269
ModelAccessRights.isAllowed(Person, ...): Checks whether another person is granted bypass or admin status in the current context

task

major
#30046
Remove the unused service ReactComponentRegistry

update

critical
#30111
Update dependency requirejs to ^2.3.7 [SECURITY]
enhancement (User-visible)

minor

#30209

React Table: Show and Hide Columns Based on Channel Values (exists-if)

ReactUI

Problem

The columns of a table are fixed when the table is built. To show or hide a column based on a channel value (e.g., using a toggle switch), you must rebuild the entire table.

Version: 8.0.0-alpha12, React View Layer (tl-layout-view/tl-layout-react).

Reproduction (Prime)

Documents and Links (prime/project/documents.view.xml): The “Context” column should only appear when the “Include Subordinate Objects” toggle is enabled.

Prime: Both tables are contained within a <switch rebuild="true"> controlled by the toggle switch and receive the column via <dynamic-columns>. When the toggle is switched, the table is rebuilt.

Expected Behavior

A column has a condition based on channels that is evaluated without rebuilding the table.

Solution

Column declarations in a React table are given an existence condition:

  • `exists-if` on `<column>`, `<computed-column> `, and `<embedded-columns> ` (where it applies to all embedded columns; the embedded column declarations can also each have their own condition, and both must be satisfied). The condition does not consider a row, but rather the inputs: for <computed-column> and <embedded-columns>, the declaration’s own inputs; for <column> (which has no inputs of its own), those of the table or the surrounding embedding.
  • column-exists-if on <dynamic-columns>: evaluated per column object; treats the column object as $column (or the name from column-as) and the declaration’s own inputs.

Example:

<computed-column name="total" inputs="showApproved" exists-if="$showApproved" .../>
<dynamic-columns name="milestones" column-as="milestone" inputs="showApproved"
   column-exists-if="$showApproved || !$milestone.get(`my:Milestone#approved`)" .../>

As long as the condition is not met, the column does not exist for the table: It is not displayed and is not offered in the column selection; sorting, filtering, or grouping based on it has no effect. The user’s configuration (order, shown/hidden, width, pinned) is preserved and takes effect again as soon as the condition is met; the condition itself is not saved in the user’s personal settings. The existing `visible="false" ` / `column-visible ` (column starts hidden but is selectable) remains unchanged.

The conditions are re-evaluated whenever their input channels change; the table updates its column list without being rebuilt (selection, sorting, and scroll position remain). This applies to both read-only and editable tables, as well as to <tree-table>.

The set of column objects from <dynamic-columns> is still calculated when the table is built; only which of them exist is evaluated in real time.

Also Fixed

A channel specified only as the input for a column (not for the table) was not previously monitored: If it changed, cells, filters, etc., for that column continued to display the old value. Now, when such a channel changes, the table rebuilds its cells and refilters the rows (without re-reading the rows).

Technical
  • TableView.setAbsentColumns(Set) / absentColumns(): a non-persistent set of columns that do not currently exist.
  • TableViewControl.setAbsentColumns(Set): transfers columns and rows to the client in an update.
  • ColumnSetup.exists() (ChannelCondition), ColumnExistence tracks the conditions of a table’s columns.
  • Demo: tl-demo-react, Demos → Table Columns, “Conditional Columns” tab.
  • Get Started
  • Github
  • Discord
  • Das Unternehmen hinter TopLogic
  • Softwareentwicklung heute
  • Kontakt

© Copyright – Business Operation Systems GmbH

  • top-logic.com
  • Nutzungsbedingungen
  • Impressum
  • Rechtlicher Hinweis
  • Datenschutz
  • DE
  • Login