Canvas Overview
The UnifyApps page builder is divided into four distinct areas that work together to let you compose, configure, and test your application pages. Understanding what each area does — and how they interact — is the foundation for building pages efficiently.
| Area | Location | Purpose |
| Top bar | Fixed across the top | App-level controls: navigation, publishing, preview, device/variant switching, collaboration |
| Left icon rail | Narrow column on the left | Tool launcher — click an icon to open the corresponding panel (Design, Hierarchy, Data, etc.) |
| Central canvas | Large dotted editing surface | Visual WYSIWYG editor where you drop, move, and arrange components |
| Right properties panel | Right-hand column | Context-sensitive settings for the selected component's content, appearance, and behavior |
Tip: Panel toggle shortcuts
Press [ to toggle the left panel open or closed. Press ] to toggle the right properties panel. These keyboard shortcuts let you reclaim canvas space when you need a wider view of your layout.
Top Bar Controls
The dark top bar spans the full width of the builder and contains all app-level controls. From left to right:
Left side of the top bar
Back button — Returns you to the app list or previous screen. If you have unsaved changes, the builder shows a warning: "It looks like you have unsaved changes on this page. Your changes will be lost if you leave this page without saving." Confirm or cancel before leaving.
App name & publish status — Displays the current application name alongside its publish status indicator (draft, published, etc.).
App variant switcher — Switch between different variants of the same app (for example, different branded versions or feature-flag variants).
Device switcher — Toggle between Desktop, Tablet, and Mobile views directly from the top bar. See Responsive Design for the full device list.
Page switcher — Jump to a different page within the same application without leaving the builder.
Right side of the top bar
Interactive Canvas toggle — Switches the canvas between "edit mode" (where clicks select components) and "interactive mode" (where the canvas behaves like the live app, allowing you to test interactions). Shortcut:
Cmd/Ctrl + Shift + E.Collaborator avatars — Shows the profile pictures of other team members currently viewing or editing this page. Hover an avatar to see the person's name.
Page Score — Opens a quality score summary for the current page based on accessibility, performance hints, and best-practice checks.
Preview — Opens a full-page preview of the app as the current logged-in user would see it. Useful for testing permissions and live data without publishing.
Save — Saves all pending changes to the current page. The button is disabled (grayed out) when there is nothing new to save. If real-time collaboration is enabled for the app, Save is replaced by auto-save and the Save button disappears entirely.
Publish — Opens the publish dialog where you can choose your publish target, add release notes, and deploy the app.
Right panel toggle — Icon button to collapse or expand the right properties panel (same as pressing
]).
Note: Undo and Redo
Use Cmd/Ctrl + Z to undo your last action and Cmd/Ctrl + Shift + Z (or Ctrl + Y on Windows) to redo it. Both are available at any time in the builder without needing to click into a specific panel.
Left Icon Rail
The left rail is a narrow column of icon buttons. Each icon opens a full-height panel that slides in over (or next to) the canvas. Only one panel can be open at a time — opening a new panel closes the previous one automatically.
| Tool | Description | Shortcut |
| AI Assistant | Opens the AI-powered assistant for generating or modifying components, writing expressions, and answering how-to questions in context. | — |
| Design | The component picker. Browse and search all available components — Built-in, Template, and Custom — then drag them onto the canvas. | — |
| Navigator | A flat list of all pages in the app for quick navigation without leaving the builder. | — |
| Data | Lists all available data sources, variables, and state accessible in expressions. Use it to browse what can be bound to component properties. | — |
| Hierarchy | The layers tree. Shows every component on the page in its nested structure. Rename, hide, reorder, and search components from here. | — |
| Finder | A cross-page search tool. Searches across visibility conditions, event payloads, custom CSS, HTML attributes, and page-level configuration. | — |
| Analytics | Opens per-page analytics and usage insights directly in the builder context. | — |
| Saved Versions | Browse and restore previous saved versions of the page. Useful for rolling back accidental changes. | — |
| Settings | Page-level settings including the page name, URL slug, permissions, and other metadata. | — |
| Dev Tools | Opens the floating debugger window with event stream, console, network, and state tabs. Builder-only — never visible in the published app. | Alt + Shift + D |
Adding Components
There are three ways to add a component to a page:
From the Design panel: Open the Design panel from the left rail. Browse or search for the component you want. You can filter the list by category: All, Built-in, Template, or Custom. Drag the component thumbnail from the panel onto the canvas, or click it to add it to the currently selected container.
From an empty container placeholder: When a container component (like a Section or Flex Box) is empty, it shows a "+" placeholder in the center. Click the placeholder to open a component picker specific to that container's slot.
From the Hierarchy panel: In the Hierarchy (layers) panel, hover over any component to reveal an add button ("+") next to its name. Clicking this button lets you add a child component inside that component's slot.
Note: Theme-controlled visibility Your app's active theme can hide or rename components in the Design panel. If a component you expect to see is missing, check whether the theme has marked it as hidden or has given it a different display name.
Selecting and Moving Components
Interacting with components on the canvas follows a consistent selection and drag model.
Selecting a component
Click any component on the canvas to select it. When selected, the component displays:
A label pill at the top of the component showing its type and name.
A dark drag handle on the pill — this is the control you grab to move the component.
A blue selection outline around the component boundary.
The right properties panel updates immediately to show the selected component's settings.
Moving and reparenting
To move a component to a new position or container, grab its dark pill handle and drag it. As you drag, valid drop targets highlight to show where the component can be placed. Release over a target to drop and reparent the component. Dropping a component into a different container automatically makes it a child of that container.
Warning: Reparenting and expressions When you move a component into a different container, any relative data references (such as expressions that reference a parent container's data) may need to be updated. Check any expression bindings on the moved component after reparenting.
Hierarchy Panel (Layers Tree)
The Hierarchy panel gives you a structural view of every component on the page, nested to reflect the actual component tree. It is especially useful for selecting components that are visually hidden, deeply nested, or obscured by other components on the canvas.
Key features
Expand/collapse — Click the arrow next to any component to expand or collapse its children.
Rename inline — Double-click a component's name in the Hierarchy to rename it directly without opening the properties panel.
Search — Press
Cmd/Ctrl + Fwhile the Hierarchy panel is open to search for a component by name. The tree filters to match results and highlights them.Hidden component indicator — Components that have a visibility condition set to "Hidden" (or an expression that evaluates to hidden at design time) show an eye-off icon next to their name in the Hierarchy.
Drag reorder — Drag component rows within the Hierarchy to reorder or reparent them, just like dragging on the canvas.
Copy, Cut, and Paste
Standard clipboard operations work on selected components:
| Action | Shortcut (Mac) | Shortcut (Windows) |
| Copy component | Cmd + C | Ctrl + C |
| Cut component | Cmd + X | Ctrl + X |
| Paste component | Cmd + V | Ctrl + V |
| Copy styles only | Shift + Cmd + C | Shift + Ctrl + C |
| Paste styles only | Shift + Cmd + V | Shift + Ctrl + V |
| Undo | Cmd + Z | Ctrl + Z |
| Redo | Cmd + Shift + Z | Ctrl + Y |
Tip: Copy & paste styles across components
Use Copy Styles (Shift + Cmd/Ctrl + C) on one component, then select a different component and use Paste Styles (Shift + Cmd/Ctrl + V) to apply the exact same appearance settings — spacing, colors, typography, effects — without touching the content or behavior.
Component Context Menu
Right-clicking a component on the canvas (or using the kebab menu in the Hierarchy) reveals the component context menu with the following options:
| Option | Description |
| Rename | Opens an inline rename field for the component name. The name appears in the Hierarchy, in expressions referencing the component, and in the properties panel header. |
| HTML Attributes | Opens a dialog to add arbitrary HTML attributes to the component's root DOM element. Useful for accessibility (e.g., aria-label, data-testid) and integration hooks. |
| Custom CSS | Opens a CSS editor scoped to this component. Styles written here apply only to this specific component instance and override theme-level styles. |
| Mark as overridable | Marks this component's properties as overridable at a template or parent level. Available for components inside template definitions. |
| Unmark as overridable | Removes the overridable marking, locking this component's properties to their template-defined values. |
| Delete | Permanently removes the component and all its children from the page. This action is undoable with Cmd/Ctrl + Z. |
Keyboard Shortcuts Summary
⚓ All Builder Keyboard Shortcuts
| Shortcut | Action |
[ | Toggle left panel open/closed |
] | Toggle right properties panel open/closed |
Cmd/Ctrl + Shift + E | Toggle Interactive Canvas mode |
Cmd/Ctrl + Z | Undo last action |
Cmd/Ctrl + Shift + Z / Ctrl + Y | Redo |
Cmd/Ctrl + C | Copy selected component |
Cmd/Ctrl + X | Cut selected component |
Cmd/Ctrl + V | Paste component |
Shift + Cmd/Ctrl + C | Copy component styles |
Shift + Cmd/Ctrl + V | Paste component styles |
Cmd/Ctrl + F | Search in Hierarchy panel |
Alt + Shift + D | Open Dev Tools debugger window |
Saving and Publishing
Saving and publishing are two separate steps with distinct effects on the app's availability to end users.
Saving
Clicking Save persists your changes to the current page draft. The Save button appears disabled (grayed out) when there are no pending changes — this is by design and indicates your current state is already saved. When real-time collaboration is enabled for the app, the Save button disappears entirely and changes are saved automatically in real time as you make them.
Publishing
Clicking Publish opens the publish dialog. Publishing makes the current version of your app available to end users at the app's published URL. Before publishing, ensure you have saved all changes on all modified pages. The publish dialog lets you:
Choose the target environment (if multiple environments are configured).
Write a release note or change summary.
Review which pages have unsaved changes before proceeding.
Preview
The Preview button opens a full-screen, read-only preview of your app as it would appear to the currently logged-in user. Unlike the Interactive Canvas toggle (which enables click-through within the builder), Preview opens a separate tab that runs the full app experience — including real data sources, events, and navigation — without affecting the published version.
Warning: Unsaved changes warning If you click the Back button with unsaved changes, the builder will prompt: "It looks like you have unsaved changes on this page. Your changes will be lost if you leave this page without saving." Choose to discard changes or return to save them first.