Unify Logo Footer.svg
Unify Applications
Logo
Navigation Actions

Navigation Actions

Logo

7 mins READ

Actions at a Glance

Action TypeBuilder LabelUse When
navigateGo to URLNavigating to an external URL, special scheme (tel:, mailto:), or raw path
navigateToPageGo to PageNavigating to another page in the same app by page ID
navigateBackNavigate BackGoing back in browser/app history
setURLParametersSet URL ParametersUpdating the current page's query string without navigating
openShareDialogOpen Share DialogOpening the OS share sheet or copying a shareable link

Sends the user to any URL or path. Use this for external websites, special schemes like tel: or mailto:, and raw router paths. For navigating to another page in the same app by page ID, use navigateToPage instead.

Parameters

ParameterTypeRequiredDefaultDescription
pathstring (URI)Required (required)The URL or path to navigate to. Supports {{ }} bindings for dynamic destinations. If missing, empty, or resolving to nothing, the action is a silent no-op.
target"_self" | "_blank"Optional (optional)_selfOpen in same tab (_self) or new tab (_blank). On mobile, _blank opens in the external browser. Only the exact string _blank opens a new tab — anything else routes in the current tab.
history"push" | "replace"Optional (optional)pushSame-tab web only. replace swaps the current history entry (Back won't return here); push adds a new entry. Ignored when target is _blank.
preserveSearchParamsbooleanOptional (optional)falseWhen true, merges the current page's query string into the destination URL. Params written inside path win per-key on conflict.

Warning: Path resolution rule: A value that starts with http://, https://, //, a special scheme, or a leading slash is used as-is. Anything else gets // prepended (so google.com becomes //google.com). An in-app path with a dot (like pricing.v2) will be treated as an external host — always prefix in-app paths with /.

Note: Chain gate: NO. The navigate handler returns an already-resolved promise and cannot fail the chain. Put navigate last in a chain when it targets the same tab — the runner continues executing remaining nodes even after navigation starts.

Examples

External URL in a new tab

{ "actionType": "navigate", "payload": { "path": "https://docs.unifyapps.com", "target": "_blank" } }

Same-tab navigation replacing history (e.g. after login)

{ "actionType": "navigate", "payload": { "path": "/dashboard", "history": "replace" } }

Dynamic path with preserved query params

{ "actionType": "navigate", "payload": { "path": "https://example.com/orders/{{ variables.orderId }}", "preserveSearchParams": true } }

Email link

{ "actionType": "navigate", "payload": { "path": "mailto:support@example.com?subject=Help" } }

Navigates to another page in the same app by page ID. This is the correct action for in-app routing — it performs an SPA route change, preserves app state, and supports passing page parameters and inputs to the destination.

Parameters

ParameterTypeRequiredDefaultDescription
pageIdstringRequired (required)The destination page's ID (e.g. e_68a881264ee5a774c912d4c1 or a template slug like login). If missing or resolving to nothing, the action is a silent no-op. Fetch IDs from app overview — never invent them.
target"_self" | "_blank"Optional (optional)_selfOpen in same tab or new tab. Read raw (not through binding engine). Only the exact string _blank opens a new tab.
history"push" | "replace"Optional (optional)pushHistory entry behavior. Read raw — write a literal, not a binding. Ignored when target is _blank.
pageParamsArray of {key, value}Optional (optional)Values for dynamic path segments (e.g. :id in /order/:id). Each entry has key (segment name) and value (string, supports bindings). A missing segment leaves :param in the path — a visible error in builder/preview, a silent no-op in deployment.
pageInputsobjectOptional (optional)Query-string inputs serialized to the destination URL as ?key=value. Keys should match the destination page's declared query inputs. Supports bindings in values.
overridePageAnimationbooleanOptional (optional)falseMobile only. When true, applies pageTransitionBehavior. Hidden on web.
pageTransitionBehaviorenumOptional (optional)Mobile only. One of: default, none, slide_from_right, fade, fade_from_bottom, modal, adaptive_sheet, full_screen_modal, overlay. Only applied when overridePageAnimation is true.

Warning: Do not write openInNewTab. This is a form-only field in the builder that gets transformed to target before storage. Writing it in a stored payload is invalid. Always use target.

Examples

Simple same-tab navigation to a static page

{ "actionType": "navigateToPage", "payload": { "pageId": "e_68a881264ee5a774c912d4c1", "history": "push", "target": "_self" } }

Pass a dynamic path parameter to an order detail page

{ "actionType": "navigateToPage", "payload": { "pageId": "e_orderDetailPage", "pageParams": [ { "key": "id", "value": "{{ row.orderId }}" } ], "target": "_self" } }

Pass query-string inputs to a search results page

{ "actionType": "navigateToPage", "payload": { "pageId": "e_searchPage", "pageInputs": { "query": "{{ textInput_search['value'] }}", "category": "{{ select_category['value'] }}" } } }

Redirect-style navigation after login (no back history entry)

{ "actionType": "navigateToPage", "payload": { "pageId": "login", "history": "replace" } }

Goes back in the browser or app navigation history — equivalent to the user pressing the browser Back button.

Parameters

ParameterTypeRequiredDefaultDescription
navigateToSpecificPagebooleanOptional (optional)falseWhen true, navigates to a specific fallback page if there is no history to go back to (e.g. the user arrived directly via a deep link).
pageIdstringOptional (optional)The fallback page ID to navigate to when navigateToSpecificPage is true and no history exists.

Note: On mobile apps, navigateBack uses the native navigation stack — it is not just a history pop.

Examples

Simple back button

{ "actionType": "navigateBack", "payload": {} }

Back with fallback page (for deep-linked entry)

{ "actionType": "navigateBack", "payload": { "navigateToSpecificPage": true, "pageId": "e_homePage" } }

setURLParameters — Set URL Parameters

Updates the current page's query string without triggering a page navigation. The URL changes but the page stays mounted, making this ideal for filter state, active tabs, or any state you want reflected in the URL for sharing or back-button support.

Parameters

ParameterTypeRequiredDefaultDescription
paramsobject or array of {key, value}Required (required)The query parameters to set. Keys map to URL parameter names. Values support bindings. Existing params not specified here are preserved.
history"push" | "replace"Optional (optional)replaceWhether to push a new history entry or replace the current one when updating the URL.

Update filter state in URL without navigating

{ "actionType": "setURLParameters", "payload": { "params": { "status": "{{ select_status['value'] }}", "page": "1" }, "history": "replace" } }

openShareDialog — Open Share Dialog

Opens the operating system's native share sheet (on mobile) or copies a link to the clipboard (on web). Use it on any "Share" button where you want users to forward a link to the current page or a specific record.

Parameters

ParameterTypeRequiredDefaultDescription
titlestringOptional (optional)Title text shown in the share sheet (mobile) or as the dialog heading (web). Supports bindings.
urlstringOptional (optional)Current page URLThe URL to share. Defaults to the current page's URL if not set. Supports bindings for dynamic record URLs.
textstringOptional (optional)Additional body text included with the share (mobile only, passed to the OS share API).

Share current page with a custom title

{ "actionType": "openShareDialog", "payload": { "title": "Check out this order", "url": "{{ window.location.href }}" } }

Share a specific record URL

{ "actionType": "openShareDialog", "payload": { "title": "Order #{{ row.orderNumber }}", "url": "https://app.example.com/orders/{{ row.id }}", "text": "View the full details of this order." } }

Choosing the Right Navigation Action

ScenarioUse
Link to an external websitenavigate with target: "_blank"
Navigate to another page in this appnavigateToPage with the page ID
Navigate to a page and pass a record ID in the URL pathnavigateToPage with pageParams
Navigate to a page and pass filter values as query paramsnavigateToPage with pageInputs
Back button / cancel buttonnavigateBack
Update URL filters without reloading the pagesetURLParameters
Share a link with the useropenShareDialog
Open an email clientnavigate with path: "mailto:..."
Open a phone dialernavigate with path: "tel:..."
After login, redirect without a Back entrynavigateToPage with history: "replace"