Skip to main content
A Custom Widget is a low-code function whose result describes a small user interface. It can display data, collect input, refresh a result, open a detail view or launch a registered action. The same interaction model is used in dashboards and private Assistant cards. Start with a static result. Add one input and one refresh action before introducing background Jobs or nested views.

Build your first widget

Paste a complete, read-only example and verify what changes.

Rows and matrix

Understand the returned structure, layout and IDs.

Types and fields

Choose text, charts, tables, inputs, forms and buttons.

Events and actions

Connect a user interaction to a declared action.

The four parts

The source runs on the server; the browser renders the result. An on entry describes an action as data. It does not contain a browser callback.

Learning path

  1. First widget — a working input and greeting.
  2. Matrix and IDs — rows, cells and stable identity.
  3. Inputs and forms — defaults, drafts and validation.
  4. Context and bindings — $widget and passing values.
  5. Partial refresh — update one cell and retain the rest.
  6. Job submission — a separate write executor and completion probe.
For the surrounding saved workspace, see Dashboards.
Last modified on November 8, 2026