App Connect Introduction
Intro Next generation front-end framework for reactive, data-driven web sites and apps App Connect is a high-performance front-end framework, comparable in powe
Bootstrap 5 dynamic modals (App Connect)
Section titled “Bootstrap 5 dynamic modals (App Connect)”Control Bootstrap 5 modals reactively with App Connect: bind visibility, call show/hide actions, and handle modal events.
Introduction
Section titled “Introduction”This tour introduces Bootstrap 5 modals as reactive UI components inside App Connect. You will look at how the modal is represented in Structure, which bindings and actions control its visibility, and how modal events fit into a larger client-side workflow.
Tour goals
Section titled “Tour goals”By the end of this tour, you should be able to explain the full modal control loop in Wappler: what opens the modal, what closes it, which state or event drives that change, and where you inspect those bindings and actions in the UI.
Where you configure it
Section titled “Where you configure it”Use App Structure to select modal elements and Properties to configure bindings, events, and actions.
Wrap-up
Section titled “Wrap-up”Review what you did and choose a next tour.
Next steps
Section titled “Next steps”Pick a related tour to continue.
Browser component (navigation + viewport)
Section titled “Browser component (navigation + viewport)”Use the Browser component for navigation, online/offline state, viewport, scroll, and history events.
Introduction
Section titled “Introduction”This tour positions the Browser component as App Connect’s bridge to client-side browser state. You will review which events and properties it exposes, how those values become usable in bindings, and when it is the right source for navigation, viewport, online status, and history-driven behavior.
Tour goals
Section titled “Tour goals”The goal is to understand the Browser component as a shared context provider for the page, not just a list of random browser APIs. By the end, you should know which kinds of UI behavior belong here and how to inspect those events and values in Wappler.
Where it shows up
Section titled “Where it shows up”Configure Browser events and state in Properties, and use it as a UI-level source for navigation and viewport data.
Wrap-up
Section titled “Wrap-up”Review what you did and choose a next tour.
Next steps
Section titled “Next steps”Pick a related tour to continue.
Calculator (expressions + toNumber)
Section titled “Calculator (expressions + toNumber)”Build a small reactive calculator in Wappler and use it to understand expressions, input scope, and why toNumber() is essential before doing numeric math in bindings.
Calculator: reactive expressions
Section titled “Calculator: reactive expressions”This tour uses a two-input calculator to show how App Connect expressions evaluate in real time. You will inspect the result binding, follow where each value comes from, and see where type conversion prevents string-math bugs.
What you’ll learn
Section titled “What you’ll learn”You will learn the whole expression workflow, not just the final formula: which inputs are in scope, how the Data Bindings Picker helps assemble the expression safely, and where to apply toNumber() so the result behaves like real arithmetic.
note: HTML input values are strings by default. Use toNumber() before doing math (A.value.toNumber() + B.value.toNumber()).
Prerequisites
Section titled “Prerequisites”This tour opens a sample App Connect page in Design View. Keep Page Panels (Structure) and Selection Panels (Properties) visible.
Expression: computed result
Section titled “Expression: computed result”The result is computed from two inputs. No click action is needed — the expression is reactive.
Result field (auto-selected)
Section titled “Result field (auto-selected)”Inspect the result text binding — it shows the computed sum expression. (The result text is selected for you.)
Orient yourself in Properties panel
Section titled “Orient yourself in Properties panel”Start with the wider context in the Properties panel so the next control makes sense in the full workflow. In the next step, you will focus on Text binding expression and see how it fits into this area.
Text binding expression
Section titled “Text binding expression”This field contains the expression that computes the sum. It uses toNumber() so math works correctly.
note: App Connect input values are strings by default. Use toNumber() before doing math (A.value.toNumber() + B.value.toNumber()).
Inspect it in the Data Bindings Picker
Section titled “Inspect it in the Data Bindings Picker”The picker icon opens the Data Bindings Picker so you can explore what’s in scope and see how the expression is built.
tip: Prefer the Data Bindings Picker over typing raw expressions — it keeps your bindings valid.
Data Bindings Picker popup
Section titled “Data Bindings Picker popup”Use the Data Bindings Picker to select inputs and formatters from a tree and insert them into the binding field.
Inputs in scope
Section titled “Inputs in scope”You’ll see the input components and their properties in the tree. Select their value properties to build expressions.
Expression preview
Section titled “Expression preview”This preview shows the full expression that will be inserted back into the text binding field.
Formatter icon
Section titled “Formatter icon”This icon opens the Data Formatter for advanced formatter chains such as number, currency, date, and text formatting. You can explore that popup in the dedicated Data Formatter tour.
Close Data Bindings Picker
Section titled “Close Data Bindings Picker”Close the Data Bindings Picker to return to Properties. This step matters because Close Data Bindings Picker is part of Popup Databindingspickup Button Cancel, and understanding that context makes the next action easier to repeat in your own project.
Try it in Preview mode
Section titled “Try it in Preview mode”Switch to Preview mode and change the input values. The result updates immediately.
Switch to Preview mode
Section titled “Switch to Preview mode”Preview mode makes the inputs interactive.
Wait for Preview mode
Section titled “Wait for Preview mode”Wait for the page to finish switching modes.
Change A and B
Section titled “Change A and B”Type new numbers in A and B. The result updates instantly (no button required).
Return to Edit mode
Section titled “Return to Edit mode”Switch back to Edit mode to continue learning.
Next steps
Section titled “Next steps”You’ve practiced expressions and type conversion. Next, learn the bigger workflow: components, properties, events, and actions.
Pick your next tour
Section titled “Pick your next tour”Continue learning App Connect gradually.
Conditional display & repeating lists
Section titled “Conditional display & repeating lists”Use show/hide/if and repeaters to render UI from data — configured visually in Wappler.
Conditional display & repeating lists
Section titled “Conditional display & repeating lists”Build reactive UI by showing/hiding sections and repeating elements from a dataset — configured visually in Wappler (no manual code required for the common cases).
Three building blocks
Section titled “Three building blocks”Most dynamic UI on the page comes down to: conditional display, binding text/attributes to data, and repeating UI for lists.
Where you’ll work
Section titled “Where you’ll work”Select the element in App Structure, then use Properties to configure show/hide/if, repeat, and bindings.
Conditional display (show/hide/if)
Section titled “Conditional display (show/hide/if)”Control when an element is visible and whether it exists in the DOM.
Show/Hide toggles visibility
Section titled “Show/Hide toggles visibility”Use show/hide when you want to keep the element in the DOM but toggle visibility based on state (a Toggle, Variable, form state, etc.).
tip: Show/hide is great for UI switches where layout stays stable.
If conditionally renders
Section titled “If conditionally renders”Use if when you want the element removed from the DOM when false (often better for performance and for components that should not exist).
important: If removes the element from the DOM when false. Nested bindings and events won’t run because the element isn’t there.
Choosing the right one
Section titled “Choosing the right one”Prefer show/hide for simple visibility, and if for expensive UI (repeaters, complex components, large sections).
Binding text and attributes
Section titled “Binding text and attributes”Connect what users see to your data using bindings (instead of manual string concatenation).
Prefer reactive text binding
Section titled “Prefer reactive text binding”When you bind text content, prefer dmx-text (or the text binding option in Properties) for stable updates and less flicker than raw template text.
Bind attributes/classes/styles visually
Section titled “Bind attributes/classes/styles visually”Use bindings for attributes like src/href/value and conditional classes/styles. This is how Wappler maps to dmx-bind:* without you writing raw attributes.
tip: Use the binding picker to select the right field/formatter for src/href/value/classes — it’s scope-aware and avoids typos.
Use the picker to avoid typos
Section titled “Use the picker to avoid typos”When a field supports bindings, use the picker to browse available components and methods in the current scope.
tip: If a binding looks wrong, re-check what’s selected in App Structure — scope is selection-driven.
Repeating lists (repeaters)
Section titled “Repeating lists (repeaters)”Repeat UI from an array, Data View, Data Store, or API result.
Two repeat styles (what they change)
Section titled “Two repeat styles (what they change)”App Connect supports two repeat patterns. In Wappler you’ll pick the one that matches your desired HTML structure.
Common data sources for repeating
Section titled “Common data sources for repeating”Repeaters can be driven by Arrays, Data Store records, Data View output, or API results. The picker will show you what’s available in scope.
Scope matters inside a repeat
Section titled “Scope matters inside a repeat”Inside a repeat, bindings resolve against the current item. Select a repeated element in App Structure to see the right fields in the picker.
tip: If you can’t see a field, ensure you’re selecting the repeated node (not just the parent wrapper).
Conclusion
Section titled “Conclusion”Next, practice with Data View and events/actions, then learn formatters.
Pick your next tour
Section titled “Pick your next tour”Continue learning App Connect.
Contact create and success handoff
Section titled “Contact create and success handoff”Use the real contact add page to see how App Connect combines lookup data, submission state, and the success handoff into the new contact detail page.
Introduction
Section titled “Introduction”The contact add page is a useful App Connect example because it starts from an empty form but still depends on live data and clear success state. The page loads client choices, submits a new contact through one form, and turns the insert result into a direct handoff to the new detail page.
Page state: lookup data, empty inputs, and submit feedback
Section titled “Page state: lookup data, empty inputs, and submit feedback”The contact add page shows that create forms still need App Connect structure even without an existing record to restore. Client lookup data is loaded first, the form exposes executing and error state, and the insert result becomes the page’s success handoff.
The contact add page starts empty but not unstructured
Section titled “The contact add page starts empty but not unstructured”Start on the real contact add page so the lookup loader, empty form fields, and submission feedback live in one context. The page works because App Connect still owns lookup data and request state even when there is no existing record yet.
The client autocomplete depends on live lookup data
Section titled “The client autocomplete depends on live lookup data”#contact_client binds to sc_clients.data.clients, so the new contact can still be attached to a real client without hard-coded options. The field also accepts query.client_id, which makes preselected client context possible when the page is opened from elsewhere.
The create form exposes request state and insert output
Section titled “The create form exposes request state and insert output”#contact_form posts to /api/contacts/insert, exposes executing and lastError state, and returns insert_contact when the record is created. That output is what lets the page stay declarative about success instead of manually building navigation state.
Success feedback hands off directly to the new detail page
Section titled “Success feedback hands off directly to the new detail page”The success alert links to /contact/ plus contact_form.data.insert_contact.identity, so the create flow ends with a concrete destination. That keeps the user oriented because the new record becomes immediately inspectable instead of disappearing behind a generic success message.
Conclusion
Section titled “Conclusion”The contact create page stays understandable because App Connect makes the create lifecycle explicit. Lookup data arrives before the field needs it, the form exposes request state while saving, and the insert result hands the user straight into the new record.
Contact delete confirmation and return handoff
Section titled “Contact delete confirmation and return handoff”Use the real contact edit page to see how App Connect keeps the destructive delete flow explicit with confirmation, request state, and a return-to-contacts handoff.
Introduction
Section titled “Introduction”The contact edit page does something important with destructive actions: it keeps delete separate from normal editing. App Connect makes the delete path legible by giving it its own form, confirmation moment, request state, and a clear route back to the contacts list after success.
Frontend: the delete path stays explicit
Section titled “Frontend: the delete path stays explicit”The contact edit page keeps the destructive workflow understandable by separating delete from update. That gives the page room to show the warning, request state, and success/error outcome without overloading the normal edit form.
The edit page shows both the normal edit path and the delete path
Section titled “The edit page shows both the normal edit path and the delete path”Start on the real contact edit page so the two forms are visible together. The page makes a clear distinction between updating the current contact and permanently removing it.
The delete action is its own Server Connect form
Section titled “The delete action is its own Server Connect form”#contact_delete has its own action, hidden id input, success state, and error state. That separation matters because destructive work should not disappear inside the richer update form contract.
The submit control makes the destructive moment explicit
Section titled “The submit control makes the destructive moment explicit”The delete button does two practical things before the record disappears: it asks for browser confirmation, and it disables itself while contact_delete.state.executing is true. That gives the user one last check and prevents accidental double submits.
The success state ends with a route back to the contacts list
Section titled “The success state ends with a route back to the contacts list”After a successful delete, the page does not leave the user stranded on a now-invalid record. The success alert exposes a direct return link to /contacts, so the destructive flow ends in a safe list view instead of a broken detail context.
Conclusion
Section titled “Conclusion”The delete flow feels trustworthy because App Connect gives it a separate surface, an explicit confirmation moment, a visible request state, and a clear way back to the contacts list once the record is gone.
Checkbox, autocomplete, and tags on edit forms
Section titled “Checkbox, autocomplete, and tags on edit forms”Use the Demo Projects HQ contact edit page to see how App Connect restores boolean, autocomplete, and tag-style controls before editing starts.
Introduction
Section titled “Introduction”The contact edit page fills a gap that many edit-form examples skip: not every restored control is a plain text box. This page restores a related client in autocomplete, a boolean primary-contact state, and tag-style metadata before the editor makes any changes.
The edit form starts from one contact record and one lookup list
Section titled “The edit form starts from one contact record and one lookup list”sc_contact provides the saved record, and sc_clients supplies the client options that the autocomplete control can resolve against. That pairing is what makes the whole page restorable instead of leaving each control to guess its own state.
Autocomplete must restore a visible relationship, not just an ID
Section titled “Autocomplete must restore a visible relationship, not just an ID”#contact_client shows why relationship fields need more than a hidden value. The stored client_id has to resolve back into a human-readable client option so the editor can confirm the right relationship before making changes.
Boolean state must restore the intended choice, not just a checked box
Section titled “Boolean state must restore the intended choice, not just a checked box”#contact_primary is the clean boolean example. The page keeps both the hidden fallback value and the checkbox, but the visible control still has to reflect the saved is_primary state before the editor decides whether this contact stays primary.
Tag widgets still need the saved record before editing begins
Section titled “Tag widgets still need the saved record before editing begins”#contact_tags is a reminder that widget-style controls are still edit fields. The Tagify input has to start from the saved contact tags so the user is refining the existing metadata instead of rebuilding it from memory.
Conclusion
Section titled “Conclusion”Edit-form restoration is only complete when the less obvious controls are correct too. Autocomplete, checkbox, and tag widgets all need the same reliable source record, or the page quietly stops feeling trustworthy.
Contact list to detail route handoff
Section titled “Contact list to detail route handoff”Use the real contacts and contact detail pages to see how App Connect turns a repeated list, route parameter, and detail loader into one continuous record flow.
Introduction
Section titled “Introduction”The contacts pages are useful App Connect examples because they turn one continuous data flow into two readable pages. A repeated contacts list links to a route-aware detail page, and the detail page resolves that route value into one loaded record without custom glue code.
List page: one dataset feeds the repeated contact rows
Section titled “List page: one dataset feeds the repeated contact rows”The contacts page stays readable because one loader feeds one repeated table. The list does not copy record state around manually; it binds the contacts dataset directly into rows and links.
The contacts page starts from one loaded contacts dataset
Section titled “The contacts page starts from one loaded contacts dataset”Start on the real contacts page so the loader and repeated table stay visible together. The page works because one Server Connect component supplies the contact rows and the UI binds to that shared result instead of duplicating record state.
The repeated rows bind directly to sc_contacts.data.contacts
Section titled “The repeated rows bind directly to sc_contacts.data.contacts”#contacts_list repeats over sc_contacts.data.contacts, which keeps the list declarative. Each visible row is just a bound view of the contacts dataset, not a separate client-side copy to keep in sync.
Each row link passes record identity through the route
Section titled “Each row link passes record identity through the route”The contact name link binds /contact/ + id, so the selected record identity stays explicit in navigation. That route handoff is what lets the next page reconstruct the same record without hidden browser state.
Detail page: route context becomes one loaded record
Section titled “Detail page: route context becomes one loaded record”The detail page takes over once the selected record id is in the URL. Its Server Connect component resolves that route context into one contact object, and the page binds the object into cards, badges, and follow-up links.
The contact detail page is open
Section titled “The contact detail page is open”The real contact detail page is now visible, so the route-aware page and its bindings can be inspected in context. This is the page that receives the selected record identity and turns it back into one loaded contact object.
Design view is active for the contact detail page
Section titled “Design view is active for the contact detail page”Switch to Design view before inspecting the route-aware bindings so the next steps can focus on the live page structure instead of editor setup.
The detail page resolves the route value into one contact record
Section titled “The detail page resolves the route value into one contact record”The detail page uses the /contact/:id route and passes the query id into sc_contact, so one selected record becomes one loaded contact object. That is the App Connect handoff from route context to usable page data.
The page binds one contact object into details, badges, and links
Section titled “The page binds one contact object into details, badges, and links”The detail page stays readable because the cards, badges, and action links all bind back to sc_contact.data.contact. Client name, primary badge, tags, and edit navigation all come from the same loaded record object.
Conclusion
Section titled “Conclusion”The contacts flow stays understandable because the handoff is explicit at every stage. The list repeats one dataset, the row link carries the record id in the route, and the detail page reloads that exact record into one bound object.
Core concepts (expressions + bindings)
Section titled “Core concepts (expressions + bindings)”Understand App Connect’s reactive model, expression rules, scoping, and how to use Wappler’s data/action pickers to build bindings visually.
Core concepts
Section titled “Core concepts”App Connect is declarative and reactive: you declare what the UI should show and when actions should run, and App Connect keeps the page in sync.
Expressions are picker-driven
Section titled “Expressions are picker-driven”In Wappler, most dynamic behavior is configured in Properties using bindings and actions. Use the Data Picker and Expression Builder to select data and functions from a tree, so you can build expressions quickly and safely.
Where you work in Wappler
Section titled “Where you work in Wappler”Most App Connect work happens in two places: App Structure (select components) and Properties (configure bindings and events).
Quick walkthrough (one binding + currency)
Section titled “Quick walkthrough (one binding + currency)”A quick, low-friction example: bind a single value, then format it as currency. This is the “happy path” for most bindings — fast, safe, and picker-driven.
Pick a single value from scope
Section titled “Pick a single value from scope”In Properties, open the picker for a bindable field (for example Text/Value). Select a single value (not an array), like a product price or variable value. The picker inserts a valid expression for you.
tip: If you only need a simple path (like
product.price), picking is faster and avoids typos.
Format it as currency
Section titled “Format it as currency”With the value selected, apply a number formatter like formatCurrency() so the UI shows a readable price (e.g. $1,234.56) without changing the underlying data.
note: For one-off formatting, the picker is enough. Use the Data Formatter popup when you want to build longer formatter chains visually.
When to use the Expression Builder
Section titled “When to use the Expression Builder”Use the Visual Expression Builder for logic and conditions (operators, comparisons, grouped rules). It’s still scope-aware, but it’s built for expressions like filters and if conditions rather than simple data paths.
tip: Rule of thumb: Data Bindings Picker for “pick a value”, Expression Builder for “build logic”.
Bindings (reactive properties)
Section titled “Bindings (reactive properties)”A binding connects a property to data. When the data changes, the property updates automatically.
Use the expression picker
Section titled “Use the expression picker”When a field supports bindings, Wappler offers a picker so you can select data sources and methods instead of typing everything by hand.
tip: If you’re unsure what’s available, use the picker to explore the current data scope.
Dynamic Attributes ( + )
Section titled “Dynamic Attributes ( + )”Not every binding starts as a field. In the Dynamic Attributes section, use the ( + ) button to add new App Connect attributes to the selected element. The list is generated from the component’s HTML rules and filtered by what’s allowed on that element (via each rule’s allowedOn).
tip: If you don’t see a specific attribute, try selecting a different element or inserting the related component first.
Why the ( + ) list changes
Section titled “Why the ( + ) list changes”The Dynamic Attributes menu is context-aware: selecting a different element changes the list because different HTML_RULES match, and allowedOn decides where each rule can be applied (for example, some rules only allow a Google Maps attribute on a dmx-google-maps element).
Understand scope
Section titled “Understand scope”What you can bind to depends on what’s in scope (which components exist on the page and where they are in the structure). In Wappler, this is why selecting the correct node in App Structure matters.
Events (run actions)
Section titled “Events (run actions)”Events are configured in Properties. You enable an event and choose an action to execute.
Actions are visual, not raw code
Section titled “Actions are visual, not raw code”Choose an action from the Actions Picker (for example: set a value, insert/update a record, navigate, reload data), then configure its parameters in Properties.
tip: If you can’t find an action, check the selected component and the event type — available actions are context-aware.
Modifiers change behavior
Section titled “Modifiers change behavior”Modifiers like prevent/stop/once help you control default browser behavior and event propagation without manual code.
Conclusion
Section titled “Conclusion”Next, take a hands-on tour or jump straight to collections and filtering.
Pick your next tour
Section titled “Pick your next tour”Choose a focused tour based on what you want to build.
Counter (reactivity starter)
Section titled “Counter (reactivity starter)”A compact App Connect starter in Wappler: a Variable stores state, a button updates it, and a bound text label reflects the new value immediately.
Counter: reactivity in 60 seconds
Section titled “Counter: reactivity in 60 seconds”You will walk through the smallest App Connect feedback loop in Wappler: select the Variable that holds state, inspect the button action that changes it, and confirm how the bound label redraws instantly.
What you’ll learn
Section titled “What you’ll learn”By the end, you should be able to explain the whole reactive chain in plain language: where the state lives, which event triggers the update, which action changes the value, and why the UI refreshes without manual DOM code.
Where you work
Section titled “Where you work”Keep Page Panels (Structure) and Selection Panels (Properties) visible.
State: a Variable
Section titled “State: a Variable”A Variable stores a value you can bind to and update through actions.
Variable component
Section titled “Variable component”The Variable stores the counter state. We’ll select it to review its properties. This step matters because Variable component is part of the Structure panel, and understanding that context makes the next action easier to repeat in your own project.
Orient yourself in Properties panel
Section titled “Orient yourself in Properties panel”Start with the wider context in the Properties panel so the next control makes sense in the full workflow. In the next step, you will focus on Review the component ID and see how it fits into this area.
Review the component ID
Section titled “Review the component ID”The ID is how you reference the Variable in bindings and actions (for example: counter.value, counter.setValue(…)).
Review the initial value
Section titled “Review the initial value”For Variables, prefer binding the initial value as an expression (dmx-bind:value=“0”) so it’s a real number, not an HTML string. Convert toNumber() mainly when values come from HTML inputs where the user types.
tip: App Connect expressions are declarative. Don’t use JavaScript callbacks/functions inside dmx-* expressions.
Action: increment on click
Section titled “Action: increment on click”Events trigger actions. The action updates state, and bindings react automatically.
Increment button
Section titled “Increment button”This button increments the counter by running the Click action. We’ll select it to inspect the event.
Inspect the Click event
Section titled “Inspect the Click event”The Click event runs an action list. Here it calls counter.setValue(…) to update state, and bindings update the UI automatically.
note: Tip: open the Actions Picker to explore the action list and configure action inputs (instead of hand-typing expressions).
Actions Picker
Section titled “Actions Picker”The Actions Picker icon opens the actions list for the Click event. This step matters because Actions Picker is part of Selection Panels Properties Click, and understanding that context makes the next action easier to repeat in your own project.
tip: Use the Actions Picker to add actions and fill their inputs safely, without hand-typing long expressions.
Actions Picker popup
Section titled “Actions Picker popup”The Actions Picker lets you choose actions (like setValue) and builds the Click event’s action list for you.
Available Actions (left)
Section titled “Available Actions (left)”Browse actions by category and use Search / Expand / Collapse to navigate quickly. This step matters because Available Actions (left) is part of Popup Actionspickup Layout Layout Panel Left, and understanding that context makes the next action easier to repeat in your own project.
Selected Actions (center)
Section titled “Selected Actions (center)”This list is what runs when the Click event fires. Order matters.
Action Properties (right)
Section titled “Action Properties (right)”Select an action in the list to configure its inputs here (for example, the value you pass into setValue(…)). This step matters because Action Properties (right) is part of Popup Actionspickup Layout Layout Panel Preview, and understanding that context makes the next action easier to repeat in your own project.
Close Actions Picker
Section titled “Close Actions Picker”Close the Actions Picker to return to Properties. This step matters because Close Actions Picker is part of Popup Actionspickup Button Cancel, and understanding that context makes the next action easier to repeat in your own project.
Binding: show the value
Section titled “Binding: show the value”Bindings connect UI properties to data. When data changes, the UI updates automatically.
Counter display
Section titled “Counter display”This label is bound to the counter value. We’ll select it to inspect its text binding expression.
Text binding expression
Section titled “Text binding expression”This field contains the expression that fills the text (counter.value). Click the picker icon to inspect it with the Data Picker.
tip: Use the Data Picker to avoid typos and stay within the correct scope.
Data Bindings Picker popup
Section titled “Data Bindings Picker popup”The Data Bindings Picker shows what’s in scope and lets you insert valid expressions into the field.
Data tree (scope browser)
Section titled “Data tree (scope browser)”Expand nodes to browse components and their properties. Selecting an item builds the expression for you.
Expression preview
Section titled “Expression preview”This preview shows the final expression that will be inserted back into the field.
Close Data Picker
Section titled “Close Data Picker”Close the Data Picker to return to Properties. This step matters because Close Data Picker is part of Popup Databindingspickup Button Cancel, and understanding that context makes the next action easier to repeat in your own project.
See it live
Section titled “See it live”Switch to Preview mode and click the button to watch the UI update.
Switch to Preview mode
Section titled “Switch to Preview mode”Preview mode makes the page interactive so you can use it like a user would.
Click Increment
Section titled “Click Increment”Click the Increment button a few times. The Variable updates, and the bound text updates instantly.
Return to Edit mode
Section titled “Return to Edit mode”Switch back to Edit mode to continue learning.
Next steps
Section titled “Next steps”Now that you’ve seen the simplest reactive loop, continue with a slightly richer example or the full App Connect overview.
Pick your next tour
Section titled “Pick your next tour”Continue learning App Connect gradually.
Data Bindings Picker (scope + Design/Code)
Section titled “Data Bindings Picker (scope + Design/Code)”Deep dive into Wappler’s Data Bindings Picker and Visual Expression Builder: scope tree, Design vs Code view editing, preview, and inserting expressions safely.
Introduction
Section titled “Introduction”This tour uses a dedicated App Connect tour page so you can explore bindings and pickers safely. You’ll learn how Wappler builds expressions visually, how scope affects what you can pick, and how Design vs Code view affects how you edit bindings.
What you’ll learn
Section titled “What you’ll learn”Wappler’s binding workflow is picker-driven: select data from a tree and let Wappler generate the correct expression for you.
Bound element (auto-selected)
Section titled “Bound element (auto-selected)”This step auto-selects a repeating element in Design View so the picker has real data in scope.
Orient yourself in Properties panel
Section titled “Orient yourself in Properties panel”Start with the wider context in the Properties panel so the next control makes sense in the full workflow. In the next step, you will focus on Data Bindings Picker and see how it fits into this area.
Data Bindings Picker
Section titled “Data Bindings Picker”The picker icon opens the Data Bindings Picker for the Repeat expression. This step matters because Data Bindings Picker is part of Selection Panels Properties Repeatexpression, and understanding that context makes the next action easier to repeat in your own project.
tip: When in doubt, open the picker: it shows only valid items for the current scope.
Data Bindings Picker (scope browser)
Section titled “Data Bindings Picker (scope browser)”The Data Bindings Picker shows data/components/methods available in the current scope. Selecting an item builds the correct expression and previews what will be inserted back into Properties.
Picker popup
Section titled “Picker popup”This popup is the central workflow for building bindings safely. Use it whenever you see a picker icon next to a bindable field.
Scope tree
Section titled “Scope tree”Expand nodes to browse components and their data. This is your current scope — it changes depending on what’s selected in App Structure.
Toolbar (search + navigation)
Section titled “Toolbar (search + navigation)”Use the toolbar to search and navigate large scopes quickly (expand/collapse, search, etc.).
Preview expression
Section titled “Preview expression”This preview shows the full expression that will be inserted into the originating field when you pick items from the tree.
Preview toolbar (optional)
Section titled “Preview toolbar (optional)”Depending on the picker mode, the preview area can offer helper controls for editing or refining the expression before inserting it.
Design vs Code view (editing mode)
Section titled “Design vs Code view (editing mode)”When a binding supports mixed content, Wappler offers two editing modes. Design view helps you visually build a combined value (text + picked expressions) without worrying about quoting/escaping. Code view shows the raw expression/text, so you can fine-tune it directly when needed. You can switch between them, but it’s usually safest to stay in Design view and let Wappler generate valid syntax.
Close the Data Bindings Picker
Section titled “Close the Data Bindings Picker”Close the picker to return to Properties. This step matters because Close the Data Bindings Picker is part of Popup Databindingspickup Button Cancel, and understanding that context makes the next action easier to repeat in your own project.
Visual Expression Builder (logic + operators)
Section titled “Visual Expression Builder (logic + operators)”Some properties use the Visual Expression Builder. It’s still scope-aware, but focused on building logic (operators, conditions) rather than just picking a data path.
Component with filter (auto-selected)
Section titled “Component with filter (auto-selected)”This step selects a Data View so you can see the Expression Builder flow.
Visual Expression Builder
Section titled “Visual Expression Builder”The Data View Filter picker opens the Visual Expression Builder so you can build conditions visually.
Expression Builder popup
Section titled “Expression Builder popup”This popup helps you build valid expressions with operators and grouped conditions, while staying in the correct scope.
Scope tree
Section titled “Scope tree”Just like the Data Bindings Picker, the Expression Builder exposes scope. Use it to pick data sources and methods while constructing logic.
Preview expression
Section titled “Preview expression”This preview shows the full expression that will be inserted back into the originating field when you apply/close the popup.
Design vs Code view (editing mode)
Section titled “Design vs Code view (editing mode)”If the expression builder shows mixed content, you can switch between Design (visual) and Code (raw) editing. Design view is preferred because Wappler handles quoting/escaping and keeps the expression valid; Code view is there when you need to tweak the raw expression.
Close the Visual Expression Builder
Section titled “Close the Visual Expression Builder”Close the popup to return to Properties. This step matters because Close the Visual Expression Builder is part of Popup Expressionbindingspickup Button Cancel, and understanding that context makes the next action easier to repeat in your own project.
Conclusion
Section titled “Conclusion”You’ve seen how Wappler builds bindings safely with pickers, how scope affects what’s available, and how Design vs Code view lets you choose between visual editing and raw expression editing.
Pick your next tour
Section titled “Pick your next tour”Continue with a deeper formatting tour or review formatters at a high level.
Data components (Variable, Array, Toggle)
Section titled “Data components (Variable, Array, Toggle)”Explore App Connect data components—Variable, Array, and Toggle—and the key Properties you’ll configure for each.
Data components
Section titled “Data components”This tour introduces the small set of App Connect components that create client-side state before the rest of the page consumes it. You will compare Variable, Array, and Toggle as foundational building blocks, then connect each choice to the bindings, actions, and UI patterns it supports best.
Which one should you use?
Section titled “Which one should you use?”This tour helps you choose the right state primitive before you start wiring the page. Instead of memorizing three components separately, you will learn the decision rule for each one, how they appear in Structure, and how their values are typically consumed by bindings and actions.
Where you configure these
Section titled “Where you configure these”Insert the component via App Structure, then configure ID + bindings in Properties.
Variable (dmx-value)
Section titled “Variable (dmx-value)”A Variable stores a single value you can reference in bindings and set via actions.
The ID is how you reference the component in bindings and action pickers. This step matters because ID is part of Selection Panels Properties Theid, and understanding that context makes the next action easier to repeat in your own project.
Value is the initial data stored in the Variable. Use the expression picker to select data and formatters.
Common action: setValue
Section titled “Common action: setValue”Most pages use an event (like click) to run setValue on a Variable. This keeps state changes visual and consistent.
Array (dmx-array)
Section titled “Array (dmx-array)”Array stores a list of items and offers actions to add/remove/update list entries.
Name it for what it holds (for example: products, tags, steps). This step matters because ID is part of Selection Panels Properties Theid, and understanding that context makes the next action easier to repeat in your own project.
Items defines the initial list (binding). In practice, Arrays are often filled/changed by actions.
tip: If you need filtering, sorting, or paging, use a Data View on top of your source data.
Toggle (dmx-toggle)
Section titled “Toggle (dmx-toggle)”Toggle holds a boolean state. It’s ideal for showing/hiding UI or enabling/disabling actions.
Set a clear ID so it’s obvious what the toggle represents (for example: showDetails). This step matters because ID is part of Selection Panels Properties Theid, and understanding that context makes the next action easier to repeat in your own project.
Checked
Section titled “Checked”Checked controls the initial on/off state. You can bind it to other data, or set it through actions.
Conclusion
Section titled “Conclusion”Next, learn collections and traversal: Data Store and Data View.
Pick your next tour
Section titled “Pick your next tour”Choose a focused tour based on what you want to build.
Data View (filter/sort/page)
Section titled “Data View (filter/sort/page)”Use Data View to filter, sort, and paginate any dataset without mutating the original source.
Data View
Section titled “Data View”This tour frames Data View as the layer between raw collections and the version of that data the user actually sees. You will look at how search, sort, and paging reshape a dataset declaratively while leaving the original source untouched for other components or workflows.
Why Data View matters
Section titled “Why Data View matters”It keeps your original collection stable while letting UI controls (search/sort/paging) reshape what’s displayed.
Where you’ll use it
Section titled “Where you’ll use it”You’ll usually combine Data View with UI controls (search input, selects, sort buttons, paging). Those controls update the view, and anything repeating the view updates instantly.
Core Properties
Section titled “Core Properties”These are the properties you’ll configure most often.
Orient yourself in Properties panel
Section titled “Orient yourself in Properties panel”Start with the wider context in the Properties panel so the next control makes sense in the full workflow. In the next step, you will focus on ID and see how it fits into this area.
Name it so it’s obvious what the view represents. This step matters because ID is part of Selection Panels Properties Dataviewid, and understanding that context makes the next action easier to repeat in your own project.
Source
Section titled “Source”The source field controls which dataset the Data View reads (array, Data Store items, API results, etc.).
tip: The Data Bindings Picker only shows items in the current scope, so it’s hard to pick something invalid.
Data Bindings Picker popup
Section titled “Data Bindings Picker popup”The Data Bindings Picker opens as a popup. Use it to browse available data and insert a valid source expression.
Data hierarchy tree
Section titled “Data hierarchy tree”Expand nodes to find the list you want to view. Selecting an item inserts it into the Source field.
Selection preview
Section titled “Selection preview”This preview shows the expression that will be inserted into the Source field.
Close Data Bindings Picker
Section titled “Close Data Bindings Picker”Close the Data Bindings Picker to return to Properties. This step matters because Close Data Bindings Picker is part of Popup Databindingspickup Button Cancel, and understanding that context makes the next action easier to repeat in your own project.
Filter
Section titled “Filter”Define a filter expression for search and user-controlled filtering. Click the picker icon to open the Visual Expression Builder.
Visual Expression Builder popup
Section titled “Visual Expression Builder popup”The Visual Expression Builder opens as a popup. It helps you build valid expressions with operators, functions, and data sources in scope.
Query builder
Section titled “Query builder”This area lets you compose filter logic visually (fields, operators, and values) instead of typing everything manually.
Rule parts (optional)
Section titled “Rule parts (optional)”Each rule is composed of a Field, an Operator, and a Value. Use pickers to bind values from scope instead of typing constants.
AND / OR groups (optional)
Section titled “AND / OR groups (optional)”Use groups to combine multiple rules with AND/OR for more complex filters. This step matters because AND / OR groups (optional) is part of Popup Expressionbindingspickup Query, and understanding that context makes the next action easier to repeat in your own project.
Expression preview
Section titled “Expression preview”This field shows the final expression that will be inserted back into Properties when you apply the popup.
Formatter icon
Section titled “Formatter icon”This icon opens the Data Formatter for advanced formatter chains inside the filter expression. You can explore that popup in the dedicated Data Formatter tour.
Close Visual Expression Builder
Section titled “Close Visual Expression Builder”Close the Visual Expression Builder to return to Properties. This step matters because Close Visual Expression Builder is part of Popup Expressionbindingspickup Button Cancel, and understanding that context makes the next action easier to repeat in your own project.
Configure sort field and direction. This step matters because Sort is part of Selection Panels Properties Dataviewsorton, and understanding that context makes the next action easier to repeat in your own project.
Sort direction
Section titled “Sort direction”The sort direction controls ascending vs descending ordering. This step matters because Sort direction is part of Selection Panels Properties Dataviewsortdir, and understanding that context makes the next action easier to repeat in your own project.
Paging
Section titled “Paging”Use Page and Page Size to paginate displayed results. This step matters because Paging is part of Selection Panels Properties Dataviewpage, and understanding that context makes the next action easier to repeat in your own project.
Page size
Section titled “Page size”How many items to show per page. This step matters because Page size is part of Selection Panels Properties Dataviewpagesize, and understanding that context makes the next action easier to repeat in your own project.
Conclusion
Section titled “Conclusion”Next, connect UI events (click/submit/keyup) to actions.
Pick your next tour
Section titled “Pick your next tour”Continue with events and actions.
Demo walkthrough: Dynamic Real Estate Site
Section titled “Demo walkthrough: Dynamic Real Estate Site”Guided walkthrough of the Demo Dynamic Real Estate Site, focusing on App Connect data loading, filtering, and UI bindings.
Open the demo project
Section titled “Open the demo project”We will open the demo project so you can see how App Connect connects data to the UI without writing code.
Projects Manager opens
Section titled “Projects Manager opens”The Projects Manager is the first piece of context for this walkthrough because it anchors the demo in a real Wappler project. You will open the sample app from the same place users manage other projects, then use that running project to trace how App Connect data sources, filters, and bindings work together on an actual page.
Demo project tile
Section titled “Demo project tile”We’ll open the Demo Dynamic Real Estate Site sample project. It already has data and App Connect components wired, so we can focus on how they work.
Opening the home page
Section titled “Opening the home page”We open index.html in Design View. This page renders the listings and uses App Connect bindings to show data.
Data loading (source → UI)
Section titled “Data loading (source → UI)”Next we find where the data comes from and how App Connect prepares it before anything shows on the page.
JSON data source
Section titled “JSON data source”The JSON data source downloads data.json and exposes it to the page. Think of it as the data loader.
Orient yourself in Properties panel
Section titled “Orient yourself in Properties panel”Start with the wider context in the Properties panel so the next control makes sense in the full workflow. In the next step, you will focus on Data source settings and see how it fits into this area.
Data source settings
Section titled “Data source settings”Properties show the URL and the name of the data collection. Other components read from this.
Data View component
Section titled “Data View component”Data View is a smart list. It takes the raw data and lets you filter, sort, or paginate it.
Data Picker (Data View source)
Section titled “Data Picker (Data View source)”We will use the Data Picker to connect the Data View to the JSON data source.
Data View source field
Section titled “Data View source field”This property tells the Data View which data collection to use. This step matters because Data View source field is part of Selection Panels Properties Dataviewsource, and understanding that context makes the next action easier to repeat in your own project.
Data Picker icon
Section titled “Data Picker icon”The lightning icon opens the Data Picker so you can choose data without typing. This step matters because Data Picker icon is part of Selection Panels Properties Dataviewsource, and understanding that context makes the next action easier to repeat in your own project.
Data Picker opens
Section titled “Data Picker opens”We open the Data Picker to pick the data collection for the Data View. This step matters because Data Picker opens is part of Selection Panels Properties Dataviewsource, and understanding that context makes the next action easier to repeat in your own project.
Data Picker overview
Section titled “Data Picker overview”Choose json-datasource1.data as the source list. This powers the Data View.
Data hierarchy tree
Section titled “Data hierarchy tree”Expand json-datasource1 → data to see available fields you can bind.
Selection preview
Section titled “Selection preview”This preview shows the expression that will be inserted into the property.
Back to Properties
Section titled “Back to Properties”We’ll close the picker and return to the Properties panel. This step matters because Back to Properties is part of Popup Databindingspickup Button Cancel, and understanding that context makes the next action easier to repeat in your own project.
Expression Builder (Data View filter)
Section titled “Expression Builder (Data View filter)”We will build a filter visually so the Data View only shows certain listings.
Filter field
Section titled “Filter field”This property stores the filter expression used by the Data View. This step matters because Filter field is part of Selection Panels Properties Dataviewfilter, and understanding that context makes the next action easier to repeat in your own project.
Expression Builder icon
Section titled “Expression Builder icon”The filter icon opens the Expression Builder. This step matters because Expression Builder icon is part of Selection Panels Properties Dataviewfilter, and understanding that context makes the next action easier to repeat in your own project.
Expression Builder opens
Section titled “Expression Builder opens”We open the Expression Builder to see and edit the filter rules. This step matters because Expression Builder opens is part of Selection Panels Properties Dataviewfilter, and understanding that context makes the next action easier to repeat in your own project.
Expression Builder
Section titled “Expression Builder”The Expression Builder turns filter rules into an App Connect expression.
Query builder
Section titled “Query builder”Each row is Field + Operator + Value. That is how you define a rule.
Rule parts
Section titled “Rule parts”Use the value picker when you want to bind to data instead of typing a fixed value.
AND / OR groups
Section titled “AND / OR groups”Groups let you combine rules with AND/OR for more complex filters. This step matters because AND / OR groups is part of Popup Expressionbindingspickup Query, and understanding that context makes the next action easier to repeat in your own project.
Expression preview
Section titled “Expression preview”This shows the generated expression that goes back into the filter field.
Back to Properties
Section titled “Back to Properties”We’ll close the builder and return to the Properties panel. This step matters because Back to Properties is part of Popup Expressionbindingspickup Button Cancel, and understanding that context makes the next action easier to repeat in your own project.
Filtering and display
Section titled “Filtering and display”Now we see how UI controls update the filter and how the repeater displays the filtered data.
Min Beds filter
Section titled “Min Beds filter”This dropdown chooses the minimum beds value (for example 1, 2, 3+). The selected value feeds the Data View filter.
Explore the Beds properties
Section titled “Explore the Beds properties”Key properties: Options (list of bed counts), Label/Value mapping (what users see vs. what the filter uses), and the binding that connects to the Data View filter.
Max Price filter
Section titled “Max Price filter”This dropdown picks a maximum price range. The chosen value updates the Data View filter.
Explore the Price properties
Section titled “Explore the Price properties”Key properties: Options (price ranges), Label/Value mapping, and the binding that feeds the Data View filter.
Preview the filters in action
Section titled “Preview the filters in action”Switch to Preview mode and try the dropdowns to see the card list update in real time.
Switch to Preview mode
Section titled “Switch to Preview mode”Preview mode makes the page interactive so you can click the controls as a user.
Min Beds dropdown
Section titled “Min Beds dropdown”Try choosing different values to watch the listing cards filter instantly.
Example Min Beds value
Section titled “Example Min Beds value”We set a value so the filter updates immediately.
Max Price dropdown
Section titled “Max Price dropdown”Try choosing a lower range to see fewer cards.
Example Max Price value
Section titled “Example Max Price value”We set a lower price range so you see fewer cards.
See the cards update
Section titled “See the cards update”The listing cards update instantly when the filters change.
Return to Edit mode
Section titled “Return to Edit mode”Switch back to Edit mode so we can keep inspecting components.
Explore the Data Repeater
Section titled “Explore the Data Repeater”Let’s explore how the data is being repeated
Repeating card list
Section titled “Repeating card list”This repeating row renders one card per item in the Data View list.
Explore the repeat properties
Section titled “Explore the repeat properties”Properties show which list is repeated and how each item is referenced. This step matters because Explore the repeat properties is part of the Properties panel, and understanding that context makes the next action easier to repeat in your own project.
Repeat expression field
Section titled “Repeat expression field”This tells the repeater which collection to loop over. This step matters because Repeat expression field is part of Selection Panels Properties Repeatexpression, and understanding that context makes the next action easier to repeat in your own project.
Data Picker icon
Section titled “Data Picker icon”The picker icon opens the Data Picker so you can select the collection. This step matters because Data Picker icon is part of Selection Panels Properties Repeatexpression, and understanding that context makes the next action easier to repeat in your own project.
Data Picker opens
Section titled “Data Picker opens”We open the Data Picker for the repeat expression. This step matters because Data Picker opens is part of Selection Panels Properties Repeatexpression, and understanding that context makes the next action easier to repeat in your own project.
Data Picker (repeat source)
Section titled “Data Picker (repeat source)”Pick data_view1.data so each card represents a Data View item. This step matters because Data Picker (repeat source) is part of Popup Databindingspickup, and understanding that context makes the next action easier to repeat in your own project.
Back to Properties
Section titled “Back to Properties”We’ll close the picker and return to the Properties panel. This step matters because Back to Properties is part of Popup Databindingspickup Button Cancel, and understanding that context makes the next action easier to repeat in your own project.
Text binding element
Section titled “Text binding element”This text element displays data from each item (like Title or Beds).
Explore the text binding properties
Section titled “Explore the text binding properties”Properties show the text binding expression. This step matters because Explore the text binding properties is part of the Properties panel, and understanding that context makes the next action easier to repeat in your own project.
Text binding field
Section titled “Text binding field”This field contains the expression that fills the text. This step matters because Text binding field is part of Selection Panels Properties Innertextvalue, and understanding that context makes the next action easier to repeat in your own project.
Data Picker icon
Section titled “Data Picker icon”The picker icon opens the Data Picker so you can choose a field without typing. This step matters because Data Picker icon is part of Selection Panels Properties Innertextvalue, and understanding that context makes the next action easier to repeat in your own project.
Data Picker opens
Section titled “Data Picker opens”We open the Data Picker for the text binding. This step matters because Data Picker opens is part of Selection Panels Properties Innertextvalue, and understanding that context makes the next action easier to repeat in your own project.
Data Picker (text binding)
Section titled “Data Picker (text binding)”Choose a field like Title, or format a value (for example, Price.formatCurrency). This step matters because Data Picker (text binding) is part of Popup Databindingspickup, and understanding that context makes the next action easier to repeat in your own project.
Back to Properties
Section titled “Back to Properties”We’ll close the picker and return to the Properties panel. This step matters because Back to Properties is part of Popup Databindingspickup Button Cancel, and understanding that context makes the next action easier to repeat in your own project.
Wrap-up
Section titled “Wrap-up”You saw how App Connect loads data, filters it with a Data View, and binds it to UI elements — all without writing code.
Continue learning
Section titled “Continue learning”Pick a focused App Connect tour to go deeper.
Dynamic Events
Section titled “Dynamic Events”Dynamic Events overview: preview the ( + ) menu, open the Actions Picker for an existing event, and understand common modifiers.
Introduction
Section titled “Introduction”Dynamic Events connect user interactions (click, submit, keyup, …) to actions. You configure them visually in Properties.
What you’ll learn
Section titled “What you’ll learn”You’ll preview the ( + ) menu (categories → submenus), then inspect an existing Click event and open its Actions Picker.
Open the tour page
Section titled “Open the tour page”This tour opens a small counter page so you can inspect an event/action flow.
Add a Dynamic Event
Section titled “Add a Dynamic Event”Dynamic Events are added from Properties via ( + ). Available events depend on the selected element.
Selected element
Section titled “Selected element”A real element with no existing Dynamic Events is auto-selected so you can see the full ( + ) menu.
Orient yourself in Properties panel
Section titled “Orient yourself in Properties panel”Start with the wider context in the Properties panel so the next control makes sense in the full workflow. In the next step, you will focus on Dynamic Events menu and see how it fits into this area.
Dynamic Events menu
Section titled “Dynamic Events menu”This ( + ) menu lists the available event handlers for the selected element, grouped into categories and, in some cases, submenus.
Inspect an existing Click event
Section titled “Inspect an existing Click event”Now the tour selects a button that already has a dmx-on:click event, so you can inspect its Actions Picker without adding anything new.
Actions Picker
Section titled “Actions Picker”Events run an ordered list of actions. The Actions Picker builds and edits that list.
Actions Picker (Click)
Section titled “Actions Picker (Click)”The Actions Picker shows what runs on Click so you can inspect and edit the action list. This step matters because Actions Picker (Click) is part of Selection Panels Properties Click, and understanding that context makes the next action easier to repeat in your own project.
Actions Picker popup
Section titled “Actions Picker popup”Pick actions from the left tree, then configure action inputs on the right.
Selected actions (order matters)
Section titled “Selected actions (order matters)”This list is what runs when the event fires. Reorder actions to change behavior.
Close Actions Picker
Section titled “Close Actions Picker”Close the Actions Picker to return to Properties. This step matters because Close Actions Picker is part of Popup Actionspickup Button Cancel, and understanding that context makes the next action easier to repeat in your own project.
Modifiers (optional)
Section titled “Modifiers (optional)”Modifiers let you control default behavior and propagation without writing manual code.
Review modifiers
Section titled “Review modifiers”Modifiers change behavior (prevent default, stop propagation, capture, once) and can add key/button conditions. The tour opens a dropdown so the options are visible while explaining.
note: Modifiers are a quick way to express common patterns (prevent default, run once, only on Enter, etc.).
Common modifier patterns
Section titled “Common modifier patterns”Examples: use prevent + stop for links/buttons, once for one-time actions, and key modifiers to run only on Enter (for key events).
Conclusion
Section titled “Conclusion”Next: learn how events and dynamic attributes work together.
Pick your next tour
Section titled “Pick your next tour”Continue with related tours.
Edit form state restoration
Section titled “Edit form state restoration”Use the Demo Projects HQ task edit form to see how existing record data restores text, select, date, and tag fields before the user starts editing.
Edit forms must restore state before the user edits
Section titled “Edit forms must restore state before the user edits”The task edit page shows the real difference between create and edit forms. On an edit page, controls should already reflect the stored record so the user is correcting or extending data, not rebuilding it from memory. App Connect bindings make that restoration explicit.
The edit page starts from one loaded record
Section titled “The edit page starts from one loaded record”The task edit form works because sc_task loads the current record first, then the rest of the form binds against that source. Without a stable record source, the edit page would have no reliable state to restore.
Text fields restore the saved record directly
Section titled “Text fields restore the saved record directly”#task_title is the simplest restoration example. The field does not ask the editor to remember the old value or reload it manually. App Connect binds the stored title straight back into the control before editing begins.
Current choices are restored in select controls
Section titled “Current choices are restored in select controls”#task_assignee, #task_status, and #task_priority are edit-state proof that restoration is not just for text boxes. The visible control has to reflect the saved relationship or status before the user changes it, or the edit form stops being trustworthy.
Dates and tags need restoration just as much
Section titled “Dates and tags need restoration just as much”#task_start, #task_due, and #task_tags show the more advanced side of restoration. Complex controls still need a current value before the editor interacts with them, otherwise the page silently turns an edit workflow back into a create-from-scratch workflow.
Conclusion
Section titled “Conclusion”An edit form is trustworthy only when the visible controls already match the saved record. Once that restoration pattern is clear, field editing, validation, and submit logic all become easier to reason about.
Events & actions
Section titled “Events & actions”Learn how App Connect turns user interactions into declarative behavior: choose an event, attach one or more actions, apply modifiers, and let bindings react to the updated state.
Events & actions
Section titled “Events & actions”This tour builds the event-to-action mental model that underpins most App Connect interactions. You will trace how a user event is configured in Properties, how Wappler stores the action list behind that event, and how the rest of the page reacts when the action runs.
Event → action
Section titled “Event → action”The goal is to read an event configuration like a simple sentence: when this happens, run these actions, then let bindings and components respond. Once that clicks, click, submit, and keyup handlers all follow the same pattern.
Where you configure it
Section titled “Where you configure it”Events, actions, and modifiers are configured in the Properties panel for the selected component.
Working with the Click event and modifiers
Section titled “Working with the Click event and modifiers”The Click event is the most common event. Modifiers control default behavior and add conditions.
Actions Picker (Click)
Section titled “Actions Picker (Click)”The Actions Picker defines what runs when the button is clicked. This step matters because Actions Picker (Click) is part of Selection Panels Properties Click, and understanding that context makes the next action easier to repeat in your own project.
Use modifiers
Section titled “Use modifiers”Use prevent/stop/once/capture and key/button modifiers to control behavior without manual code. This step matters because Use modifiers is part of Selection Panels Properties Clickmods, and understanding that context makes the next action easier to repeat in your own project.
Conclusion
Section titled “Conclusion”Next, go deeper into collections and traversal.
Pick your next tour
Section titled “Pick your next tour”Continue learning App Connect.
Files library stats, links, and navigation
Section titled “Files library stats, links, and navigation”Use the real files page to see how App Connect turns loaded file rows into summary cards, outbound file links, and project-navigation links.
Introduction
Section titled “Introduction”The files page is a good App Connect example because it does more than repeat rows. It turns one loaded files dataset plus one summary dataset into dashboard cards, outbound file links, and internal project navigation that stay readable after every upload.
Frontend: loaded file data becomes a usable library surface
Section titled “Frontend: loaded file data becomes a usable library surface”App Connect makes the files page practical because one dataset can feed several UI layers at once. The same loaded file rows support the stats cards, the repeated table, direct file links, and project-navigation links without duplicating fetch logic.
The files page combines upload, summary, and library views
Section titled “The files page combines upload, summary, and library views”Start on the real files page so the whole surface is visible before narrowing into the cards and table. This page is where recent uploads become a usable library instead of disappearing into backend-only state.
Summary cards reuse loaded file data instead of fetching a separate dashboard just for display
Section titled “Summary cards reuse loaded file data instead of fetching a separate dashboard just for display”The quick stats cards mix sc_files and sc_summary to give the page an immediate read on document types and total volume. That keeps the page informative before the user scans the row-level library below.
The repeated table turns each file record into one readable library row
Section titled “The repeated table turns each file record into one readable library row”#files_list repeats the loaded sc_files rows directly, so every record keeps its filename, project, client, size, and uploaded timestamp together. That is the App Connect handoff from loaded data to a browseable library view.
The file link hands control out to the stored file URL
Section titled “The file link hands control out to the stored file URL”Inside each repeated row, the filename link binds directly to url and opens in a new tab. That keeps the library practical because a stored file becomes immediately inspectable or downloadable without extra controller logic on the page.
The project link keeps the file row connected to its business context
Section titled “The project link keeps the file row connected to its business context”The project cell binds an internal route to /project/ plus project_id, so the same row can move the user from a file artifact back into the project that owns it. That is a second handoff path coming from the same loaded record.
Conclusion
Section titled “Conclusion”The files page works as a usable library because App Connect keeps the loaded data reusable. The page can summarize the dataset, repeat it into readable rows, and hand the user either out to the file itself or into the related project without asking for another mental model.
Files upload state and refresh
Section titled “Files upload state and refresh”Use the Demo Projects HQ files page to see how App Connect form state, live data reloads, and repeated file listings stay in sync during uploads.
Introduction
Section titled “Introduction”The Demo Projects HQ files page is a practical App Connect upload example because the page does not stop at submitting a form. It tracks request state, shows success feedback, reloads live datasets, and immediately reflects the uploaded files in repeated UI.
Page state: loaders, form state, and visible results
Section titled “Page state: loaders, form state, and visible results”The files page keeps App Connect responsibilities explicit. Server Connect components load the existing files and project choices, the upload form exposes request state, and the page binds those outputs back into alerts, buttons, and repeated data.
The files page combines loaders and upload UI in one place
Section titled “The files page combines loaders and upload UI in one place”Start on the real files page so the loader components, upload form, and repeated file list stay visible in one context. This page is useful because upload state and visible results live together instead of being split across separate screens.
The upload form exposes request state and success output
Section titled “The upload form exposes request state and success output”#file_upload_form is more than a submit surface. It posts to /api/files/upload, exposes executing and lastError state, and returns save_uploads output that the page can use for success feedback without custom response parsing.
Project selection and Dropzone stay part of the same form contract
Section titled “Project selection and Dropzone stay part of the same form contract”#upload_project_id and #files_dropzone belong to the same App Connect form state. The selected project travels with the uploaded files, so the page can treat one submission as both file transfer and project-specific context.
Success actions reload the datasets the page depends on
Section titled “Success actions reload the datasets the page depends on”The form success hook resets the Dropzone and calls sc_files.load() plus sc_summary.load(). That refresh loop is what makes the UI feel immediate: the page asks the same loaders for fresh data instead of guessing what changed.
The table repeats the refreshed files dataset
Section titled “The table repeats the refreshed files dataset”#files_list repeats over sc_files.data.files, so new rows appear when the loader refreshes after a successful upload. That keeps the visible library tied to one authoritative dataset rather than to ad hoc DOM updates.
Conclusion
Section titled “Conclusion”The files upload page works well because App Connect keeps each phase visible. The form exposes request state, the success handler refreshes the dependent datasets, and the page simply rebinds to the refreshed outputs.
Flows (multi-step client workflows)
Section titled “Flows (multi-step client workflows)”Learn when App Connect flows are worth introducing, how they differ from a single event → action handler, and how to think about multi-step client workflows before building them.
Introduction
Section titled “Introduction”This introduction sets the decision rule for flows before you start building one. You will compare a simple event handler with a staged workflow, identify the kinds of UI tasks that benefit from multiple ordered steps, and see how flows keep that logic readable as it grows.
Tour goals
Section titled “Tour goals”By the end of this tour, you should be able to decide whether a feature needs a flow at all, describe the sequence of steps the flow must coordinate, and recognize the parts of the Wappler UI where you inspect and maintain that workflow.
When to use flows
Section titled “When to use flows”Flows are useful for multi-step UI workflows where you want a clear sequence; simple interactions can stay as a single event → action.
Wrap-up
Section titled “Wrap-up”Review what you did and choose a next tour.
Next steps
Section titled “Next steps”Pick a related tour to continue.
Form data sources on the task form
Section titled “Form data sources on the task form”Use the Demo Projects HQ task form to see how App Connect and Server Connect data sources feed projects, contacts, and tag choices into real form controls.
Real form controls depend on live data sources
Section titled “Real form controls depend on live data sources”The new-task page is not driven by static markup alone. Projects, contacts, and tag suggestions all arrive through data components first, then feed the controls users actually interact with. This tour stays on that page so the data-to-field relationship stays concrete.
The task form pulls several datasets into one page
Section titled “The task form pulls several datasets into one page”The task form is useful because it depends on multiple upstream datasets at once. Projects, contacts, and tag suggestions are all loaded before their controls can behave properly, so the page becomes a good map of data-source responsibilities.
Projects feed the project picker
Section titled “Projects feed the project picker”#task_project depends on the projects dataset, not on hard-coded option rows. That is what lets the same field stay useful as projects change over time without rewriting the control itself.
Contacts feed the assignee field
Section titled “Contacts feed the assignee field”#task_assignee is a separate control, but the same principle applies: the form stays flexible because the contact options come from data that already belongs to the page, not from a duplicated static list inside the markup.
Tag suggestions feed the richer tag field
Section titled “Tag suggestions feed the richer tag field”#task_tags shows that richer widgets still follow the same source-data rule. Tagify only feels guided because the suggestions are loaded first and then mapped into the control, rather than being invented at interaction time.
Conclusion
Section titled “Conclusion”The task form becomes much easier to reason about when you separate where option data comes from from how the control presents it. That is the bridge from ordinary form markup into practical App Connect form work.
Form inputs & bindings
Section titled “Form inputs & bindings”Use common form controls as live App Connect data sources in Wappler, and learn how bindings, events, and type conversion interact while users type, select, and toggle values.
Form inputs & bindings
Section titled “Form inputs & bindings”This tour uses real form controls to explain how App Connect reads and reacts to user input. You will inspect where values come from, how bindings expose those values in Wappler, and where event timing or string conversion changes the result you see.
What you’ll learn
Section titled “What you’ll learn”This tour explains how real form controls behave once App Connect is involved: where their values come from, when those values are strings, how grouped inputs expose a shared result, and which bindings you reach for in day-to-day form work.
Where you configure it
Section titled “Where you configure it”This tour selects a real form field and then highlights its binding and event controls in Properties (so you know exactly where to configure it).
Bind an input to a Variable
Section titled “Bind an input to a Variable”A common pattern: store form state in a Variable, then bind an input to it.
Variable (state source)
Section titled “Variable (state source)”This Variable holds the value used by the input binding.
Input (value source)
Section titled “Input (value source)”Inputs expose their current value as inputId.value, and can also be bound to App Connect state.
Orient yourself in Properties panel
Section titled “Orient yourself in Properties panel”Start with the wider context in the Properties panel so the next control makes sense in the full workflow. In the next step, you will focus on Value binding (dmx-bind:value) and see how it fits into this area.
Value binding (dmx-bind:value)
Section titled “Value binding (dmx-bind:value)”This field’s value binding is configured visually in Properties. Use the picker to insert a valid expression.
Changed event action
Section titled “Changed event action”This event is where you attach actions that should run after the value updates. This step matters because Changed event action is part of Selection Panels Properties Changedvalue, and understanding that context makes the next action easier to repeat in your own project.
Types: inputs are strings
Section titled “Types: inputs are strings”Form inputs are strings by default. Convert to numbers explicitly when doing math or comparisons.
Age input
Section titled “Age input”This number input is still a string value in expressions until you convert it.
Use toNumber() when needed
Section titled “Use toNumber() when needed”Convert strings to numbers to avoid surprising results (like ‘2’ + 1 → ‘21’).
important: When you read a value from an input or from Query Manager, treat it as a string unless you convert it.
Checkboxes: checked vs value
Section titled “Checkboxes: checked vs value”Checkbox inputs expose a boolean checked state. Bind to checked when you want true/false.
Switch checkbox
Section titled “Switch checkbox”This switch uses dmx-bind:checked to sync with App Connect state.
Checked binding (dmx-bind:checked)
Section titled “Checked binding (dmx-bind:checked)”This binding controls the checkbox checked state using an expression (true/false). This step matters because Checked binding (dmx-bind:checked) is part of Selection Panels Properties Checkedvalue, and understanding that context makes the next action easier to repeat in your own project.
Checked event action
Section titled “Checked event action”Use the Checked event to run actions when the user toggles the checkbox. This step matters because Checked event action is part of Selection Panels Properties Checked, and understanding that context makes the next action easier to repeat in your own project.
Checkbox Group (multiple selection)
Section titled “Checkbox Group (multiple selection)”Use a Checkbox Group wrapper to treat a set of checkboxes as one value source.
tip: In Wappler, use the Checkbox Group component so you can bind to one group value and keep the structure clean.
Selects and radio groups
Section titled “Selects and radio groups”Select and Radio Group controls are common for single-choice input.
Country select (value)
Section titled “Country select (value)”A select control exposes the currently selected value as selectId.value.
Selected value binding (dmx-bind:value)
Section titled “Selected value binding (dmx-bind:value)”This binding controls the select’s selected value using an expression. This step matters because Selected value binding (dmx-bind:value) is part of Selection Panels Properties Selectvalue, and understanding that context makes the next action easier to repeat in your own project.
Changed event action (select)
Section titled “Changed event action (select)”Attach actions here when you need to react to the newly selected value. This step matters because Changed event action (select) is part of Selection Panels Properties Changedvalue, and understanding that context makes the next action easier to repeat in your own project.
Radio Group (single selection)
Section titled “Radio Group (single selection)”Use a Radio Group wrapper for a set of radios so you can read one group value.
Preview mode: see values update
Section titled “Preview mode: see values update”Switch to Preview mode and change a few controls. The Live preview card updates immediately via bindings.
Preview mode
Section titled “Preview mode”Switch the page to Preview mode so you can interact with it like a real app.
Wait for Preview mode
Section titled “Wait for Preview mode”Wait for the page to finish switching modes.
Checkbox interaction
Section titled “Checkbox interaction”We’ll toggle the Agree switch. Notice how demoForm.agreeSwitch.checked updates in the Live preview.
Country select value
Section titled “Country select value”The tour selects another Country value so you can see demoForm.countrySelect.value update in the Live preview.
Checkbox group value
Section titled “Checkbox group value”The checkbox group aggregates checked items into one array value (demoForm.interestsGroup.value).
Another checkbox selection
Section titled “Another checkbox selection”Selecting another interest appends another value to the group array.
Radio interaction
Section titled “Radio interaction”We’ll pick a plan option. demoForm.planGroup.value reflects the selected radio.
Try typing in the name field
Section titled “Try typing in the name field”Edit the Full name field and watch both fullName.value and demoForm.nameInput.value change in the preview panels.
Return to Edit mode
Section titled “Return to Edit mode”Switch back to Edit mode to continue inspecting components.
Event timing (change vs changed)
Section titled “Event timing (change vs changed)”When you run actions based on input changes, prefer App Connect’s changed/updated events when you need the updated value.
Prefer changed/updated for “latest” values
Section titled “Prefer changed/updated for “latest” values”If you attach actions to input events, ensure you’re using the event that runs after the new value is in state.
tip: Common workflow: dmx-on:changed → set value / run validations / trigger data reload.
Where to attach actions
Section titled “Where to attach actions”Attach actions on the selected field (or on the form) in Properties. This step highlights the changed event (dmx-on:changed) as a common choice for “latest value” workflows.
Wrap-up
Section titled “Wrap-up”Next, validate inputs and submit them to the server.
Next steps
Section titled “Next steps”Pick a related tour to continue.
Form Repeat
Section titled “Form Repeat”Learn how Form Repeat structures nested form rows in Wappler so users can add, remove, reorder, and submit repeated data as one coherent request.
Form Repeat
Section titled “Form Repeat”This tour explains both the UI problem and the data model behind Form Repeat. You will look at how repeated rows are defined, which controls manage those rows, and how Wappler turns the repeated inputs into structured data the server can process.
What it solves
Section titled “What it solves”By the end, you should recognize when Form Repeat is the right tool: whenever users need to manage a variable number of related entries in one form and you want Wappler to keep the repeated fields, controls, and submitted payload aligned.
Where you configure it
Section titled “Where you configure it”This tour selects the Form Repeat component in App Structure and then inspects its Items/min/max/sortable properties in Properties.
Core properties
Section titled “Core properties”Configure what repeats and how it behaves.
Form Repeat component
Section titled “Form Repeat component”This component repeats a block of form fields for each item. This step matters because Form Repeat component is part of the Structure panel, and understanding that context makes the next action easier to repeat in your own project.
Orient yourself in Properties panel
Section titled “Orient yourself in Properties panel”Start with the wider context in the Properties panel so the next control makes sense in the full workflow. In the next step, you will focus on Items (what repeats) and see how it fits into this area.
Items (what repeats)
Section titled “Items (what repeats)”Items is bound to an array source. Each row gets its own scope (name/qty in this example). This step matters because Items (what repeats) is part of Selection Panels Properties Formrepeatitems, and understanding that context makes the next action easier to repeat in your own project.
Min items
Section titled “Min items”Min prevents removing rows below a required count. Use canAdd/canRemove to keep buttons in sync.
tip: Bind disabled to lineItems.canAdd / lineItems.canRemove so controls stay in sync with min/max.
Max items
Section titled “Max items”Max prevents adding too many rows. Pair it with canAdd so the Add button disables at the limit.
Sortable + handle
Section titled “Sortable + handle”Enable sortable for drag reordering, and set a handle selector so only a handle can drag.
important: Use a handle (like .handle) so inputs remain easy to edit without accidental drags.
Handle selector
Section titled “Handle selector”Handle is the CSS selector that defines the drag grip (so editing inputs doesn’t start dragging).
tip: In this page, the drag button uses the class .handle, so Handle is set to .handle.
Animation (ms)
Section titled “Animation (ms)”Animation controls how long the drag reorder animation runs (in milliseconds).
Actions and events
Section titled “Actions and events”Form Repeat includes actions for adding, removing, moving, duplicating, and resetting rows.
Common actions
Section titled “Common actions”Attach these actions to button click events via the Actions Picker.
Common events
Section titled “Common events”Listen to lifecycle events like added/removed/moved when you need to trigger follow-up logic.
Preview mode: try the repeat controls
Section titled “Preview mode: try the repeat controls”Switch to Preview mode and use the controls to add/duplicate/remove rows. This shows how repeat actions drive the UI.
Preview mode
Section titled “Preview mode”Switch the page to Preview mode so you can interact with it like a real app.
Wait for Preview mode
Section titled “Wait for Preview mode”Wait for the page to finish switching modes.
Add item button
Section titled “Add item button”We’ll click Add item to append a new row (until max).
Duplicate a row
Section titled “Duplicate a row”Duplicate copies the row values into a new item.
Remove a row
Section titled “Remove a row”Remove deletes a row. When you hit min, the button disables via lineItems.canRemove.
Try editing row fields
Section titled “Try editing row fields”Edit the Name/Qty inputs, then duplicate a row to see the values carry over.
Reset back to initial items
Section titled “Reset back to initial items”Reset restores the original array so you can try again.
Return to Edit mode
Section titled “Return to Edit mode”Switch back to Edit mode to continue inspecting components.
Wrap-up
Section titled “Wrap-up”Next, connect the repeated fields to a Server Connect form for nested inserts/updates.
Next steps
Section titled “Next steps”Pick a related tour to continue.
Form validation (Validator)
Section titled “Form validation (Validator)”Client-side form validation: configure App Connect Validator and integrate with Bootstrap validation feedback and classes.
Introduction
Section titled “Introduction”Demo Projects HQ already uses App Connect Validator on real forms, so there is no need to explain validation from an isolated sample. The new-task form combines required text fields, number rules, select validation, and Server Connect feedback in one page. This tour stays on that concrete form so you can see how validation rules, messages, and request-state feedback cooperate in an actual workflow.
Task title is a real validated text field
Section titled “Task title is a real validated text field”This title field is a concrete validation example from Demo Projects HQ. It is required, it enforces a minimum length, and it keeps its guidance close to the field instead of hiding the rule somewhere else in the page.
Properties panel is where the validation contract becomes readable
Section titled “Properties panel is where the validation contract becomes readable”With the title field selected, the Properties panel exposes the validation contract in one place: required state, value limits, and the messages that explain failures back to the user. That is the pattern to preserve as your forms grow.
Required and minlength work together on the title field
Section titled “Required and minlength work together on the title field”The task form does not stop at a bare required flag. Demo Projects HQ also adds a minimum length and a matching message, which means the field can tell the editor both that a title is missing and that a one-character placeholder is not enough. That combination makes validation feel intentional instead of punitive.
Number fields show how Validator scales beyond text inputs
Section titled “Number fields show how Validator scales beyond text inputs”Estimated hours uses numeric validation and a minimum boundary, with messages that explain both invalid numbers and values below zero. This is the same validator workflow, just applied to a different input type. The important point is that the field still declares its rules locally instead of depending on custom click handlers.
Validation matters on data-bound selectors too
Section titled “Validation matters on data-bound selectors too”Project is not a freeform text box, but it still needs validation. Demo Projects HQ marks the project picker as required and supplies a clear message so the user understands why the task cannot be saved until a project relationship exists. That is a good reminder that Validator belongs on the whole form, not just on simple text fields.
Validation and Server Connect feedback belong to one workflow
Section titled “Validation and Server Connect feedback belong to one workflow”The task form also shows success, request-state, and server-error feedback through task_form.data, task_form.state, and task_form.lastError. Client-side validation should stop obviously bad submissions early, but the complete user experience still includes request progress and server responses after the form is allowed to submit.
important: Do not treat Validator as a replacement for server-side checks. In Demo Projects HQ it works alongside the real submit action and its response state.
Next steps
Section titled “Next steps”The Demo Projects HQ task form shows the validator pattern clearly: keep each field’s rules close to the field, pair them with plain-language messages, and let the form’s real submit state complete the feedback loop. That gives you a reusable baseline for every other App Connect form in the project.
Formatters (transform data for display)
Section titled “Formatters (transform data for display)”Use App Connect formatters to transform values (date, currency, text, collections) using Wappler’s expression picker.
Formatters
Section titled “Formatters”Formatters transform values for display and simple data manipulation, without changing the source data — applied visually via the expression picker.
What a formatter is
Section titled “What a formatter is”A formatter is a method-like helper you chain in an App Connect expression (for example: text case, date formatting, currency). In Wappler you typically pick them from the expression picker.
Component folder requirement
Section titled “Component folder requirement”Using formatters requires the formatter extension/component folder to be present (dmxFormatter). If you don’t see formatters in the picker, check your installed frameworks/extensions.
tip: In practice, Wappler project templates typically include the needed App Connect packages. Missing formatters often means a missing/disabled extension.
Using the picker
Section titled “Using the picker”In Wappler, formatters are easiest to apply via the expression picker in any bindable field.
Any bindable field can use formatters
Section titled “Any bindable field can use formatters”Look for fields with an expression/binding picker (Value fields, text bindings, filters, class bindings, etc.). That’s where you can apply formatters.
Common formatter categories
Section titled “Common formatter categories”Use formatters to transform strings, numbers, dates, and collections right where you display them.
Best practices
Section titled “Best practices”Avoid common mistakes and keep expressions readable.
Use the App Connect formatter names
Section titled “Use the App Connect formatter names”Use the formatter names shown in the picker (lowercase/uppercase/titlecase, etc.) so you get valid results at runtime.
important: If something doesn’t appear in the picker, it’s usually not a valid formatter for that value. Prefer picking over typing.
Convert types before formatting
Section titled “Convert types before formatting”If a value is a string but you need numeric/date formatting, convert first (toNumber/toDate), then format.
Use filtering where it fits
Section titled “Use filtering where it fits”Formatters are great for display and small transforms, but avoid using collection filtering formatters as a replacement for real filtering and paging on large datasets.
warning: If you notice slow UI updates, move filtering out of the browser and into Server Connect or Data View.
Conclusion
Section titled “Conclusion”Formatters help you keep data clean and UI readable — applied right where you display values.
Pick your next tour
Section titled “Pick your next tour”Continue with validations or filtering.
Local Manager (persistent settings)
Section titled “Local Manager (persistent settings)”Learn when Local Manager is the right persistence layer for Wappler UI state, and how to store settings that should survive reloads without going to the server.
Local Manager
Section titled “Local Manager”This tour positions Local Manager as client-side persistence for everyday UX settings. You will look at what kinds of data belong here, how Wappler reads and writes those values in bindings and actions, and where the limits and security boundaries are.
When local storage is the right choice
Section titled “When local storage is the right choice”You are not just learning that local storage persists data. You are learning the decision rule: use it for convenience settings and cached UI preferences that should remain on the same browser, but never for secrets or security-sensitive state.
Objects are supported
Section titled “Objects are supported”Local Manager can store complex objects; they’re serialized/deserialized automatically.
important: Local storage is readable by client-side code. Don’t store secrets or tokens here.
Core workflow
Section titled “Core workflow”Bind UI to local values, and update them on events.
Write local state
Section titled “Write local state”Use local.set(key, value) to persist a setting, and local.remove/removeAll to reset.
Read local state in bindings
Section titled “Read local state in bindings”Use local.key in expressions to set classes, default values, and visibility.
Pattern: app settings form
Section titled “Pattern: app settings form”Bind form controls to local values and save changes with a single submit action.
Wrap-up
Section titled “Wrap-up”Next, decide whether your state belongs in local/session/cookie or in the URL.
Next steps
Section titled “Next steps”Pick a related tour to continue.
Organization best practices (data-first)
Section titled “Organization best practices (data-first)”Keep App Connect pages readable and fast: organize non-visual data components (Variables, Data Stores, Server Connect) at the top, named and grouped before UI usage.
Introduction
Section titled “Introduction”This tour uses a deliberately structured page to show why App Connect projects stay easier to maintain when data comes first. You will compare the visual layout with the non-visual components that feed it, then use that example to build a stronger mental model for grouping, naming, and placing state and data sources in Structure.
Overview
Section titled “Overview”Make complex pages easier to read and faster to reason about by organizing non-visual data components (state, collections, API) at the top — before any UI uses them.
What you’ll see on the page
Section titled “What you’ll see on the page”This example page is intentionally organized with non-visual components first, then UI sections below that only consume those data sources.
Data-first structure
Section titled “Data-first structure”Non-visual data components (state, collections, API) belong at the top of the page so everything below can reference them clearly.
Data section
Section titled “Data section”This top section contains the page’s non-visual data components (state, collections, API). We’ll select it so you can see how it’s organized.
Why keep data at the top
Section titled “Why keep data at the top”Keeping non-visual components at the top makes pages easier to read: you can scan state, collections, and API endpoints before looking at UI bindings.
Performance: when to localize data
Section titled “Performance: when to localize data”Keeping data components at the top is a great default — but if a dataset is used only inside a view that is loaded conditionally, declare that data inside the conditional region so it isn’t always processed.
The same idea applies to repeaters: pick the repeater style that avoids extra wrappers, and only set the key field when you truly need it (animations / stable DOM row identity), because it slows down the repeater.
Important exception: inside Repeaters and Data Detail areas, prefer dmx-show/dmx-hide for empty/selected UI so the DOM stays stable (and inputs don’t reset).
important: Best performance: isolate optional/heavy sections with a Conditional Region (dmx-if) so their child components don’t render until the condition is met. Exception: inside Repeaters and Data Detail, prefer dmx-show/dmx-hide to keep the DOM stable.
Performance: filter where it belongs
Section titled “Performance: filter where it belongs”When a page grows, performance problems often come from loading or processing too much data on the client. Keep UI expressions light, and push heavy filtering/paging to the right layer.
important: Treat client-side filtering formatters as a convenience, not a replacement for Data View or Server Connect filtering on large datasets.
Naming convention
Section titled “Naming convention”Use IDs that read like purpose: what it stores/loads (usersStore, usersView, apiUsers) rather than generic names (store1, data_view1).
tip: Good IDs become self-documenting in expressions: usersStore.items, usersView.data, apiUsers.data, currentUserName.value.
Walkthrough: state → collections → API
Section titled “Walkthrough: state → collections → API”Select a few data components and see how their IDs are used by bindings below.
State Variable
Section titled “State Variable”This Variable holds a piece of state used in bindings (for example: currentUserName.value). We’ll select it to review its ID and value.
Orient yourself in Properties panel
Section titled “Orient yourself in Properties panel”Start with the wider context in the Properties panel so the next control makes sense in the full workflow. In the next step, you will focus on ID drives expressions and see how it fits into this area.
ID drives expressions
Section titled “ID drives expressions”When IDs are clear, bindings read like plain English. This is why naming + organization matter.
Data Store
Section titled “Data Store”A Data Store holds a collection of records. We’ll select it and keep related Data Views nearby so it’s always clear where UI lists come from.
tip: Put collections on top (Data Store, Query, API results) and keep UI repeats/tables below them.
Data View
Section titled “Data View”A Data View is a read-only lens over a collection (filters, sorting, paging). We’ll select it to see how it stays close to its data source.
Server Connect component
Section titled “Server Connect component”This Server Connect component loads data from the server. We’ll select it so it’s easy to find, review, and avoid duplicating API calls in UI sections.
important: Best practice: don’t place Server Connect components inside repeats/cards. Keep them centralized and bind UI to their results.
Use data in the UI
Section titled “Use data in the UI”With data components declared first, UI bindings stay simple and easy to understand.
Bound UI element
Section titled “Bound UI element”This badge’s text comes from a binding (for example: currentUserName.value). We’ll select it and then inspect the binding in Properties.
Inspect the binding in Properties
Section titled “Inspect the binding in Properties”This is where you see (and edit) the expression used for the selected element’s text. This step matters because Inspect the binding in Properties is part of Selection Panels Properties Innertextvalue, and understanding that context makes the next action easier to repeat in your own project.
tip: When data components are clearly named, bindings stay short and readable.
Wrap-up
Section titled “Wrap-up”Review what you did and choose a next tour.
Next steps
Section titled “Next steps”Pick a related tour to continue.
Performance: conditional rendering (dmx-if)
Section titled “Performance: conditional rendering (dmx-if)”Improve App Connect performance by using conditional regions (dmx-if) and placing conditional-only data/components inside them so they don’t render or process until needed.
Introduction
Section titled “Introduction”This tour uses a focused example page to explain a practical App Connect performance decision: when to avoid rendering work entirely instead of merely hiding UI. You will compare conditional regions with show/hide behavior, then connect that choice to component scope, repeated DOM cost, and page readability.
Performance: render only when needed
Section titled “Performance: render only when needed”Improve performance by rendering less: use conditional regions (dmx-if) for UI that depends on a condition, and place conditional-only data/components inside that region so they don’t exist until the condition becomes true.
Repeaters: performance tips
Section titled “Repeaters: performance tips”Repeaters can generate a lot of DOM. Prefer the simplest repeater that matches your layout, and only set Unique Key when you truly need it (it slows down the repeater).
Conditional rendering vs show/hide
Section titled “Conditional rendering vs show/hide”Understand why dmx-if is recommended for performance and how it changes what gets rendered.
Conditional Region vs Show/Hide
Section titled “Conditional Region vs Show/Hide”Use a Conditional Region (dmx-if) when a part of the page depends on a condition or isn’t needed right away.
important: Best performance: use Conditional Region (dmx-if) for conditional UI, not Show/Hide dynamic attributes.
Conditional Region (dmx-if)
Section titled “Conditional Region (dmx-if)”This section uses a Conditional Region (dmx-if), so it only exists when the condition is true.
Place conditional-only data inside
Section titled “Place conditional-only data inside”If a Data View, Data Store, or Server Connect component is used only inside a section that’s shown conditionally, declare it inside that Conditional Region (dmx-if) so it isn’t processed until needed.
tip: When the condition is false, the Conditional Region and its child components don’t exist at all.
Show dynamic attribute (dmx-show)
Section titled “Show dynamic attribute (dmx-show)”This section uses the Show dynamic attribute (dmx-show), so it stays in the page structure and its child components exist even when hidden.
warning: Show/Hide dynamic attributes are visibility toggles (CSS). They do not prevent rendering/processing of the region’s components.
Local data inside Conditional Region
Section titled “Local data inside Conditional Region”This data component lives inside the Conditional Region. Keeping conditional-only data/components inside a Conditional Region (dmx-if) avoids always-on work.
tip: Rule of thumb: global for shared page-wide state; local for conditional-only sections.
Shared global data
Section titled “Shared global data”Shared state and data that multiple regions use can stay at the top for readability and reuse.
Repeaters: performance and key field
Section titled “Repeaters: performance and key field”Repeaters can generate lots of DOM. Learn when to use each repeater style, and when to avoid the key field for better performance.
Repeaters: Repeat vs Repeat Children
Section titled “Repeaters: Repeat vs Repeat Children”Repeaters can create many DOM nodes. Choose the simplest repeater that matches your layout needs.
Repeat (dynamic attribute)
Section titled “Repeat (dynamic attribute)”This example uses Repeat (dynamic attribute). It repeats the element itself. Great for simple repeated elements, but can lead to extra wrapper DOM if you repeat large containers. (dmx-repeat:*)
Repeat Children (component)
Section titled “Repeat Children (component)”This example uses Repeat Children (component). It repeats only the children, so your layout container stays single and clean when building grids/cards. (is=“dmx-repeat”)
Unique Key: only when needed
Section titled “Unique Key: only when needed”This Repeat Children repeater sets a Unique Key. Only do this when you need stable row identity (animations, or DOM identification).
warning: Choose the unique key field to identify the repeater’s record. Only needed when you want to use animations or need to identify repeater’s rows in DOM. Do not use if not needed as it will slow down the repeater.
Wrap-up
Section titled “Wrap-up”Review what you did and choose a next tour.
Next steps
Section titled “Next steps”Pick a related tour to continue.
App Connect Quick Overview
Section titled “App Connect Quick Overview”A hands-on intro to App Connect in Wappler: review key components, configure Properties, and attach an event action.
Getting oriented
Section titled “Getting oriented”App Connect makes pages reactive by connecting UI to data and events. You build it visually with components + Properties.
How App Connect works (in Wappler)
Section titled “How App Connect works (in Wappler)”App Connect is a reactive layer: components hold data, UI reads that data, and events trigger actions that update data. When data changes, the UI updates automatically.
important: Use Wappler’s Data Bindings Picker and Actions Picker to select data and actions from a tree. This keeps your bindings consistent with what’s in scope.
Prerequisites
Section titled “Prerequisites”This tour opens a sample App Connect page in Design View. Keep Page Panels (Structure) and Selection Panels (Properties) visible.
Bindings → formatter → repeater → filter expressions → show/hide
Section titled “Bindings → formatter → repeater → filter expressions → show/hide”Start with a simple text binding and see how currency formatting works. Next, inspect the repeater’s repeat expression, then open the Visual Expression Builder used by the Data View filter. Finally, review a Show/Hide binding.
Simple binding with formatting (auto-selected)
Section titled “Simple binding with formatting (auto-selected)”This value uses a binding expression that formats as currency: minPrice.value.formatCurrency('$').
Orient yourself in Properties panel
Section titled “Orient yourself in Properties panel”Start with the wider context in the Properties panel so the next control makes sense in the full workflow. In the next step, you will focus on Text binding expression and see how it fits into this area.
Text binding expression
Section titled “Text binding expression”This field contains the expression for the selected element. This step matters because Text binding expression is part of Selection Panels Properties Innertextvalue, and understanding that context makes the next action easier to repeat in your own project.
Opening Data Bindings Picker
Section titled “Opening Data Bindings Picker”We’ll open the Data Bindings Picker so you can browse what’s in scope and insert valid expressions without typing everything.
Data Bindings Picker popup
Section titled “Data Bindings Picker popup”Browse what’s in scope for this field. Since the current expression uses minPrice.value, you should see minPrice (Variable) and its value here.
Find minPrice.value (and data in scope)
Section titled “Find minPrice.value (and data in scope)”In the tree, expand minPrice and select its value. That’s the value being formatted as currency in the field.
note: Scope matters: the picker only shows data that’s valid for the current selection.
Active expression tag
Section titled “Active expression tag”The formatter button applies to the active tag. We’ll focus the expression tag so formatting targets the right expression.
Opening the Data Formatter (currency)
Section titled “Opening the Data Formatter (currency)”We’ll open the Data Formatter so you can inspect or adjust the currency formatting chain.
Data Formatter popup
Section titled “Data Formatter popup”The Data Formatter lets you build a formatter chain (pipeline) visually and insert it back into the field.
Formatter chain tree
Section titled “Formatter chain tree”This tree represents your formatter chain. Select a formatter to edit its settings in Properties.
Formatter settings (Properties)
Section titled “Formatter settings (Properties)”Configure currency symbol, locale, precision, etc. depending on the formatter.
Close Data Formatter
Section titled “Close Data Formatter”Press Next to close the Data Formatter (Cancel) and return to the Data Bindings Picker.
Close Data Bindings Picker
Section titled “Close Data Bindings Picker”Close the Data Bindings Picker to return to Properties. This step matters because Close Data Bindings Picker is part of Popup Databindingspickup Button Cancel, and understanding that context makes the next action easier to repeat in your own project.
Now select the repeater (auto-selected)
Section titled “Now select the repeater (auto-selected)”The repeater displays the Data View results as cards.
Repeat expression
Section titled “Repeat expression”This property points to the collection being repeated (Data View results). This step matters because Repeat expression is part of Selection Panels Properties Control Repeatexpression, and understanding that context makes the next action easier to repeat in your own project.
tip: Use the Data Bindings Picker here to explore the full path (for example:
data_view1.data).
Opening Data Bindings Picker (repeat)
Section titled “Opening Data Bindings Picker (repeat)”We’ll open the Data Bindings Picker so you can inspect the repeat expression in context. This step matters because Opening Data Bindings Picker (repeat) is part of Selection Panels Properties Control Repeatexpression, and understanding that context makes the next action easier to repeat in your own project.
Repeat expression in the picker
Section titled “Repeat expression in the picker”This picker is scoped to the repeater. You’ll see item-level fields like title, beds, and price here too.
Close Data Bindings Picker
Section titled “Close Data Bindings Picker”Close the Data Bindings Picker to continue. This step matters because Close Data Bindings Picker is part of Popup Databindingspickup Button Cancel, and understanding that context makes the next action easier to repeat in your own project.
Data View (Structure)
Section titled “Data View (Structure)”The Data View defines which records appear. We’ll select data_view1 so you can inspect its filter expression.
Opening filter in Expression Builder
Section titled “Opening filter in Expression Builder”The filter is a rule-based expression. We’ll open it in the Visual Expression Builder so you can inspect the logic.
tip: Use the Visual Expression Builder for logical expressions (filter rules, AND/OR groups). Use the Data Formatter for formatting pipelines.
Visual Expression Builder popup
Section titled “Visual Expression Builder popup”The Visual Expression Builder helps you build valid expressions with operators, functions, and data sources in scope.
Query builder
Section titled “Query builder”Each row is Field + Operator + Value. This is how you define filter rules without typing the full expression.
AND / OR groups
Section titled “AND / OR groups”Groups let you combine multiple rules with AND/OR for more advanced filtering.
Expression preview
Section titled “Expression preview”This shows the final expression that goes back into the filter field when you apply/close the popup.
Close Visual Expression Builder
Section titled “Close Visual Expression Builder”Close the Visual Expression Builder to return to the Data View properties. This step matters because Close Visual Expression Builder is part of Popup Expressionbindingspickup Button Cancel, and understanding that context makes the next action easier to repeat in your own project.
Simple binding: Show (auto-selected)
Section titled “Simple binding: Show (auto-selected)”This panel uses a simple binding to show/hide itself: dmx-show="showDetails.checked".
Show binding (When)
Section titled “Show binding (When)”This is the expression behind dmx-show (Show → When). It uses the same Data Bindings Picker and scope rules as your other bindings.
tip: For complex conditions, open the picker and build the expression visually.
Preview the filters in action
Section titled “Preview the filters in action”Switch to Preview mode and interact with the controls to see bindings update instantly.
Switch to Preview mode
Section titled “Switch to Preview mode”Preview mode makes the page interactive so you can use the controls as a user would.
Wait for Preview mode
Section titled “Wait for Preview mode”Wait for the page to finish switching modes.
Beds filter
Section titled “Beds filter”We’ll open the Beds dropdown so you can change the minimum beds filter.
Minimum beds value
Section titled “Minimum beds value”This dropdown value updates the filter. We’ll pick a higher minimum beds value to narrow the list.
Action button
Section titled “Action button”This button runs an action that updates greeting state. We’ll click it to demonstrate state-driven UI updates.
See the results update
Section titled “See the results update”The listing cards and summary badges update immediately when state changes.
Return to Edit mode
Section titled “Return to Edit mode”Switch back to Edit mode to continue inspecting components.
Wire an event → action
Section titled “Wire an event → action”Events are where interactivity starts. You pick an event (click/submit/keyup/…) and assign an action.
Action button
Section titled “Action button”This button is where we’ll attach a Click event. We’ll select actionButton so you can inspect its event and action settings.
Add a Click event
Section titled “Add a Click event”In Properties → Events, enable Click and choose an action. Actions are picked visually (you don’t type raw code for common tasks).
tip: Look for an Action picker (it will help you choose a component action like “Set Value”, “Insert Record”, etc.).
Use event modifiers
Section titled “Use event modifiers”Modifiers change behavior (prevent default, stop propagation, capture, once) and can add key/button conditions.
Conclusion
Section titled “Conclusion”You’ve seen the core workflow: inspect components, configure Properties, and wire an event to an action.
Pick your next tour
Section titled “Pick your next tour”Continue with deeper tours on expressions, collections, and filtering.
Reactive basics (data → UI)
Section titled “Reactive basics (data → UI)”A beginner-friendly mental model for App Connect: how data, bindings, events, actions, and Dynamic Attributes combine into reactive UI updates.
Reactive basics
Section titled “Reactive basics”Build an accurate mental model for App Connect: data drives UI, and events run actions that update data. Wappler’s pickers help you wire this visually.
The reactive loop (mental model)
Section titled “The reactive loop (mental model)”Think of App Connect reactivity like a constellation:
Your job is to connect UI properties to data. When data changes, the connected parts update automatically — no manual UI refresh steps.
tip: If the UI looks wrong, check the selected component (scope) and the binding expression.
Where data can come from (DB / JSON / API)
Section titled “Where data can come from (DB / JSON / API)”App Connect doesn’t care where the data came from — once it’s in state, bindings can use it.
The usual Wappler workflow is: Server Connect action loads/writes the database, then bindings display the result.
Hierarchy + loading (visual model)
Section titled “Hierarchy + loading (visual model)”This view avoids “expression syntax” and focuses on the visual principles:
Selection defines scope → loading fills data → bindings keep UI + state in sync.
Same idea, classic view
Section titled “Same idea, classic view”If you prefer a “loop” mental model, this is the same concept in a simpler sketch:
The key takeaway stays the same: change data → App Connect re-evaluates bindings → the UI stays in sync.
App Structure sets the scope
Section titled “App Structure sets the scope”Use App Structure to select what you’re working on. The selection determines what data and actions are “in scope” for pickers.
Properties is where you wire reactivity
Section titled “Properties is where you wire reactivity”Most reactive setup happens in Properties: bindings, expressions, events, and actions. Look for picker buttons to select data and actions visually.
Data → UI (reactive bindings)
Section titled “Data → UI (reactive bindings)”Bindings connect UI properties to data. When the data changes, App Connect re-evaluates expressions and updates the UI.
Bindings are “live” connections
Section titled “Bindings are “live” connections”A binding connects a property to an expression (often a data value). When any input changes, App Connect re-evaluates and updates the UI automatically.
note: You usually don’t need “refresh UI” actions. Updating data is enough.
Use the Data Picker to build expressions
Section titled “Use the Data Picker to build expressions”When a field supports bindings, click its picker button and choose data from the tree. This keeps you in the correct scope and avoids typos.
tip: If you can’t find a value in the picker, change your selection in App Structure first (scope).
Scope changes what you can pick
Section titled “Scope changes what you can pick”The Data Picker is context-aware. Selecting a different component or changing where you are in the hierarchy changes which data and methods are available.
Events → actions → data
Section titled “Events → actions → data”User interactions trigger event handlers. Those handlers run actions that update your state (variables/stores) and refresh the UI.
From event to UI update
Section titled “From event to UI update”Interactive pages follow a simple loop:
Most of the time, your job is just: wire the event and pick the action. The UI updates when the data changes.
Common: form → action → database
Section titled “Common: form → action → database”This is the most common production pattern in Wappler apps:
The form doesn’t talk to the database directly — it calls a Server Connect action, which validates input and writes/reads the database.
Events belong to components
Section titled “Events belong to components”Events are attached to the selected component (button, form, input, etc.). Select the element first, then configure its events in Properties.
Actions Picker and action inputs
Section titled “Actions Picker and action inputs”The Actions Picker lets you choose what should happen (setValue, toggle, load, insert, update…) and then wire its inputs from the Data Picker.
tip: A good workflow: pick an action first, then wire its inputs from the Data Picker.
Dynamic Attributes ( + )
Section titled “Dynamic Attributes ( + )”Some reactive behavior is added as attributes and events via the ( + ) button, not as a pre-defined property field.
Add Dynamic Attributes with ( + )
Section titled “Add Dynamic Attributes with ( + )”Some bindings are added as attributes (like show/hide, class, repeat, on click, …). In the Dynamic Attributes section, use the ( + ) button to add them to the selected element.
tip: If you don’t see the Dynamic Attributes section, try selecting a different element (or insert a component that supports those attributes).
Two ways to add reactivity
Section titled “Two ways to add reactivity”Why the ( + ) list changes
Section titled “Why the ( + ) list changes”The Dynamic Attributes list is context-aware: it changes based on the selected element and the installed component rules. If you don’t see an attribute, try selecting a different element or inserting the related component first.
Conclusion
Section titled “Conclusion”Recap the mental model and pick a next tour.
What to remember
Section titled “What to remember”If you keep this loop in mind, App Connect becomes predictable and easy to debug.
Next steps
Section titled “Next steps”Choose a focused tour to practice the loop (data → UI) and the pickers.
Routing (views, routes, internal links)
Section titled “Routing (views, routes, internal links)”Understand Wappler’s modern hybrid routing: routes, layouts, content pages, and route-aware links.
Modern Wappler routing uses routes, layouts, and content pages
Section titled “Modern Wappler routing uses routes, layouts, and content pages”Use this bridge to understand where App Connect fits into modern Wappler routing. The recommended workflow is not inline dmx-route components. Instead, Routing Manager stores the generated route definitions, Pages Manager shows the routed layout and content files, and the layout renders the selected content page through dmx-view as partial content.
App Connect still matters in this flow, but in a different role: it powers the interactive page once the route has already selected the correct layout and content page. Internal links and route-aware components should align with the generated route map rather than reintroducing deprecated inline routing patterns.
Start with the real Routing Manager map
Section titled “Start with the real Routing Manager map”Start with the live Routing Manager map in Demo Projects HQ. This is the source of truth for route-aware App Connect work, because links and routed content should follow the real generated route tree instead of reviving old inline dmx-route patterns.
Pages Manager overview
Section titled “Pages Manager overview”Keep the full Pages Manager surface in view before focusing on a specific node. This is the second half of the routing picture: the generated route map points to real layout and content files that live here.
Pages Manager shows the routed files
Section titled “Pages Manager shows the routed files”After the route map is clear, switch to the real Pages Manager structure. In Demo Projects HQ, that is where the actual layout and content files behind those routes become visible and selectable.
Server Connect components (data + forms)
Section titled “Server Connect components (data + forms)”Load data and submit forms via Server Connect components, using built-in state (executing/lastError/data).
Introduction
Section titled “Introduction”This tour introduces the App Connect components that talk to your server actions. You will see how Wappler models requests, responses, execution state, and errors in the page, and how those component outputs become the inputs for bindings, loading indicators, and follow-up actions.
Tour goals
Section titled “Tour goals”By the end, you should understand the whole client-to-server loop in Wappler: which component sends the request, where request state is exposed during execution, how returned data becomes available to the page, and where error handling fits into the same declarative workflow.
Where you configure it
Section titled “Where you configure it”Use App Structure to select your API Form / API Action components and Properties to bind inputs, outputs, and actions.
Wrap-up
Section titled “Wrap-up”Review what you did and choose a next tour.
Next steps
Section titled “Next steps”Pick a related tour to continue.
Session Manager (per-tab state)
Section titled “Session Manager (per-tab state)”Store temporary workflow state for the current tab using Session Manager; cleared when the tab closes.
Session Manager
Section titled “Session Manager”Session Manager stores per-tab state for the lifetime of the tab/session. It’s great for wizards and temporary workflow data.
When session storage is the right choice
Section titled “When session storage is the right choice”This tour teaches the decision rule for session storage, not just the API. Use it when workflow state should survive refreshes in the current tab but disappear when that tab’s session ends, which makes it a strong fit for wizards, short-lived progress, and temporary UI context that should not bleed into other tabs.
Objects are supported
Section titled “Objects are supported”Session Manager can store complex objects; they are serialized/deserialized automatically.
tip: Even with objects, keep stored values small and focused.
Core workflow
Section titled “Core workflow”Bind UI to session values, and update them on events.
Write session state
Section titled “Write session state”Use session.set(key, value) in submit/click handlers to store the user’s progress or inputs.
Read session state in bindings
Section titled “Read session state in bindings”Use session.key in expressions to prefill fields, show status text, or conditionally render UI.
Pattern: multi-step form
Section titled “Pattern: multi-step form”Store each step’s data in session storage so refreshes don’t lose progress. Clear on final submit.
Wrap-up
Section titled “Wrap-up”Next, pick the right persistence level for your app.
Next steps
Section titled “Next steps”Pick a related tour to continue.
State management (Query/Cookie/Session/Local)
Section titled “State management (Query/Cookie/Session/Local)”A practical guide to App Connect storage strategy in Wappler, comparing URL state, cookies, session storage, and local storage through real UI scenarios.
State management in App Connect
Section titled “State management in App Connect”This tour gives you a practical storage decision framework instead of four disconnected components. You will compare URL-based state with browser storage options, understand what each one is best at, and connect that choice back to the App Connect actions you actually configure in Wappler.
What you’ll learn
Section titled “What you’ll learn”Instead of memorizing four components separately, you will learn the decision logic behind them: which storage belongs to shareable links, which one survives restarts, which one stays tab-scoped, and how each option feeds bindings and actions on the page.
Where you’ll work in Wappler
Section titled “Where you’ll work in Wappler”These components are configured like any other App Connect component: select in App Structure, set properties, then call actions from events.
Pick the right storage
Section titled “Pick the right storage”Use this mental model to avoid accidental UX bugs (state that resets when it shouldn’t, or sticks when it shouldn’t).
URL state: Query Manager
Section titled “URL state: Query Manager”Best when state should be shareable and bookmarkable (filters/search/sort/page/selection).
Persistent state: Cookie Manager
Section titled “Persistent state: Cookie Manager”Best for lightweight preferences and consent flags that should persist across sessions.
Temporary state: Session Manager
Section titled “Temporary state: Session Manager”Best for per-tab workflows (wizards, temporary drafts) that should survive refresh but clear when the tab closes.
Persistent settings: Local Manager
Section titled “Persistent settings: Local Manager”Best for non-sensitive settings that should “stick” without cookie overhead.
Wrap-up
Section titled “Wrap-up”Now pick a deep dive for the storage type you need.
Next steps
Section titled “Next steps”Choose a focused tour to continue.
App Connect
Section titled “App Connect”Your guided index of App Connect tours: reactive model, data components, bindings, events/actions, and common workflows — explained visually in Wappler’s panels and pickers.
App Connect
Section titled “App Connect”Choose an App Connect tour to start. These tours focus on the visual workflow in Wappler: inserting components, configuring Properties, and wiring events (no manual markup required for most tasks).
Bind form inputs, configure validation, and build repeatable sections using concrete Demo Projects HQ pages where possible.
Choose a Forms tour to start. The strongest examples here now use real Demo Projects HQ pages, especially the task add/edit forms, so you can see bindings and validation where an actual project already depends on them.
Core components
Section titled “Core components”Data-oriented building blocks: data components and common data sources.
Core components
Section titled “Core components”Choose a Core components tour to start. These tours cover App Connect’s foundational data pieces—Variables/Arrays/Toggles, and common sources like Data Stores and derived datasets.
Data bindings & formatting
Section titled “Data bindings & formatting”Expressions, bindings, pickers, and formatter chains for display-ready values.
Data bindings & formatting
Section titled “Data bindings & formatting”Choose a Data bindings & formatting tour to start. These tours walk through building safe expressions with pickers, binding them to UI, and chaining formatters for display.
Interaction
Section titled “Interaction”Wire events to actions, and work with Dynamic Events/Attributes.
Interaction
Section titled “Interaction”Choose an Interaction tour to start. These tours focus on wiring events to actions and using Dynamic Events/Attributes to keep behavior declarative.