All Classes and Interfaces
Class
Description
Declares which roles may read and write an entity.
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.
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.
Fluent configuration returned by
EntityConfigBuilder.validation(java.lang.String, java.lang.Class<? extends su.onno.ui.FormValidator>).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 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).Fluent builder for one filter;
ListSpec.FilterBuilder.options/ListSpec.FilterBuilder.multiple()/ListSpec.FilterBuilder.multiOptions(java.lang.String...)/
ListSpec.FilterBuilder.contains()/ListSpec.FilterBuilder.startsWith()/ListSpec.FilterBuilder.dateRange() pick the control type.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.
OIDC configuration for the
OnnoAuthProperties.Mode.OIDC and OnnoAuthProperties.Mode.RESOURCE_SERVER modes.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 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.Builds one
PageRow: a sequence of PageBuilder.RowBuilder.col(java.lang.String, java.util.function.Consumer<su.onno.ui.PageBuilder>) calls.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).
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.
Fieldtoken.