Explore the features

Automatic binding, explained with one customer.

Keep fields, summaries and other views connected to the same Data paths.

A guided reading · 2 min

Why it is useful.

A customer name often appears in an editor, a heading and a confirmation. Without a shared relationship, each change becomes a coordination task. A binding says which application value a declaration uses. The runtime routes Data changes to the declarations that depend on them.

The benefit grows when data arrive through different routes. A restored file and a user edit can update the same Data path; bound views do not need separate refresh code for each origin.

Reactive does not mean unconditional.

A caret pointer reads a value and reacts to changes. An equals pointer reads a value when the declaration executes but does not trigger execution. In a controller, this distinction lets a search term trigger work while another parameter is read only at that moment.

A relative path starts with a dot. Under a customer datapath, .name refers to customer.name. The same small piece of interface can therefore be placed under another branch without rewriting every pointer.

Python · explanatory excerpt
panel = root.div(datapath=".customer")
panel.input(value="^.name", live=True)
panel.p("^.name")

Read the explanation here. The working lesson and full contract are linked below.

What happens when the context changes.

Variable datapaths let a branch follow a selected Data context. The runtime re-registers the affected relative pointers as the context changes. Removing Source also releases its registrations. These are useful properties for views that display different records over time.

The control still defines when an edit becomes Data. Native inputs default to change; live=True writes on input. Validated components can keep an invalid draft separate from the accepted Data value.

See it, then investigate it.

In the pointer lesson, edit a value and inspect its Data path. Compare a reactive input with a parameter that is only read. Then follow the tour’s calculation chapter to see bindings used as the inputs and output of a formula.

A useful distinction

Does an equals pointer freeze a value forever?

Reveal the explanation

No. It reads the current value whenever the declaration runs. It simply does not make changes to that path trigger the declaration.

Try the working example and read the full contract

Open the Python lesson (b01) ↗
Official documentation ↗