All Classes and Interfaces

Class
Description
Declares which roles may read and write an entity.
 
 
 
 
 
What a custom action handler receives when invoked: the entity it ran on, (for row/detail actions) the record's id, the current values of any toolbar inputs / scalar action-form fields, and any repeatable row group the form collected.
Runs a custom ActionSpec server handler for an entity.
Fluent description of successful action feedback that requires acknowledgement in a dialog.
Structured, semantic feedback from a server-side action.
Per-action placement builder for a document's detail-header actions (post / unpost / edit / delete): show it as a primary button, tuck it into the overflow (⋯) menu, or hide it entirely.
Where the client presents action feedback.
An expected business-rule rejection from an action handler.
 
Maps expected action business-rule rejections to the typed HTTP 422 wire contract.
Typed feedback and refresh intent returned by an ActionSpec server handler.
A read-only view of one record's resolved data — a list row, or the record a detail surface loaded — handed to the per-record functions of an action (.icon(...), .label(...), .visibleWhen(...), .enabledWhen(...)) and to a list's conditional row formatting, so a single control can vary by that record's state — a pause "Suspend" on a running record flipping to a play "Resume" when it's stopped, or a button shown only on the rows it applies to.
Where a custom action button appears.
Semantic tone of feedback returned by a server-side action.
Declares custom action buttons for an entity, from EntityView.actions(ActionSpec).
A resolved action button.
Fluent builder for one action; setters may be called in any order.
Values an action form opens with, computed server-side at open time by the formDefaults hook: values seed the scalar inputs (keyed by input key), rows seed the row groups (keyed by group key, each row a column → value map — the same wire shape the form submits back).
Fluent description of structured action feedback shown in the application's toast stack.
 
 
A one-time, versioned data migration — the home for backfills, data reshaping and seed data that the automatic schema upgrader cannot derive from metadata.
Marks a Ref<> attribute as the entity's assignee: the user who owns or is responsible for the record.
Built-in notification producer for record assignment.
 
 
Declarative validation bounds for an attribute, from @Attribute.
Enforces the declarative @Attribute constraints (required, string length, numeric min/max, regex pattern, email) on an entity before write, collecting every failure into a ValidationErrors keyed by field name.
Describes how a user may authenticate, so the login screen can be composed server-side rather than hardcoded in the client.
Additively contributes SSO options to the login screen, on top of whatever the single AuthMethodsProvider already offers.
Supplies the AuthMethods for the running application.
Immediate node that executes application code and follows one route.
Immediate process work implemented by application Java.
 
 
Runs a bulk row action over a set of ids and reports {ok, failed, total}.
 
 
 
Declarative back-office branding for a Layout's shell: an explicit app name, a logo (with an optional dark-mode variant), a favicon, and brand color overrides for the light and dark BrandPalettes.
A consumer's brand color overrides for one mode (light or dark).
Authenticated same-origin endpoint that enriches and forwards privacy-safe browser signals.
 
 
 
A named validation rule expressed as typed Java — the replacement for the old @BusinessRule(expression = "...") string mini-language.
Evaluates a Validated entity's typed BusinessRules before write and before posting.
 
Write-side commands for catalogs — create, update, delete.
Parses CSV files and applies rows to a catalog through CatalogCommandService.
 
 
How catalog rows should be applied.
 
Read-side queries for catalogs, shared by the REST API and the DivKit emitters so the SQL and ref-resolution live in one place.
 
 
 
Publish side of cross-node live-UI sync: forwards every locally-originated EntityChangedEvent onto the ClusterEventBus so peer nodes can fan it out to their own SSE clients.
Wire form of a cross-node notice carried by a ClusterEventBus.
An entity create/update/delete/post notice mirroring the fields of su.onno.events.EntityChangedEvent.
A per-user notification raised on one node whose recipient may be connected to another.
A user-presence notice for record-level collaboration markers: one user has entered, refreshed, or left the live view of a specific record.
A process mutation changed which task rows are visible to one or more users or roles.
Pluggable SPI for delivering ClusterEvents across the nodes of a horizontally-scaled deployment — the mechanism that keeps live-UI updates in sync when more than one instance runs behind a load balancer.
Relays locally committed process-task inbox invalidations to peer nodes.
Receive side of cross-node live-UI sync: subscribes to the ClusterEventBus and pushes events that originated on other nodes to this node's SSE clients via UiEventPublisher.publish(String, String, String, Object, String).
Desired state of a single column, derived from metadata.
One stored comment in the onno_comments thread of a single entity.
Resolves comment authors' avatar image URLs, live, from the identity catalog — the one the login links to via UiIdentityLink (e.g.
The discussion-thread endpoint.
The request body for posting a comment.
The request body for toggling a reaction.
Configuration for the /api/comments discussion-thread feature, under the onno.comments.* namespace.
Settings for @-mentions in comment bodies — letting a comment reference any catalog or document (users included) the author can read.
Published when a freshly posted comment replies to another comment — the reply counterpart of EntityMentionedEvent, with the same contract: the framework ships the event with no mandatory consumer; delivery (in-app notifications, mail, a cross-node bus) is purely additive via a Spring @EventListener.
Wires the /api/comments discussion-thread endpoint, its CommentService store, and the onno.comments.* configuration.
Persistence for onno_comments: the framework-owned thread store behind the /api/comments endpoint.
 
 
 
 
 
 
Materializes the deferred CSRF token on every request so the XSRF-TOKEN cookie is present after the first response to a fresh client.
Header and sample rows extracted from an uploaded CSV.
Resolves the authenticated principal to a domain catalog record via the configured UiIdentityLink (e.g.
 
An opaque, self-describing position in a keyset-paginated list — the "where I left off" token a client echoes back to fetch the next window.
Builds the home/dashboard content div: a greeting header and the widget area.
Reads the live database structure (tables and their columns) from INFORMATION_SCHEMA, which both H2 and PostgreSQL expose.
Live tables and columns, keyed by upper-cased table name.
Calendar bucket used when a list opens grouped by a temporal column.
Immediate branching node driven by a typed, exhaustive decision.
A typed, not-yet-connected decision outcome.
 
Boot-time guardrail against the soft-delete footgun.
 
An authored desktop shell — the structural peer of Layout.
When the shell launches the JVM it passes --onno.desktop.home=<dir> pointing at the OS per-user app-data directory.
The immutable window description the Tauri shell fetches from /api/desktop/manifest at boot.
 
 
The two endpoints the Tauri shell drives at launch: GET /api/desktop/ready — returns 200 once the context is up, so the shell knows when to swap the splash for the real window.
Infrastructure toggles for desktop mode.
The builder a DesktopApp configures.
System-tray builder.
Window geometry builder.
Dev-mode reload signal: watches a trigger file and broadcasts a reload SSE event — a full browser refresh on every connected client — whenever the file is touched.
Width preset for an action form or feedback dialog.
Marks a grouping/filtering key on an accumulation or information register.
Factories + fluent styling helpers for real DivKit div nodes, emitted as plain maps so Jackson serializes them to the DivKit JSON schema ("type": "container" | "text" | "gallery" | "image" | "separator" | ...).
Wraps a root div in the DivKit document envelope ({ templates, card: { log_id, states: [{ state_id, div }] } }) that every official DivKit renderer (Web, iOS, Android, Flutter) consumes.
Emits the server-rendered DivKit app, split so the client can render instantly and load data lazily: /shell returns the chrome (top bar + nav, no data — fast), and each content endpoint returns just that surface's card.
 
Write-side commands for documents — create, update, delete, post, unpost — plus the document reconstruction needed for posting.
Parses CSV files and applies rows to a document type through DocumentCommandService.
 
How document rows should be applied.
 
Published after a document has been successfully posted and its posting transaction has committed (movements written, balances checked, _posted flipped).
Read-side queries for documents (list with optional date range; detail with tabular sections), shared by the REST API and the DivKit emitters.
 
 
Published after a document has been unposted and its unpost transaction has committed (register movements reversed/deactivated, _posted cleared).
 
 
 
Terminal node of a typed process graph.
Published whenever a catalog or document changes, regardless of which write path made the change — the generic REST controllers (raw JDBI) and repository.save(...) (Spring Data JDBC) both emit it, so server-side listeners see every change, not just back-office edits (issues #28, #29).
Narrow SPI the framework-starter write callbacks use to emit EntityChangedEvents after a repository.save(...)/delete(...).
Per-entity configuration scope passed to lambdas on SectionBuilder.catalog/document/register.
Published once for every readable entity mention in a freshly posted comment — the mention counterpart of DocumentPostedEvent.
Per-entity UI definition, authored in code and discovered as a Spring bean — the "view" layer of the framework.
 
 
Maps @Enumeration constants to/from their deterministic UUID ids.
 
A single value of an @Enumeration.
Human-facing display label for a single @Enumeration constant, distinct from the Java constant name.
Spring Data JDBC converters that bridge our value-object types (Ref and framework enums) and the UUID columns emitted by the schema generator.
 
 
 
Reads a framework enum back from a varchar column that holds the enum's UUID as text.
 
Reads a Ref back from a varchar column that holds the referenced id as text.
 
 
Application-defined handler for inbound CloudEvents.
 
A compiler-checked reference to one Java bean property.
UI hints for a single field, configured via UiLayoutBuilder.
Per-field hint builder.
Per-entity field hints, authored on each EntityView.fields(su.onno.ui.EntityConfigBuilder<E>) and resolved by class.
Deprecated, for removal: This API element is subject to removal in a future version.
use the shared Field token.
Resolves and composes typed Field references.
The default MediaStorage: streams uploads to a directory tree on disk and serves them back through GET /api/media/{key}.
One message returned by a FormValidator.
Visual and semantic severity of advisory live form feedback.
Resolved metadata for one live form validator.
Live values supplied to an application-defined asynchronous form validator.
Supported endpoint for dependency-aware, advisory generated-form validation.
 
Resolves application-provided FormValidator Spring beans by their configured type.
Application-provided advisory validation for a generated form.
Turns the framework's existing privacy-safe lifecycle event into immediately useful ERP throughput.
 
 
 
A typed unit of human work in a business process.
Route node that waits for a HumanTask to complete with one of its typed outcomes.
A typed, not-yet-connected task outcome.
Summary of a CSV import run.
One failed CSV row, using 1-based data-row numbering (header is not counted).
A decoded inbound CloudEvent delivered to EventHandlers.
Routes a decoded InboundEvent to every EventHandler that supports its type.
Idempotency ledger for inbound CloudEvents.
Marks a repository finder as intentionally returning rows that are marked for deletion (soft-deleted), opting it out of the deletion-aware finder check (onno.repository.deletion-check).
 
 
 
 
Read-side queries for information registers, used to drive related-list panels backed by a register junction (see RelatedList, Junctions).
 
 
 
Deprecated.
Declares custom input fields for an entity's list toolbar, from EntityView.inputs(InputSpec), and the fields of an action-form modal (ActionSpec.ActionBuilder.form).
Presentation metadata for an action-form dialog.
Fluent builder for a repeatable row group.
Fluent builder for one input; setters may be called in any order.
A resolved toolbar (or action-form) input field.
A resolved action-form row group: a repeatable row of columns.
The kind of toolbar input field rendered alongside the custom action buttons.
Raised when a typed process graph is structurally incomplete or inconsistent.
Jackson-backed process payload codec supplied by the Spring framework starter.
 
Core JDBI runtime for durable, versioned typed process definitions.
 
Kafka message listener that decodes the CloudEvents envelope, de-duplicates via the Inbox, and dispatches to application EventHandlers through the InboundEventRouter.
The SQL behind keyset (a.k.a.
The rendered ORDER BY body and seek predicate for one page.
One keyset-paginated window: the decorated rows plus the nextCursor a client echoes back to fetch the following window, and whether any rows remain.
An authored layout — the structural peer of Page and EntityView.
The resolved UiLayout for each Viewport.
The builder a Layout configures: navigation sections (with per-field hints) and — for persona layouts — the target roles and match priority.
Serves pages of list data to the list grid.
Compiles the onno-list grid's declarative filter values (sent by the React island as eq/in/like/prefix/ge/le query params) into a safe SQL fragment with bound parameters.
A compiled predicate: a WHERE-ready fragment (no leading AND) and its bindings.
Shared helpers for the list grouping query (see CatalogQueryService#groups / DocumentQueryService#groups).
One aggregate to compute per group: an aggregate fn over a numeric column.
The result of a grouping query: the group headers, and whether the cap truncated them.
Builder for an entity's list/table surface, used inside EntityView.list(su.onno.ui.ListSpec<E>).
A per-group subtotal function (row count is always present and needs no declaration).
A declared per-group subtotal: the aggregate fn over a numeric field.
A custom list-body renderer: the widget-registry ListSpec.CustomSpec.type the client resolves the component from, an optional toolbar-toggle ListSpec.CustomSpec.label (else the UI's list.customView message), and whether the list opens on the custom view.
A resolved list filter: the bound field, its label, the control type and — for the ListSpec.FilterType.OPTIONS/ListSpec.FilterType.MULTI_OPTIONS controls — its choices (each a value→label pair).
How a filter narrows the list query (and which control the grid renders).
Where a list's map geometry comes from, and how it reads.
One choice of a ListSpec.FilterType.OPTIONS/ListSpec.FilterType.MULTI_OPTIONS filter: the value matched against the field by the query, and the label the UI renders for it.
A conditional row tint (see ListSpec.rowStyle(java.util.function.Function<su.onno.ui.ActionRow, su.onno.ui.ListSpec.RowStyle>)): a semantic tone the client maps to its theme (a translucent background wash over the row), not a raw color — so the same view reads correctly in light and dark themes.
A stored binary read back for serving, returned from MediaStorage.load(java.lang.String).
Builds the server-driven login screen as a DivKit card from the available AuthMethods.
Serves the server-driven (DivKit) login screen at GET /api/divkit/login.
Bridges the authenticated Spring Security principal into the MCP tool-call context.
Contributes a dedicated, high-precedence SecurityFilterChain scoped to the MCP endpoint.
Exposes a Spring bean method as an MCP tool.
Authenticated call context injectable into an McpTool method.
Customizes an input parameter of an McpTool method.
Programmatic extension point for contributing tools to the onno MCP server.
Wires the /api/media binary-upload endpoint and its default filesystem storage.
The framework's binary ingestion endpoint.
Configuration for the /api/media binary-upload endpoint and its storage backend, under the onno.media.* namespace.
 
Pluggable backend for binary uploads — the SPI behind POST /api/media.
The comment mention/reference typeahead source: GET /api/mentions?q=…&kind=… fans the query across readable catalogs and/or documents and returns a unified, ranked suggestion list.
Built-in notification producer for comment @-mentions.
A typed reference embedded in a comment body — the comment-thread analogue of Ref<T>.
Resolves the entity mentions in a comment thread to {display, avatarUrl, readable}, live and per-viewer — the mention counterpart of RefResolver, batched the way CommentAuthorAvatars batches author avatars.
A mention resolved for one viewer: identity + (when readable) its live display and avatar.
The on-the-wire syntax for a comment link: @[Display](kind/name/id) for a mention and #[Display](kind/name/id) for a reference.
One mention occurrence found in a body: its ref, the snapshot label, and the exact matched text.
 
 
Generates the MCP tool set generically from the MetadataRegistry.
Everything an AppMigration gets to work with: a JDBI Handle bound to the transaction the migration (and its history record) runs in, the metadata registry for resolving table/column names from entity metadata, and the active SQL dialect.
The ordered set of changes that would bring the database in line with the metadata.
Executes AppMigrations exactly once per database, in version order.
 
How the app's navigation chrome presents.
Local-only ClusterEventBus used when no cross-node transport is configured — a single-node deployment, a non-Postgres (e.g.
One durable, per-user notification: a timeline entry telling a person that something concerning them happened — they were @-mentioned in a comment, a document was assigned to them, and so on.
The per-user notification endpoint.
Configuration for the /api/notifications per-user notification timeline, under the onno.notifications.* namespace.
The assignment producer: when a catalog/document Ref<> attribute annotated AssigneeField is set to (or changed to) a user, that user is notified they were assigned the record.
The mention producer: turns each readable @-mention of a user in a freshly posted comment (an EntityMentionedEvent) into a notification for the mentioned person.
The reply producer: when a comment replies to another comment (a CommentRepliedEvent), the parent comment's author is notified.
A request to raise one notification, built fluently and handed to NotificationService.notify(su.onno.ui.notifications.NotificationRequest).
Fluent builder for a NotificationRequest.
Wires the /api/notifications per-user notification timeline, its NotificationStore, the NotificationService delivery hub, and the onno.notifications.* configuration.
The framework's notification hub and public producer API.
Persistence for onno_notifications: the framework-owned, per-user notification timeline behind the /api/notifications endpoint.
One newest-first window of a timeline, with the cursor to resume after it.
 
 
Marks freshly-loaded aggregates as not-new so that a subsequent repository.save(...) issues an UPDATE rather than an INSERT.
Publishes hard-delete events only after Spring Data has performed the delete.
 
Auto-configures authentication for an Onno application.
 
Demo-only authentication shortcuts for the in-memory auth mode.
Browser security policy for intentional iframe embedding.
 
Provider presets.
Persistent "remember me" login for OnnoAuthProperties.Mode.IN_MEMORY.
Effective OIDC settings after the OnnoAuthProperties.Provider preset has been applied.
How token claims map onto Spring Security authorities.
One claim that carries roles, and the shape of its value.
Session longevity for the cookie-based modes.
The shape of a role claim's value.
 
 
Excludes Spring Boot's default JdbcRepositoriesAutoConfiguration since OnnoRepositoriesAutoConfiguration handles JDBC repos with proper RegisterRepository exclusion.
 
 
The onno-framework version this build was produced from, baked into META-INF/onno-build.properties by the processResources step.
Wires the Postgres LISTEN/NOTIFY ClusterEventBus default.
 
Wires desktop mode: exposes the manifest/readiness endpoints the Tauri shell drives, and supplies a default DesktopApp when the application defines none.
 
Configuration for generic CSV imports.
A MappingJdbcConverter that fixes how framework enums map onto their database column type.
 
 
 
Inbound (consumer) settings.
 
Auto-configuration for the onno MCP server.
Configuration for the onno MCP server.
 
 
 
 
JDK Flight Recorder instrumentation helpers for onno framework operations.
 
Repository guardrails (onno.repository.*).
Schema lifecycle configuration (onno.schema.*).
Security-related configuration (onno.security.*).
Replaces Spring Boot's JdbcRepositoriesAutoConfiguration with one that excludes RegisterRepository subtypes, and enables register repo scanning separately.
Spring Data JDBC repository base that implements the framework's deletion-mark contract for catalogs and documents.
Maps the framework's ValidationException (a missing required attribute, an out-of-range / malformed value, or a failed business rule) to HTTP 400 with a small JSON body, so a client-input error reads as a Bad Request instead of a 500 (issue #32).
 
 
 
 
An authored page — a route whose content you compose in code, the page-level peer of EntityView.
Composes a Page's content: an optional header, a grid of dashboard widgets, and freeform PageComponent blocks.
Preset view for an embedded PageBuilder.list(Class, Consumer) — initial filter selections, a base feed constraint, a group-by column and date granularity, and a sort.
One column of a PageRow: a width and a PageBuilder region holding the column's content (any block — widget, list, text, custom — plus further nested rows).
A freeform block a Page composes beyond the widget grid: a text block, a div-custom extension, a full interactive entity list, or a section of action buttons.
 
Renders an authored Page to DivKit content: a header, then a recursive PageDivBuilder.Region tree — each region is a widget grid + freeform PageComponent blocks + nested PageDivBuilder.Rows of PageDivBuilder.Columns, so a page can compose an arbitrary column layout (and a right rail is just the common two-column case).
One column of a PageDivBuilder.Row: a width spec (fraction, "<n>px", or null) + its region.
A page region: a widget grid (gridColumns wide), freeform components, then layout rows.
A horizontal band of columns (stacks vertically on mobile).
Resolves an authored Page for a route, scoped to the active profile and the client's Viewport: the most specific match wins — a page for this (profile, viewport) beats one for the profile alone, which beats the universal default; else none (the caller falls back).
A horizontal band of a page — one or more PageColumns laid out side by side.
A resolved page widget.
Theme-aware color palette mirroring the app's shadcn CSS variables (a neutral, zero-saturation scale) so emitted DivKit surfaces match the rest of the UI in light and dark.
Immediate fork that activates every branch in a closed enum set.
A typed, not-yet-connected parallel branch.
Join paired with one typed parallel fork.
 
A reference whose target may be one of several declared catalog/document types.
 
Loads persisted document aggregates for chronological posting restoration.
Narrow SPI the PostingEngine uses to emit DocumentPostedEvent/ DocumentUnpostedEvent after a post/unpost transaction commits.
ClusterEventBus backed by Postgres LISTEN/NOTIFY — the default cross-node transport, needing no infrastructure beyond the database the app already uses.
 
Posts documents: runs their Postable logic, writes the resulting register movements and totals, enforces non-negative balances, then flips _posted.
How movements in an accumulation register react to backdated document changes.
 
 
 
Route-level presence: tracks which signed-in users are currently on each route — a record, an entity list, or any other page (dashboards, custom pages) — so the UI can show collaboration markers ("Ada and Babbage are also here") on the open tab, list rows, and the sidebar nav.
The heartbeat body: the pane's route path and an action (enter/heartbeat/leave).
In-memory registry of who is currently viewing each record, for record-level collaboration markers ("3 people are here", like the avatars in a shared document).
Authenticated actor performing a process operation.
Stable identity used for task ownership; normally the UUID of an identity catalog record.
Authenticated HTTP boundary for the durable typed process runtime.
 
 
 
 
Typed definition of one business-process route.
Typed migration between two registered versions of the same durable process definition.
Validated, version-aware registry of application-provided process definitions.
Durable link from a task to the catalog or document it concerns.
Transactional durable runtime for typed process definitions.
Narrow event bridge used by durable process engines without coupling the core process API to Spring.
Stable execution identity supplied to an automatic process step.
Typed business-process route graph.
Immutable structural description of a validated process graph.
Stable process identity plus mutable login/display snapshots for audit and UI.
A running instance created by the prototype InMemoryProcessEngine.
Target payload and target step for every durable source token.
Typed payload and active source tokens supplied to a definition migration.
Typed source token presented to a process-definition migration.
A typed node owned by a ProcessGraph.
Inspectable node identity, kind, and named outgoing routes.
Inspectable kind of a typed process-graph node.
Serialization boundary used by the durable process engine.
Registers the durable timer/subprocess poller with the starter's JobRunr scheduler.
Persistence-oriented view of a durable process instance.
Lifecycle of a process instance.
Stable identity of a step in a business-process definition.
Post-commit invalidation for the process-task inboxes whose visible work may have changed.
Calculates when a durable timer node becomes eligible to continue.
Inspectable durable execution token, including timer and subprocess waits.
Durable state of one execution token in a process instance.
One recorded process transition.
One durable, append-only transition in a process instance's audit history.
Cause of one durable process transition.
Durable human task exposed by ProcessEngine.
Immutable audit entry for one durable human task.
 
One catalog/document type allowed by a polymorphic reference field.
One candidate record supplied to a RefOptionDecorator.
Live generated-form context supplied when decorating reference-picker options.
Contextual reference-picker search.
 
Context-dependent presentation and selection state for one reference-picker option.
Application-provided batch resolver for contextual reference-picker option state.
Resolves and applies application-provided contextual option decorators.
Semantic colour for a contextual reference-option badge.
 
Resolves Ref UUID columns and Enum UUID columns to human-readable display values.
Declares the catalog/document types allowed in a PolyRef field.
 
 
Serves pages of register data to the virtualized onno-list island — the register counterpart to ListDataController.
 
 
 
A (col1, col2, …) IN ((v1, v2, …), …) predicate over a set of dimension tuples.
Read-side queries for accumulation registers (movements, balance, turnover), shared by the REST API and the DivKit emitters.
 
 
 
 
 
 
Scans for RegisterRepository interfaces and ensures they are registered with RegisterRepositoryFactoryBean, replacing any JDBC-created definitions.
A declarative related-list (inline child rows) panel for a catalog or document view, backed by a junction — a catalog or an information register — rather than an owned tabular section.
Builds one RelatedList panel for a catalog editor.
Resolves and reads the rows of a related-list panel for any owning entity — catalog or document — over any junction — join catalog or information register.
 
Built-in notification producer for comment replies.
Renderer-agnostic resolved list surface: a title and ordered columns.
One per-group subtotal: the numeric columnName to aggregate, the fn (sum/avg/min/max), its header label, and the display format carried from the column (so a money subtotal renders as money).
cellMenu: a row-action submenu label the cell opens directly on right-click (ListSpec.cellMenu); blank = the cell has no menu of its own.
A custom list-body renderer (see ListSpec.custom): the widget-registry type the client resolves the component from, the toolbar-toggle label (blank = the UI's list.customView message), and whether the list opens on the custom view.
A resolved list filter: a stable key (the field name, the client's state key), the label, the data columnName the query filters on (resolved + validated against the entity's columns), the control type ("options", "multiOptions", "contains", "startsWith" or "dateRange") and, for the (multi-)options controls, its options (each a value→label pair).
One groupable column: the data columnName the GROUP BY runs on, its picker label, and whether it is a date/time column (date) — a date column offers a day/month/year granularity and buckets rows by period instead of exact value.
The list's grouping capability: the columns a user may group by (the "Group by ▾" picker), the per-group subtotals to show, and the defaultColumn the list opens grouped by (blank = opens flat).
A resolved map view: the data columnNames the geometry reads — a marker point from a latField/lngField pair and/or a geoJsonField (GeoJSON points/paths/areas) — an optional labelField for the popup, and whether the list opens on the map.
One choice of a (multi-)options filter: the value the query matches against the column, and the label the control renders.
Resolves descriptor metadata into a JSON-shaped attribute view, merging field hints over descriptor defaults.
 
 
 
One change in a MigrationPlan: what it is, the SQL that performs it, and whether it can lose data (destructive changes are skipped unless onno.schema.allow-destructive=true).
 
Computes the MigrationPlan that brings the live database in line with the metadata-derived SchemaModel.
Renders CREATE TABLE IF NOT EXISTS DDL for everything in the metadata registry.
Persistence for onno_schema_history: one row per applied schema change-set (kind SCHEMA, carrying the metadata snapshot and the DDL that was executed) and one row per executed AppMigration (kind MIGRATION, claimed via a unique constraint so concurrent instances run each migration exactly once).
 
How the framework treats schema differences at startup (onno.schema.mode).
The full desired database state derived from the MetadataRegistry: framework tables (sequences, outbox) plus one TableModel per catalog, document, tabular section, register, enumeration and the constants table.
Builds the desired SchemaModel from the metadata registry.
A point-in-time record of the metadata-derived schema, persisted as JSON in onno_schema_history.
 
 
Startup schema lifecycle: scans nothing itself — it takes the already-built MetadataRegistry, derives the desired SchemaModel, diffs it against the live database (and the previous SchemaSnapshot from onno_schema_history), and then acts according to SchemaMode.
Encrypts/decrypts @Attribute(secret = true) values at rest with AES-256-GCM.
Applies a transform to the secret String fields of a typed catalog/document aggregate.
Strips @Attribute(secret = true) values out of read responses so the generic API is write-only for secrets.
 
 
Ensures the Spring Session JDBC schema exists on persistent databases.
App settings backed by the framework's Constants.
App-shell presentation config: the NavStyle this layout's navigation uses, plus the consumer's BrandingConfig (app name, logo, favicon, brand palette).
Emits the app chrome as two independent DivKit cards — the topbar (brand + actions) and the nav — so the client can position them per NavStyle: nav as a horizontal TOPBAR, a vertical SIDEBAR rail, or a pinned BOTTOM_BAR.
A branding logo for the shell header / mobile menu: the (theme-resolved) image URL plus optional fixed width/height in dp.
 
 
 
Loads complete Spring Data document aggregates, including tabular sections, for chronological posting restoration.
 
Null-safe JDBI parameter binding shared by the generic catalog/document write paths and the framework-owned onno_comments writer.
Identifies the target database so upsert helpers can emit portable SQL.
The SELECT … FROM … JOIN … WHERE … GROUP BY … ORDER BY assembler used by register virtual tables.
Pre-rendered SQL fragments for one statement.
A single sign-on option offered on the login screen — typically one OIDC client registration, or an additive non-OIDC identity provider contributed by a connector (see AuthMethodsContributor).
Synthetic start node of a process graph.
A reference to a stored binary, returned from MediaStorage.store(java.io.InputStream, java.lang.String, java.lang.String, long) and serialized as the JSON body of POST /api/media.
Typed invocation of a child process definition.
Durable node that starts a typed child process and routes on its terminal step.
A not-yet-connected child-cancellation route.
A typed, not-yet-connected child terminal route.
Builds the per-surface DivKit content (catalog/document lists, document detail, register report) from the resolved metadata view + data rows.
form (may be empty): an action-form dialog's field descriptors — the client collects them in a modal before POSTing the action (see ActionSpec.ActionBuilder#form).
Desired state of a single table, derived from metadata.
Declares an owned line-item List on a document.
 
 
Resolves task assignees from the identity catalog configured by UiLayout.identity().
 
Candidate stable identities and roles allowed to claim a human task.
One privacy-safe product or operational signal.
 
Application-facing API for semantic business outcomes and custom operational events.
Non-blocking telemetry boundary.
 
 
Durable wait-until node with one continuation.
Immediate, side-effect-free choice with a closed enum result.
One-time conversion support for applications moving legacy UI values and authored metadata to the 2.0 contracts.
Counts from a completed table-column conversion.
 
Collects the custom actions and toolbar inputs declared by every EntityView, indexed by entity class.
A DETAIL action's per-record resolution (issue #255): the same visibleWhen / enabledWhen / label(fn) / icon(fn) functions a ROW action evaluates per list row, evaluated once against the loaded detail record.
 
 
Pushes entity-change notifications to browser SseEmitters for live UI updates.
Links an authenticated account to a domain catalog record (e.g.
 
A sidebar link to an authored Page at an arbitrary route — the nav peer of an entity reference.
 
A named persona bundle: its own navigation (sections), home (widgets), branding (title/theme) and the roles that resolve into it.
 
 
 
 
 
Typed brand color overrides for one mode; unset slots stay null (renderer default).
Configures a named persona profile.
 
Builds the ShellConfig — this layout's navigation presentation and BrandingConfig (app name, logo, favicon, brand palette).
 
 
 
Loads a built-in chrome message bundle for onno.ui.locale — the base layer between the English UiMessages.DEFAULTS and a deployment's explicit onno.ui.messages overrides.
The framework's own chrome strings — action buttons, confirmation dialogs, the login screen, empty/loading states, and client-side validation messages — as a single label map with sensible English defaults a deployment can override per key.
Resolves which UiLayout.Profile a user sees, by matching their roles against each named profile's target roles.
 
 
Bulk-action tuning.
Dashboard rendering tuning.
A single one-tap demo login: a button label plus the username/password it submits.
List/table grid defaults, applied unless an EntityView overrides the window size.
Login-screen options.
Custom widget plugins.
Resolves a per-entity EntityView (authored in code) over the auto-generated metadata defaults into a renderer-agnostic ResolvedListView.
Periodically asks onno-cloud for the latest published framework version and, when it is newer than the running one, flips UpdateChecker.status() to "update available" — which the web client reads off /api/config and renders as a dismissible banner.
Configures the "update available" check: the running app periodically asks onno-cloud what the latest published framework version is and surfaces a notice when it is newer than its own.
The last-known result of the update check, exposed to the web client via /api/config.
A document/catalog that declares typed validation rules, checked before write and before posting.
Accumulates validation failures across all sources (declarative attribute constraints, custom BusinessRules) so the user sees every problem at once rather than one at a time.
Thrown when an entity fails framework validation on the write path — a missing required attribute, an out-of-range / malformed value, or a failed BusinessRule.
The device class a client reports for itself, so the framework can serve a layout and page composition tailored to it.
Builds the SQL aggregate expression for a count/metric card.
Builds the grouped-aggregate SQL behind the chart/stat/sparkline/gauge widgets (#199): a GROUP BY groupBy[, seriesBy] computing one (or, for a dual-axis combo, two) aggregate values per bucket, so a chart ships O(buckets) rows instead of the whole table.
The rendered statement plus its bound parameters (the widget filter's bindings included).
The widget's aggregate request, straight from the query string.
Parses an authored count/metric-card filter predicate into a safe SQL fragment with bound parameters.
A compiled predicate: a WHERE-ready fragment (no leading AND) and its bindings.
Discovers consumer widget-plugin modules on the classpath at startup.
Durable audit events in the lifecycle of a human task.
Lifecycle of one durable human work item.