Build bespoke, fully custom data experiences — backed by live, governed data.
Apps let you go beyond dashboards. Where a dashboard arranges charts on a grid, an app is a fully custom HTML and JavaScript interface — with its own layout, components, and interactivity — powered by live queries from your workbook.The data behind an app is the same governed data that powers everything else in Omni. Each query the app reads lives in the workbook, where anyone with access can open it, inspect the SQL and semantic model behind it, and tune it. The app is a new way to present and interact with those results: all the flexibility of an AI-generated artifact, hosted, shareable, and governed in Omni.
Apps are enabled by default. An Organization Admin can toggle the Enable apps setting in Settings > Apps to disable them if needed.Additionally, Organization Admins can restrict individual users or groups from creating apps through a granular permission on a custom role.The same tab carries the external source policy, which sets the organization-wide ceiling on the external hosts any app may load resources from.
Apps are the recommended content type to choose. Reach for a dashboard when you need a fully drag-and-drop creation process.Organization Admins can set apps as the default presentation type across your organization with the Prefer apps setting.
The Enable apps setting in Settings > Apps must be enabled to create apps.
Every app is paired with a workbook. The workbook holds the queries and the app is the custom interface on top of them.
Omni Agent
Omni UI
You can do this:
In a chat — Describe the interface and the data it should show in the Omni Agent. The agent generates each query the app needs against your model, writes the HTML, and wires it to the data. When it’s done, the app opens in the editor, where you can keep iterating in chat or by hand.
In a workbook — Ask the Omni Agent to turn your current workbook into an app. The app attaches to that workbook and reads its existing tabs. The agent uses every query tab unless you ask it to use a specific subset, and reports which tabs it skipped. If you reference a tab name that doesn’t exist, the tool will fail and list the real tab names.If the workbook’s tabs are built on more than one model (see cross model tabs), the agent can switch between those models while building or editing the app.If your workbook contains a cross model tab, the agent can switch between the models used while building the app. Note: Creating a new cross model query or making changes to one inside an app may not work correctly yet.
If the workbook hasn’t been saved yet, the agent saves it first — to your My documents folder if your organization’s Allow personal content setting is enabled for you, or otherwise to your organization’s shared Hub or your embed entity’s shared folder (embed users only), as long as you have permission to save there. If none of these destinations is available, the agent reports that it can’t save the workbook.
To start from scratch, you can:
Create a new app and workbook - Click the New button in the sidebar, then select App and the model to use for the document. Omni creates a new workbook and app with a starter template you can build on in the editor.
Add an app to an existing workbook - In a draft workbook, click the Presentation button, select App, then confirm. Omni creates the app with a starter template you can build on in the editor.
Users with Editor permissions and higher can view all the changes to an app with File > History. See Viewing draft changes for more information.
Omni Agent
Omni UI
API
Open an app and click Edit in the top right corner of the workbook to enter a draft. If you have access to the Omni Agent, the chat split-view opens alongside the app preview so you can iterate with AI as you go.
Use the Omni Agent to make changes to the app
When you ask the agent to change an app, it makes targeted edits by locating the exact snippet in the code and only modifying the relevant portions. Each change appears in chat as a diff preview showing precisely what changed.If a partial edit can’t be applied — for example, if the target code has changed — the agent will retry with more context or, as a last resort, rewrite the affected section of HTML.The agent can also automatically detect and fix runtime errors in the app while you’re working on a draft. This is possible only while you’re editing the app in a draft.
Elements backed by query data can only be edited using the Omni Agent.
To manually edit an element in the app:
Click in the app toolbar.
Hover over an element and click to select it. To select multiple elements, use Command + Click (Mac) or Shift + Click (Windows). If an element can’t be manually edited, you won’t be able to select it.
A menu with style and formatting options displays:
Quickly change text formatting and element styles
For text elements, update the text or change its formatting or styles. For other element types - for example, input elements - you can only change how the element’s text is formatted and the styles applied to the element overall.
When finished, click the button on the right side of the toolbar to save your changes.
Apps automatically have access to Omni’s design system CSS variables and your organization’s custom theme styles. This allows you to build interfaces that match Omni’s look and feel and your organization’s branding, with automatic support for light and dark mode. See Styling apps for details.
When editing a draft app, an Access Warnings button may appear in the edit toolbar. This button shows which tiles will be restricted for Viewer and Restricted Querier users, helping you identify accessibility issues before publishing. When clicked, a popover lists the specific tiles that will be restricted and explains why users with limited permissions won’t be able to see them.The Access Warnings button only appears when all of the following conditions are met:
You are editing a draft app
Restricted Queriers or Viewers have access to the underlying model
One or more tiles in the app are restricted
You can also show or hide access warnings on a published app with the View > Access warnings checkbox, the same as on a dashboard: it opens the same Access Warnings button and popover in the document header, and its default on a published app follows the organization’s Access warnings when viewing setting.See Access warnings for more information about access warnings and how to resolve them.
When an app applies dynamic filters to its data (for example, when you interact with custom controls in the app interface), those filter values are automatically saved to the URL as af-- query parameters. This gives apps the same filter persistence that dashboards have.Reloading the app, sharing the link, or opening it in a new tab will restore the filtered state. Using your browser’s back and forward buttons steps through filter changes, so you can navigate through the app’s filter history.
The document’s Drill setting must be enabled to use drilling in an app.
Apps can let people drill into a value to see the rows behind it, the same way they drill on a dashboard. Drilling works in standalone apps, embedded apps, and apps set as a homepage.To add drilling to an app, describe it to the Omni Agent when you build or edit the app. For example:
Let users click a cell in the orders table to see the order items behind it.
The Omni Agent uses the available drill fields in the model to fulfill the request. To change the columns that appear when someone drills, refer to Customize drill fields.
Apps can write values back to input columns — the editable columns a workbook author adds to a query. This lets an app collect input from the people using it, such as a triage state, a review score, or a forecast override, and persist it the same way input columns persist everywhere else in Omni.An app can write to an input column that already exists, or you can ask the Omni Agent to create one in the same chat while you build or edit the app. The agent only sets up the column’s structure — name, data type, edit mode, and key columns — subject to the same requirements as creating one from a workbook. Someone still has to enter values, either in the tab or through the app itself.Describe the behavior to the Omni Agent when you build or edit the app. For example:
Show open opportunities as cards. Add a Mark as in call button to each card that writes Yes to the in_call input column for that opportunity.
The agent finds the input column on the query, sends the correct key values with each write, and surfaces failures in the app.Written values appear in the query results the next time the query runs.Writes respect the input column’s edit mode and the viewer’s row-level data access, so an app can’t be used to write around either.
Apps can also write to a table in the app’s workbook. Ask the Omni Agent to create one — empty, or with starting rows — while you build or edit the app, and it creates the table, queries it, and wires up the writes. This leverages similar capabilities as uploading a CSV manually, but managed by the app. For example:
Build a project tracker backed by a table with name, owner, status, and due date. Let people add, edit, and delete projects.
An app can also write to a data input table that’s already in the workbook.To write to a table through an app, a person needs the same permissions as uploading data to the workbook.
Apps can call a small allowlist of Omni API endpoints. This lets an app read Omni’s own metadata — the viewer’s identity, the content they can open, the models they can query — so you can build homepages, navigation portals, content catalogs, and data dictionaries that stay current on their own.Calls run with the permissions of the person viewing the app. Two people opening the same app can get different results, and an app can never show someone more than they could see in Omni itself.Access is read-only. An app can read metadata through these endpoints, but it can’t change anything with them.
Homepages and navigation — a branded landing page of the viewer’s favorites and recents, each tile linking into the real dashboard
Curated content portals — a Verified reports hub filtered by label, or a per-team portal driven by folders
Search experiences — a custom search box over everything the viewer can open, styled to your brand, for embeds where Omni’s own navigation isn’t available
Data dictionaries — a self-serve catalog of every view, dimension, and measure in a model
Live ERDs — an always-current diagram of topics and their join relationships, drawn from the model itself
Describe what you want to the Omni Agent and it will use these endpoints for you.
When editing a draft app, an Inspect button appears in the edit toolbar, allowing you to select elements in the running app and send them as annotated images to the Omni Agent for context. See Using the App inspector for more information.
A published, viewable app can be downloaded as a PNG, PDF, Excel workbook, or zipped CSVs from File > Download. See Downloading apps for details.You can also schedule the delivery of an app to an email destinations, with more destination options coming soon. A delivery can pin a specific environment connection, so it always runs against the same data.To create a delivery with filters, set the filters in the app first, create the delivery, and check the saved filters in settings. After the delivery is saved, changes to the app’s filters do not affect the delivery.App deliveries can also personalize content with the recipient’s user attributes.
Apps run in a sandboxed iframe with strict security controls by default. App-level settings let you enable specific features on a per-app basis, giving you fine-grained control over what each app can do. For example, enabling app settings can allow you to:
Load resources like images and fonts from a list of allowed domains
Render map tiles using keyless providers such as Carto
Open links to external sites or navigate to other pages inside Omni
Copy text or values to the clipboard from a button in the app
Apps can be embedded in your own product with the same SSO embed flow used for dashboards and workbooks. Point contentPath at the app and everything else about the session — modes, user attributes, connection roles, filters — behaves as it does for a dashboard. Embedded apps also work with Omni’s embed events.
You are responsible for the code in any app you embed. Omni does not review or validate app code. Before you embed an app, confirm your organization’s external source policy — it governs which external hosts apps can reach.
Each app runs inside a sandboxed iframe that blocks outbound network requests. App code can’t call third-party services or open its own connection to your data — it only works with what Omni passes in, so there’s no route for it to send your data anywhere. Omni API calls are no exception: the app names an endpoint and Omni makes the request on the server, against a fixed allowlist. No API key or credential ever reaches the app.Specific features that require widening the iframe’s security policy (such as loading map tiles, allowing navigation, or displaying externally-hosted images) can be enabled on a per-app basis through app settings. These settings are off by default and must be explicitly enabled by an editor.However, inline images, video, and audio can be displayed or played without configuring a Safe domain allowlist. This includes inline base64 content (data: URIs) and canvas-generated or in-browser-recorded content (blob: URIs), as these are all rendered within the iframe without making network requests.
Data access stays governed
An app can’t query your warehouse directly. The only data it sees is the results of its workbook’s queries, which Omni passes into the iframe. Every app inherits the access rules already in place — connection permissions, the semantic model and data permissions, and content sharing all carry over.The same holds for the ways an app reaches beyond its own query results. Input column writes respect the column’s edit mode and the writer’s row-level data access. Table writes require the same permissions as uploading data to the workbook, and only reach tables in the app’s own workbook. Omni API calls run with the permissions of the person viewing the app, so two people can get different results from the same app, and an app can never widen anyone’s access.
Only trusted libraries can load
Apps can load charting, styling, and font libraries from a short list of trusted CDNs, but nothing else. App editors can optionally configure Safe domains to load resources from additional trusted hosts beyond the default CDNs, within whatever ceiling the organization’s external source policy sets. Video and audio hosts work the same way as images: they load only from a host added to Safe domains.
An app rendered inline through the Omni MCP server’s showApp tool runs under the same sandboxing and governed queries described above.
Was this page helpful?
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Omni Docs","colors":{"primary":"#FF5FA2","light":"#FF5FA2","dark":"#4D122C"},"logo":{"light":"https://mintcdn.com/omni-e7402367/m1fg0tfdkEcnYhky/images/logo/omni-black.png?fit=max\u0026auto=format\u0026n=m1fg0tfdkEcnYhky\u0026q=85\u0026s=85b81b605382b15b60eb75159899002a","dark":"https://mintcdn.com/omni-e7402367/m1fg0tfdkEcnYhky/images/logo/omni-white.png?fit=max\u0026auto=format\u0026n=m1fg0tfdkEcnYhky\u0026q=85\u0026s=18b529bed326b4f1be9d58ac65b9e002"},"favicon":"https://mintcdn.com/omni-e7402367/WTWdmWXPOMD5jOUY/favicon.png?fit=max\u0026auto=format\u0026n=WTWdmWXPOMD5jOUY\u0026q=85\u0026s=775ee4acbc06107599e3471e50161a2b","background":{"color":{"light":"#FCFCF7","dark":"#0e0b0e"}},"navbar":{"links":[{"href":"https://community.omni.co","label":"Community"}],"primary":{"type":"button","label":"Try Omni!","href":"https://omni.co/demo"}},"footer":{},"seo":{"metatags":{"canonical":"https://docs.omni.co"}},"fonts":{"heading":{"family":"Cal Sans","weight":400},"body":{"family":"IBM Plex Sans"}},"integrations":{"ga4":{"measurementId":"G-ZMG0QT2W9L"}},"banner":{"content":"Need help? Get answers from the docs with Omni's in-app AI! Log in to your Omni instance and open the [Omni Agent](/ai/chat) in the sidebar.","dismissible":true},"thumbnails":{"appearance":"dark","background":"https://mintcdn.com/omni-e7402367/J1q2UvTSjLHOwJ3G/images/og/og-background.png?fit=max\u0026auto=format\u0026n=J1q2UvTSjLHOwJ3G\u0026q=85\u0026s=63ad1c86bdbf4da4196959c391afb21f","fonts":{"family":"IBM Plex Sans"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"omni-e7402367","hasAudioNarration":false,"actualSubdomain":"omni-e7402367","customDomains":["docs.omni.co"],"gitSource":{"type":"github","owner":"exploreomni","repo":"mintlify-omni","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aecce8de651bc88d925f9d4","collectionId":"c9cb209d-6b7d-481d-bb63-454484d0196e","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aecce8de651bc88d925f9d4"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"DISABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"DISABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aeceba7aa8280a36b6d8346","clientVersion":"0.0.4071","searchFilterCounts":[{"language":"default","tag":"Docs","count":507},{"language":"default","tag":"Developers","count":379},{"language":"default","tag":"Model data","count":304},{"language":"default","tag":"REST APIs","count":254},{"language":"default","tag":"Parameters","count":188},{"language":"default","tag":"Product updates","count":160},{"language":"default","tag":"Demos","count":156},{"language":"default","tag":"Admin","count":123},{"language":"default","tag":"Visualize \u0026 present","count":98},{"language":"default","tag":"Embedding","count":87}],"searchSettings":{"isFiltersEnabled":true,"maxResults":10,"fullPageSearch":true}},"assistantConfig":{"enableAskAiButton":true,"enableAskAiSearchBar":false},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":false}},"googleFontsInlined":true},"customCss":[{"filePath":"styles.css","content":"img{border:1px solid;border-color:rgb(var(--gray-200))}.no-border{border:0px}.nav-logo{border:0px}#banner{color:#FCFCF7;font-weight:600;a {\n color: #FCFCF7;\n font-weight: 600;\n }}#topbar-cta-button{background-color:#FF5FA2;color:#FCFCF7!important;padding:0;border-radius:160px;text-decoration:none;font-weight:800;cursor:pointer;transition:background-color 0.2s ease, transform 0.1s ease}#topbar-cta-button span{background-color:transparent!important}#topbar-cta-button>a{padding:8px 14px!important}#topbar-cta-button *{color:#FCFCF7!important}#topbar-cta-button:hover{background-color:#FF5FA2;transform:translateY(-1px)}#topbar-cta-button:active{transform:translateY(0)}#topbar-cta-button svg{display:none!important}.navbar-link a{border-radius:160px!important}.dark .navbar-link a{background-color:rgb(255 255 255 / 0.1)!important}.dark .navbar-link a:hover{background-color:rgb(255 255 255 / 0.2)!important}[data-testid=\"rss-feed-button\"]{border-color:#FF5FA2!important;color:#FF5FA2!important;border-radius:160px!important;gap:6px;transition:background-color 0.2s ease, transform 0.1s ease}[data-testid=\"rss-feed-button\"]::after{content:\"Subscribe\";font-size:14px;font-weight:600}[data-testid=\"rss-feed-button\"] svg{stroke:#FF5FA2}[data-testid=\"rss-feed-button\"]:hover{background-color:rgba(255, 95, 162, 0.05)!important;transform:translateY(-1px)}.dark [data-testid=\"rss-feed-button\"]:hover{background-color:rgba(255, 95, 162, 0.1)!important}[class*=\"cursor-copy\"][class*=\"max-h-\"]{max-height:20px!important}:has(>.guide-header){position:relative;max-width:1100px;margin:0 auto;padding:24px 24px 72px calc(200px + 48px + 24px);color:rgb(var(--gray-700))}.dark :has(>.guide-header){color:rgb(var(--gray-400))}.guide-header{position:sticky;top:var(--scroll-mt, 9.5rem);z-index:20;background-color:#FCFCF7;padding:0px 0px 1px;margin-bottom:35px;box-shadow:0 -10rem 0 10rem #FCFCF7}.dark .guide-header{background-color:#0e0b0e;box-shadow:0 -10rem 0 10rem #0e0b0e}.guide-title{font-size:2.5rem;font-weight:700;color:rgb(var(--gray-900));margin:0;line-height:1.3}.dark .guide-title{color:rgb(var(--gray-50))}.guide-sidebar{position:absolute;left:24px;top:24px;bottom:0;width:200px}.guide-sidebar-content{position:sticky;top:calc(var(--scroll-mt, 9.5rem) + 10px)}.guide-sidebar-back{display:flex;align-items:center;gap:8px;color:rgb(var(--gray-500));text-decoration:none;font-size:14px;font-weight:500;margin-bottom:24px;transition:color 0.15s ease}.guide-sidebar-back:hover{color:rgb(var(--primary))}.guide-sidebar-section{margin-bottom:20px}.guide-sidebar-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;color:rgb(var(--gray-500));margin-bottom:6px}.guide-sidebar-category{display:flex;align-items:center;gap:6px;font-size:14px;color:rgb(var(--gray-700));text-transform:capitalize}.dark .guide-sidebar-category{color:rgb(var(--gray-300))}.guide-sidebar-date{font-size:14px;color:rgb(var(--gray-600))}.dark .guide-sidebar-date{color:rgb(var(--gray-400))}.guide-sidebar-links{list-style:none;padding:0;margin:0}.guide-sidebar-links li{margin-bottom:6px}.guide-sidebar-progress{display:flex;align-items:center;gap:12px}.guide-mascot{flex-shrink:0}.guide-mascot svg{display:block}.guide-sidebar-progress-text{font-size:14px;font-weight:600;color:rgb(var(--gray-600))}.dark .guide-sidebar-progress-text{color:rgb(var(--gray-400))}.guide-sidebar-links a{font-size:14px;color:rgb(var(--primary));text-decoration:none}:has(>.guide-header) .guide-sidebar a{border-bottom:none;font-weight:inherit}:has(>.guide-header) a.guide-sidebar-back{color:rgb(var(--gray-500));font-weight:500}:has(>.guide-header) a.guide-sidebar-back:hover{color:rgb(var(--primary))}:has(>.guide-header) .guide-sidebar-links a{color:rgb(var(--primary))}:has(>.guide-header) .guide-sidebar-links a:hover{text-decoration:underline}@media (max-width: 768px){:has(>.guide-header){padding:24px 24px 72px 24px}.guide-sidebar{position:static;width:100%;margin-bottom:24px}.guide-sidebar-content{position:static;display:flex;flex-wrap:wrap;align-items:center;gap:12px}.guide-sidebar-back{width:100%;margin-bottom:4px}.guide-sidebar-section{margin-bottom:0}.guide-sidebar-section:has(.guide-sidebar-progress),.guide-sidebar-section:has(.guide-sidebar-links){display:none}.guide-sidebar-label{display:none}.guide-sidebar-category,.guide-sidebar-date{font-size:12px;padding:4px 10px;border-radius:4px;background-color:#f1f5f9;color:#1e191a}.dark .guide-sidebar-category,.dark .guide-sidebar-date{background-color:rgba(255, 255, 255, 0.03);color:rgb(250, 245, 247)}.guide-header{position:static;box-shadow:none}.guide-sticky-header{padding:12px 16px}.guide-progress-track{margin:-12px -16px 12px}.guide-sticky-title{font-size:1.5rem}}:has(>.guide-header) h1,:has(>.guide-header) h2,:has(>.guide-header) h3{color:rgb(var(--gray-900))}.dark :has(>.guide-header) h1,.dark :has(>.guide-header) h2,.dark :has(>.guide-header) h3{color:rgb(var(--gray-50))}:has(>.guide-header) h1{font-size:2.25rem;font-weight:700;margin:0 0 16px 0;line-height:1.2}:has(>.guide-header) h2{font-size:1.5rem;font-weight:600;margin:32px 0 16px 0;line-height:1.3}:has(>.guide-header) [data-component-part=\"step-title\"]{margin:0 0 16px 0}:has(>.guide-header) h3{font-size:1.25rem;font-weight:600;margin:24px 0 12px 0;line-height:1.4}:has(>.guide-header) p,:has(>.guide-header) [data-as=\"p\"]{display:block;margin:16px 0;line-height:1.7}:has(>.guide-header)>.guide-header+p,:has(>.guide-header)>.guide-header+[data-as=\"p\"]{margin-top:0}:has(>.guide-header) ul:not(.not-prose),:has(>.guide-header) ol:not(.not-prose){margin:16px 0;padding-left:24px}:has(>.guide-header) ul:not(.not-prose){list-style-type:disc}:has(>.guide-header) ol:not(.not-prose){list-style-type:decimal!important}:has(>.guide-header) :not(.not-prose)>li{margin-bottom:8px;line-height:1.6}:has(>.guide-header) .prose ul:not(.not-prose){list-style-type:none;padding-left:0}:has(>.guide-header) .prose :not(.not-prose)>li{margin-bottom:0}:has(>.guide-header) a{color:rgb(17, 24, 39);text-decoration:none;font-weight:600;border-bottom:1px solid rgb(var(--primary))}.dark :has(>.guide-header) a{color:rgb(var(--gray-50))}:has(>.guide-header) a:hover{border-bottom-width:2px}:has(>.guide-header) strong{font-weight:600;color:rgb(var(--gray-900))}.dark :has(>.guide-header) strong{color:rgb(var(--gray-50))}:has(>.guide-header) code{font-size:0.9em}:has(>.guide-header) table{width:100%;border-collapse:collapse;margin:16px 0}:has(>.guide-header) th{text-align:left;font-weight:600;padding:8px 16px 8px 0;border-bottom:1px solid rgb(var(--gray-200));color:rgb(var(--gray-900))}.dark :has(>.guide-header) th{border-bottom-color:rgb(var(--gray-700));color:rgb(var(--gray-50))}:has(>.guide-header) td{padding:12px 16px 12px 0;border-bottom:1px solid rgb(var(--gray-200));vertical-align:top}.dark :has(>.guide-header) td{border-bottom-color:rgb(var(--gray-700))}:has(>.guide-header) img{margin:16px 0;border-radius:8px}:has(>.guide-header) [data-component-part=\"card-title\"]{font-size:1rem!important;margin:4px 0 0 0!important}:has(>.guide-header) [data-component-part=\"card-content\"]{font-size:0.875rem!important;line-height:1.5!important}:has(>.guide-header) [data-component-part=\"card-content\"] [data-as=\"p\"]{font-size:0.875rem!important;margin:4px 0!important;line-height:1.5!important}.guides-container{max-width:1200px;margin:0 auto;padding:48px 24px}.guides-title{font-size:2.5rem;font-weight:700;color:#1e191a;margin-bottom:16px}.dark .guides-title{color:#e6e1e2}.guides-description{font-size:1.125rem;color:#1e191a;margin-bottom:32px}.dark .guides-description{color:#cbd5e1}.guides-layout{display:flex;gap:48px}.guides-sidebar{width:220px;flex-shrink:0}.guides-filters{position:sticky;top:100px;max-height:calc(100vh - 124px);overflow-y:auto;scrollbar-width:thin}.guides-filters::-webkit-scrollbar{width:6px}.guides-filters::-webkit-scrollbar-thumb{background:rgba(128, 128, 128, 0.35);border-radius:3px}.guides-filter-group{margin-bottom:24px}.guides-filter-label{display:block;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;color:#1e191a;margin-bottom:8px}.dark .guides-filter-label{color:#cbd5e1}.guides-filter-input{width:100%;padding:8px 12px;border-top-left-radius:9999px;border-top-right-radius:9999px;border-bottom-left-radius:9999px;border-bottom-right-radius:9999px;border-color:rgb(230, 225, 226);font-size:14px;box-sizing:border-box;background-color:rgba(17, 12, 14, 0.03);color:rgb(119, 114, 116)}.dark .guides-filter-input{background-color:rgba(255, 255, 255, 0.03);border-color:#334155;color:rgba(255, 255, 255, 0.5)}.guides-filter-input:focus{outline:none;border-color:#FF5FA2}.dark .guides-filter-input::placeholder{color:rgba(255, 255, 255, 0.5)}.guides-filter-button{display:block;width:100%;padding:8px 12px;margin-bottom:4px;border-radius:160px;border:1px solid #e2e8f0;background:transparent;font-size:14px;text-align:left;cursor:pointer;transition:all 0.15s ease;color:#334155}.dark .guides-filter-button{color:#cbd5e1;border-color:rgba(255, 255, 255, 0.1);border-style:solid;border-width:1.5px}.guides-filter-button:hover{background-color:#f8fafc}.dark .guides-filter-button:hover{background-color:#0e0b0e;border-color:#FF5FA2}.guides-filter-button.active{border-color:#FF5FA2;background-color:#fff0f6;color:#FF5FA2}.dark .guides-filter-button.active{background-color:rgba(255, 95, 162, 0.15)}.guides-clear-button{width:100%;padding:10px 12px;margin-bottom:16px;border:1px solid #e2e8f0;border-radius:160px;background:#f8fafc;color:#334155;font-size:14px;font-weight:500;cursor:pointer;transition:all 0.15s ease}.dark .guides-clear-button{background:#0e0b0e;color:#e2e8f0;border-color:rgba(255, 255, 255, 0.1);border-style:solid;border-width:1.5px}.guides-clear-button:hover{background:#f1f5f9;border-color:#cbd5e1}.dark .guides-clear-button:hover{background:#0e0b0e;border-color:#FF5FA2}.guides-content{flex:1;min-width:0}.guides-results-count{font-size:14px;color:#1e191a;margin-bottom:16px}.dark .guides-results-count{color:#cbd5e1}.guides-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(280px, 1fr));gap:16px}.guides-card{border:1px solid #e2e8f0;border-radius:16px;padding:20px;text-decoration:none;color:inherit;display:flex;flex-direction:column;gap:12px;transition:border-color 0.15s ease, box-shadow 0.15s ease;background-color:#FCFCF7}.dark .guides-card{border-color:rgba(255, 255, 255, 0.1);border-style:solid;border-width:1.5px;background-color:#0e0b0e}.guides-card:hover{border-color:#FF5FA2;box-shadow:0 2px 8px rgba(0, 0, 0, 0.08)}.dark .guides-card:hover{box-shadow:0 2px 8px rgba(0, 0, 0, 0.3)}.guides-card-icon{margin-bottom:4px}.guides-card-title{font-size:16px;font-weight:600;color:#1e191a;margin:0;line-height:1.3}.dark .guides-card-title{color:#FCFCF7}.guides-card-description{font-size:16px;color:#575254;margin:0;line-height:1.5;flex-grow:1}.dark .guides-card-description{color:#a6a1a2}.guides-card-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.guides-card-tag{font-size:12px;padding:2px 8px;border-radius:4px;background-color:#f1f5f9;color:#1e191a}.dark .guides-card-tag{background-color:rgba(255, 255, 255, 0.03);color:rgb(250, 245, 247)}.guides-no-results{text-align:center;padding:48px 24px;color:#1e191a}.dark .guides-no-results{color:#cbd5e1}@media (max-width: 768px){.guides-layout{flex-direction:column;gap:24px}.guides-sidebar{width:100%}.guides-filters{position:static;max-height:none;overflow-y:visible}.guides-filter-button{display:inline-block;width:auto;margin-right:8px}}.badge-color{background-color:#FF5FA2;color:#FCFCF7!important}.lib-page{--lib-muted: #575254;color:#1e191a}.dark .lib-page{--lib-muted: #a6a1a2;color:#e6e1e2}.lib-page a{color:#FF5FA2}.lib-card:hover{border-color:#FF5FA2!important}.lib-panel{background-color:#FCFCF7;color:#1e191a}.dark .lib-panel{background-color:#0e0b0e;color:#e6e1e2}.lib-logo-chip{display:inline-flex;align-items:center;justify-content:center;flex:none;overflow:hidden}.dark .lib-logo-chip{padding:3px 5px;border-radius:5px;background-color:#ffffff}.lib-logo-chip img{border:0;border-radius:0}.endpoint-table{table-layout:fixed}.endpoint-table th:first-child,.endpoint-table td:first-child{width:18rem;min-width:18rem;max-width:18rem}.endpoint-table th:last-child,.endpoint-table td:last-child{width:8rem;min-width:8rem;max-width:8rem}.icon{border:0px}.icons{background-color:#000000}.dark .icons{background-color:rgb(var(--gray-50))}.icon-position{display:inline;vertical-align:middle}.dbt-health-good{color:#178250}.dbt-health-warning{color:#FFBD14}.dbt-health-failure{color:#E42F2F}.dbt-health-unknown{color:#676F7E}.dark .dbt-health-good{color:#68B691}.dark .dbt-health-warning{color:#FDD97C}.dark .dbt-health-failure{color:#FF9F8A}.dark .dbt-health-unknown{color:#B7BDC8}.dbt-health-mark{color:#676F7E}.dark .dbt-health-mark{color:#B7BDC8}.dbt-health-ring{fill:#FCFCF7}.dark .dbt-health-ring{fill:#0e0b0e}[data-component-part=\"accordion-icon\"] svg{display:block!important}.side-by-side{display:flex;flex-direction:row-reverse;align-items:flex-start;gap:1.5rem;margin:1.5rem 0}.side-by-side-reverse{flex-direction:row}.side-by-side-divider{padding-bottom:1.5rem;border-bottom:1px solid rgb(var(--gray-200))}.dark .side-by-side-divider{border-bottom-color:rgb(var(--gray-700))}.side-by-side-media{flex:0 0 45%;display:flex;flex-direction:column;align-items:center;margin:0}.side-by-side-media img{width:auto;height:auto;max-width:100%;max-height:var(--side-by-side-height, 220px);margin:0}.side-by-side-caption{margin-top:0.75rem;padding:0 2rem 0.5rem;text-align:center;font-size:0.875rem;line-height:1.25rem;color:rgb(var(--gray-700))}.dark .side-by-side-caption{color:rgb(var(--gray-400))}.side-by-side-body{flex:1;min-width:0}.side-by-side-body p,.side-by-side-body [data-as=\"p\"]{display:block;margin:1rem 0}.side-by-side-body .side-by-side-title{margin:0 0 0.5rem;font-weight:600;color:rgb(var(--gray-900))}.dark .side-by-side-body .side-by-side-title{color:rgb(var(--gray-50))}.side-by-side-body>:first-child{margin-top:0}.side-by-side-body>:last-child{margin-bottom:0}@media (max-width: 768px){.side-by-side,.side-by-side-reverse{flex-direction:column;align-items:stretch}.side-by-side-media{flex:1 1 auto}}#page-title,:has(>.guide-header) h1,.guides-title{font-weight:400;line-height:1;letter-spacing:0;text-wrap:pretty}#page-title{font-size:2rem}@media (min-width: 40rem){#page-title{font-size:2.625rem}}h2,h3,h4,h5,h6{font-family:var(--font-family-body-custom)}.mdx-content :is(h2,h3,h4,h5,h6):not([data-component-part]):not(.not-prose){font-weight:500;line-height:1.15;letter-spacing:0;text-wrap:pretty}.mdx-content h2:not([data-component-part]):not(.not-prose){font-size:1.5rem}"}],"page":{"pagePath":"visualize-present/apps","slug":"/visualize-present/apps","pageMetadata":{"title":"Apps","sidebarTitle":"Apps","description":"Build bespoke, fully custom data experiences — backed by live, governed data.","keywords":["apps","app builder","custom interface","vibe apps","Omni Agent","AI app","inspector","input columns","writeback","table writeback","csv writeback","embed apps","embedded apps","app deliveries","deliver apps","schedule apps"],"href":"/visualize-present/apps/index"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Build bespoke, fully custom data experiences — backed by live, governed data.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const CheckIcon=({label})=>{const{Icon}=_provideComponents()||{};if(!Icon)_missingMdxReference(`Icon`,true);return _jsxs(`span`,{children:[_jsx(Icon,{icon:`circle-check`,iconType:`solid`,color:`#26bd6c`}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const XCircleIcon=({label})=>{const{Icon}=_provideComponents()||{};if(!Icon)_missingMdxReference(`Icon`,true);return _jsxs(`span`,{children:[_jsx(Icon,{icon:`circle-xmark`,iconType:`solid`,color:`#ff2465`}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const HistoryIcon=({label})=>{return _jsxs(`span`,{children:[_jsxs(`svg`,{stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,height:`1em`,width:`1em`,xmlns:`http://www.w3.org/2000/svg`,class:`icon-position`,children:[_jsx(`path`,{d:`M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0`}),_jsx(`path`,{d:`M12 12h3.5`}),_jsx(`path`,{d:`M12 7v5`})]}),label\u0026\u0026` ${label}`]})};const ExpandAllIcon=({label})=>{return _jsxs(`span`,{children:[_jsxs(`svg`,{stroke:`currentColor`,fill:`currentColor`,\"stroke-width\":`0`,viewBox:`0 0 24 24`,height:`1em`,width:`1em`,xmlns:`http://www.w3.org/2000/svg`,class:`icon-position`,children:[_jsx(`path`,{fill:`none`,d:`M0 0h24v24H0z`}),_jsx(`path`,{d:`M12 5.83 15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9 12 5.83zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15 12 18.17z`})]}),label\u0026\u0026` ${label}`]})};const AppAdjustIcon=({label})=>{return _jsxs(`span`,{children:[_jsxs(`svg`,{stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,height:`1em`,width:`1em`,xmlns:`http://www.w3.org/2000/svg`,class:`icon-position`,children:[_jsx(`path`,{d:`M19 11v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2`}),_jsx(`path`,{d:`M13 13l9 3l-4 2l-2 4l-3 -9`}),_jsx(`path`,{d:`M3 3l0 .01`}),_jsx(`path`,{d:`M7 3l0 .01`}),_jsx(`path`,{d:`M11 3l0 .01`}),_jsx(`path`,{d:`M15 3l0 .01`}),_jsx(`path`,{d:`M3 7l0 .01`}),_jsx(`path`,{d:`M3 11l0 .01`}),_jsx(`path`,{d:`M3 15l0 .01`})]}),label\u0026\u0026` ${label}`]})};const AdditionalReqIcon=({label})=>{const{Icon}=_provideComponents()||{};if(!Icon)_missingMdxReference(`Icon`,true);return _jsxs(`span`,{children:[_jsx(Icon,{icon:`circle-plus`,iconType:`solid`,color:`#0000FF`}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const RecommendedIcon=({label})=>{const{Icon}=_provideComponents()||{};if(!Icon)_missingMdxReference(`Icon`,true);return _jsxs(`span`,{children:[_jsx(Icon,{icon:`thumbs-up`,iconType:`solid`,color:`#0000FF`}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const OptionalIcon=({label})=>{const{Icon}=_provideComponents()||{};if(!Icon)_missingMdxReference(`Icon`,true);return _jsxs(`span`,{children:[_jsx(Icon,{icon:`circle`,iconType:`solid`,color:`#9ca3af`}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const DbtNoteIssueIcon=({label})=>{const{Icon}=_provideComponents()||{};if(!Icon)_missingMdxReference(`Icon`,true);return _jsxs(`span`,{children:[_jsx(Icon,{icon:`circle-info`,iconType:`solid`,className:`icons`}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const DbtWarningIssueIcon=({label})=>{const{Icon}=_provideComponents()||{};if(!Icon)_missingMdxReference(`Icon`,true);return _jsxs(`span`,{children:[_jsx(Icon,{icon:`triangle-exclamation`,iconType:`solid`,className:`icons`}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const DbtErrorIssueIcon=({label})=>{const{Icon}=_provideComponents()||{};if(!Icon)_missingMdxReference(`Icon`,true);return _jsxs(`span`,{children:[_jsx(Icon,{icon:`circle-xmark`,iconType:`solid`,className:`icons`}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const MicrosoftFabricIcon=({label})=>{return _jsxs(`span`,{children:[_jsx(`svg`,{xmlns:`http://www.w3.org/2000/svg`,class:`icon-position`,viewBox:`2 2 20 20`,fill:`#FF5FA2`,focusable:`false`,children:_jsx(`path`,{d:`m6.194 9.3 13.9-2.013h.005a.77.77 0 0 0 .637-.564l1.235-3.749A.77.77 0 0 0 21.228 2l-.048.002-.049.003L8.257 3.838A3.46 3.46 0 0 0 5.468 6.34l-1.04 3.83c.16-.592.514-.654 1.766-.872Zm.255 1.528c-1.644.341-2.258.89-2.617 1.693q-.093.21-.168.447l-.86 3.186c.46-.257 1.056-.466 1.736-.577l.01-.001 9.255-1.358c.804-.132 1.021-.947 1.185-1.558l.814-3.223-9.081 1.343zM4.66 17.077c-1.779.289-2.362 1.465-2.502 1.824-.103.27-.159.565-.159.873 0 1.269.947 2.058 2.18 2.194q.516.077 1.18-.019l2.022-.28c.509-.07.924-.439 1.06-.933l1.28-4.401z`})}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const SidebarHomeIcon=({label})=>{return _jsx(`span`,{children:_jsxs(`svg`,{class:`icon-position`,stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M19 8.71l-5.333 -4.148a2.666 2.666 0 0 0 -3.274 0l-5.334 4.148a2.665 2.665 0 0 0 -1.029 2.105v7.2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-7.2c0 -.823 -.38 -1.6 -1.03 -2.105`}),_jsx(`path`,{d:`M16 15c-2.21 1.333 -5.792 1.333 -8 0`})]})})};const SidebarRoutinesIcon=({label})=>{return _jsx(`span`,{children:_jsxs(`svg`,{class:`icon-position`,stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M10.5 21h-4.5a2 2 0 0 1 -2 -2v-12a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v3`}),_jsx(`path`,{d:`M16 3v4`}),_jsx(`path`,{d:`M8 3v4`}),_jsx(`path`,{d:`M4 11h10`}),_jsx(`path`,{d:`M18 18m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0`}),_jsx(`path`,{d:`M18 16.5v1.5l.5 .5`})]})})};const SidebarActivityIcon=({label})=>{return _jsx(`span`,{children:_jsxs(`svg`,{class:`icon-position`,stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M3 12l3 0`}),_jsx(`path`,{d:`M12 3l0 3`}),_jsx(`path`,{d:`M7.8 7.8l-2.2 -2.2`}),_jsx(`path`,{d:`M16.2 7.8l2.2 -2.2`}),_jsx(`path`,{d:`M7.8 16.2l-2.2 2.2`}),_jsx(`path`,{d:`M12 12l9 3l-4 2l-2 4l-3 -9`})]})})};const SidebarAiHubIcon=({label})=>{return _jsx(`span`,{children:_jsxs(`svg`,{class:`icon-position`,stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M5 12h-2l9 -9l9 9h-2`}),_jsx(`path`,{d:`M5 12v7a2 2 0 0 0 2 2h5`}),_jsx(`path`,{d:`M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2`}),_jsx(`path`,{d:`M19 22.5a4.75 4.75 0 0 1 3.5 -3.5a4.75 4.75 0 0 1 -3.5 -3.5a4.75 4.75 0 0 1 -3.5 3.5a4.75 4.75 0 0 1 3.5 3.5`})]})})};const DisabledFilterIcon=({label})=>{return _jsx(`span`,{children:_jsx(`svg`,{class:`icon-position`,width:`1em`,height:`1em`,xmlns:`http://www.w3.org/2000/svg`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,fill:`currentColor`,children:_jsx(`path`,{d:`M6.92893 0.514648L21.0711 14.6568L19.6569 16.071L15.834 12.2486L15 13.4999V21.9999H9V13.4999L4 5.99993H3V3.99993L7.585 3.99965L5.51472 1.92886L6.92893 0.514648ZM9.585 5.99965L6.4037 5.99993L11 12.8944V19.9999H13V12.8944L14.392 10.8066L9.585 5.99965ZM21 3.99993V5.99993H20L18.085 8.87193L16.643 7.42893L17.5963 5.99993H15.213L13.213 3.99993H21Z`})})})};const ContentValidatorIcon=({label})=>{return _jsx(`span`,{children:_jsxs(`svg`,{class:`icon-position`,stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,height:`18px`,width:`18px`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M9.615 20h-2.615a2 2 0 0 1 -2 -2v-12a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8`}),_jsx(`path`,{d:`M14 19l2 2l4 -4`}),_jsx(`path`,{d:`M9 8h4`}),_jsx(`path`,{d:`M9 12h2`})]})})};const TroubleshootWrenchIcon=({label})=>{return _jsx(`span`,{children:_jsx(`svg`,{class:`icon-position`,stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,height:`1em`,width:`1em`,xmlns:`http://www.w3.org/2000/svg`,children:_jsx(`path`,{d:`M7 10h3v-3l-3.5 -3.5a6 6 0 0 1 8 8l6 6a2 2 0 0 1 -3 3l-6 -6a6 6 0 0 1 -8 -8l3.5 3.5`})})})};const DbtIdeIcon=({label})=>{return _jsx(`span`,{children:_jsxs(`svg`,{class:`icon-position`,width:`1em`,height:`1em`,viewBox:`3.5 3.5 17 17`,fill:`none`,\"stroke-width\":`2`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M18.8626 5.12387C19.2152 5.46293 19.4457 5.91049 19.5 6.39873C19.5 6.60217 19.4457 6.7378 19.3237 6.99548C19.2016 7.25317 17.6962 9.85715 17.2487 10.5759C16.991 10.9964 16.8553 11.4982 16.8553 11.9864C16.8553 12.4883 16.991 12.9765 17.2487 13.3969C17.6962 14.1157 19.2016 16.7333 19.3237 16.991C19.4457 17.2487 19.5 17.3707 19.5 17.5741C19.4457 18.0624 19.2288 18.5099 18.8761 18.8354C18.5371 19.1881 18.0895 19.4186 17.6148 19.4593C17.4114 19.4593 17.2758 19.4051 17.0316 19.283C16.7875 19.1609 14.1293 17.6962 13.4105 17.2487C13.3562 17.2215 13.302 17.1808 13.2342 17.1537L10.142 15.7881C10.0418 16.2789 10.0606 16.3806 10.5488 16.8553C10.6438 16.9503 10.7387 17.0316 10.8472 17.113C10.7658 17.1537 10.6709 17.1944 10.5895 17.2487C9.8707 17.6962 7.25317 19.2016 6.99548 19.3237C6.7378 19.4457 6.61573 19.5 6.39873 19.5C5.91049 19.4457 5.46293 19.2288 5.13743 18.8761C4.78481 18.5371 4.55425 18.0895 4.5 17.6013C4.51356 17.3978 4.56781 17.1944 4.67631 17.0181C4.79837 16.7604 6.3038 14.1429 6.75135 13.4241C7.00905 13.0036 7.14467 12.5154 7.14467 12.0136C7.14467 11.5117 7.00905 11.0235 6.75135 10.6031C6.3038 9.85715 4.78481 7.2396 4.67631 6.98192C4.56781 6.8056 4.51356 6.60217 4.5 6.39873C4.55425 5.91049 4.77125 5.46293 5.12387 5.12387C5.46293 4.77125 5.91049 4.55425 6.39873 4.5C6.60217 4.51356 6.8056 4.56781 6.99548 4.67631C7.21248 4.77125 9.12477 5.88336 10.142 6.48012L10.3725 6.61573C10.4539 6.66998 10.5217 6.71067 10.5759 6.7378L10.6845 6.8056L13.6812 8.3724C13.8329 7.62172 13.8038 7.38878 13.1528 6.88698C13.2342 6.8463 13.3291 6.8056 13.4105 6.75135C14.1293 6.3038 16.7468 4.78481 17.0045 4.67631C17.1808 4.56781 17.3843 4.51356 17.6013 4.5C18.076 4.55425 18.5235 4.77125 18.8626 5.12387Z`,stroke:`currentColor`}),_jsx(`path`,{d:`M12.9623 12.1899L12.1893 12.9629C12.0808 13.0579 11.9045 13.0579 11.8095 12.9629L11.0365 12.1899C10.928 12.0814 10.928 11.9186 11.0365 11.8101L11.8095 11.0371C11.918 10.9286 12.0808 10.9286 12.1893 11.0371L12.9623 11.8101C13.0708 11.9186 13.0708 12.0814 12.9623 12.1899Z`,fill:`currentColor`})]})})};const RefreshIcon=({label})=>{return _jsx(`span`,{children:_jsxs(`svg`,{class:`icon-position`,stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,height:`1em`,width:`1em`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4`}),_jsx(`path`,{d:`M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4`})]})})};const MarkdownVariablesIcon=({label})=>{return _jsx(`span`,{children:_jsxs(`svg`,{class:`icon-position`,stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,height:`1em`,width:`1em`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M3 12v-7a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-7`}),_jsx(`path`,{d:`M3 10h18`}),_jsx(`path`,{d:`M10 3v10`}),_jsx(`path`,{d:`M2 17a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1v-4z`})]})})};const DashboardIcon=({label})=>{return _jsxs(`span`,{children:[_jsx(`svg`,{class:`icon-position`,fill:`none`,height:`1em`,strokeWidth:`2`,viewBox:`0 0 24 24`,width:`1em`,xmlns:`http://www.w3.org/2000/svg`,children:_jsx(`path`,{d:`M12.5625 3V21M12 9.75H3M21 15.375H12.5625M7 21H17C19.2091 21 21 19.2091 21 17V7C21 4.79086 19.2091 3 17 3H7C4.79086 3 3 4.79086 3 7V17C3 19.2091 4.79086 21 7 21Z`,stroke:`currentColor`})}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const WorkbookIcon=({label})=>{return _jsxs(`span`,{children:[_jsx(`svg`,{class:`icon-position`,fill:`none`,height:`1em`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,width:`1em`,xmlns:`http://www.w3.org/2000/svg`,children:_jsx(`path`,{d:`M9.1875 3V15.375M21 15.375H3M7 21H17C19.2091 21 21 19.2091 21 17V7C21 4.79086 19.2091 3 17 3H7C4.79086 3 3 4.79086 3 7V17C3 19.2091 4.79086 21 7 21Z`,stroke:`currentColor`})}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const WorkbookNumberFormatIcon=({label})=>{return _jsx(`span`,{children:_jsxs(`svg`,{class:`icon-position`,stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 30 30`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,height:`1.75em`,width:`1.75em`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M8 10v-7l-2 2`}),_jsx(`path`,{d:`M6 16a2 2 0 1 1 4 0c0 .591 -.601 1.46 -1 2l-3 3h4`}),_jsx(`path`,{d:`M15 14a2 2 0 1 0 2 -2a2 2 0 1 0 -2 -2`}),_jsx(`path`,{d:`M6.5 10h3`})]})})};const DashboardPreviewIcon=({label})=>{return _jsx(`span`,{children:_jsxs(`svg`,{class:`icon-position`,stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,height:`1em`,width:`1em`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M3 16m0 1a1 1 0 0 1 1 -1h3a1 1 0 0 1 1 1v3a1 1 0 0 1 -1 1h-3a1 1 0 0 1 -1 -1z`}),_jsx(`path`,{d:`M4 12v-6a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-6`}),_jsx(`path`,{d:`M12 8h4v4`}),_jsx(`path`,{d:`M16 8l-5 5`})]})})};const DashboardCatalogIcon=({label})=>{return _jsxs(`span`,{children:[_jsxs(`svg`,{class:`icon-position`,stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,height:`1em`,width:`1em`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M10 19h-6a1 1 0 0 1 -1 -1v-14a1 1 0 0 1 1 -1h6a2 2 0 0 1 2 2a2 2 0 0 1 2 -2h6a1 1 0 0 1 1 1v14a1 1 0 0 1 -1 1h-6a2 2 0 0 0 -2 2a2 2 0 0 0 -2 -2z`}),_jsx(`path`,{d:`M12 5v16`}),_jsx(`path`,{d:`M7 7h1`}),_jsx(`path`,{d:`M7 11h1`}),_jsx(`path`,{d:`M16 7h1`}),_jsx(`path`,{d:`M16 11h1`}),_jsx(`path`,{d:`M16 15h1`})]}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const DashboardAddItemIcon=({label})=>{return _jsxs(`span`,{children:[_jsxs(`svg`,{class:`icon-position`,stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,height:`1em`,width:`1em`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M4 4m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z`}),_jsx(`path`,{d:`M4 14m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z`}),_jsx(`path`,{d:`M14 14m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z`}),_jsx(`path`,{d:`M14 7l6 0`}),_jsx(`path`,{d:`M17 4l0 6`})]}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const DashboardControlIcon=({label})=>{return _jsxs(`span`,{children:[_jsxs(`svg`,{class:`icon-position`,stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,height:`1em`,width:`1em`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M3 3m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z`}),_jsx(`path`,{d:`M3 11l8 -8`}),_jsx(`path`,{d:`M3 17l14 -14`})]}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const DashboardChartIcon=({label})=>{return _jsxs(`span`,{children:[_jsxs(`svg`,{class:`icon-position`,stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,height:`1em`,width:`1em`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M3 3v18h18`}),_jsx(`path`,{d:`M20 18v3`}),_jsx(`path`,{d:`M16 16v5`}),_jsx(`path`,{d:`M12 13v8`}),_jsx(`path`,{d:`M8 16v5`}),_jsx(`path`,{d:`M3 11c6 0 5 -5 9 -5s3 5 9 5`})]}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const DashboardPlaceholderIcon=({label})=>{return _jsxs(`span`,{children:[_jsxs(`svg`,{class:`icon-position`,stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,height:`1em`,width:`1em`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M4 4m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z`}),_jsx(`path`,{d:`M14 4m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z`}),_jsx(`path`,{d:`M4 14m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z`}),_jsx(`path`,{d:`M14 17h6m-3 -3v6`})]}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const DashboardLayoutIcon=({label})=>{return _jsxs(`span`,{children:[_jsxs(`svg`,{class:`icon-position`,stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,height:`1em`,width:`1em`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M4 7l16 0`}),_jsx(`path`,{d:`M4 17l16 0`}),_jsx(`path`,{d:`M7 4l0 16`}),_jsx(`path`,{d:`M17 4l0 16`})]}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const DashboardTextIcon=({label})=>{return _jsxs(`span`,{children:[_jsxs(`svg`,{class:`icon-position`,stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,height:`1em`,width:`1em`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M4 20l3 0`}),_jsx(`path`,{d:`M14 20l7 0`}),_jsx(`path`,{d:`M6.9 15l6.9 0`}),_jsx(`path`,{d:`M10.2 6.3l5.8 13.7`}),_jsx(`path`,{d:`M5 20l6 -16l2 0l7 16`})]}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const DashboardStackContainerIcon=({label})=>{return _jsxs(`span`,{children:[_jsxs(`svg`,{class:`icon-position`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M4 5C4 4.73478 4.10536 4.48043 4.29289 4.29289C4.48043 4.10536 4.73478 4 5 4H19C19.2652 4 19.5196 4.10536 19.7071 4.29289C19.8946 4.48043 20 4.73478 20 5V9C20 9.26522 19.8946 9.51957 19.7071 9.70711C19.5196 9.89464 19.2652 10 19 10H5C4.73478 10 4.48043 9.89464 4.29289 9.70711C4.10536 9.51957 4 9.26522 4 9V5Z`,stroke:`currentColor`,\"stroke-width\":`2`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`}),_jsx(`path`,{d:`M4 15C4 14.7348 4.10536 14.4804 4.29289 14.2929C4.48043 14.1054 4.73478 14 5 14H12C12.2652 14 12.5196 14.1054 12.7071 14.2929C12.8946 14.4804 13 14.7348 13 15V19C13 19.2652 12.8946 19.5196 12.7071 19.7071C12.5196 19.8946 12.2652 20 12 20H5C4.73478 20 4.48043 19.8946 4.29289 19.7071C4.10536 19.5196 4 19.2652 4 19V15Z`,stroke:`currentColor`,\"stroke-width\":`2`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`})]}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const DashboardPageNavIcon=({label})=>{return _jsxs(`span`,{children:[_jsxs(`svg`,{class:`icon-position`,stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,height:`1em`,width:`1em`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M4 8h16`}),_jsx(`path`,{d:`M4 4m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z`}),_jsx(`path`,{d:`M8 4v4`})]}),_jsx(`strong`,{children:label\u0026\u0026` ${label}`})]})};const IdeFileIcon=({color=`#000000`})=>{return _jsx(`span`,{children:_jsxs(`svg`,{class:`icon-position`,stroke:`currentColor`,fill:`none`,\"stroke-width\":`2`,viewBox:`0 0 24 24`,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`,class:`file-type-icon`,height:`1em`,width:`1em`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsx(`path`,{d:`M3 5a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-14z`}),_jsx(`path`,{d:`M3 10h18`}),_jsx(`path`,{d:`M10 3v18`})]})})};const DbtHealthGoodIcon=()=>{return _jsxs(`svg`,{className:`icon-position`,viewBox:`3.5 3.5 27.5 25`,height:`1.5em`,width:`1.65em`,\"aria-hidden\":`true`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsxs(`g`,{className:`dbt-health-mark`,fill:`none`,strokeWidth:`2`,children:[_jsx(`path`,{d:`M18.8626 5.12387C19.2152 5.46293 19.4457 5.91049 19.5 6.39873C19.5 6.60217 19.4457 6.7378 19.3237 6.99548C19.2016 7.25317 17.6962 9.85715 17.2487 10.5759C16.991 10.9964 16.8553 11.4982 16.8553 11.9864C16.8553 12.4883 16.991 12.9765 17.2487 13.3969C17.6962 14.1157 19.2016 16.7333 19.3237 16.991C19.4457 17.2487 19.5 17.3707 19.5 17.5741C19.4457 18.0624 19.2288 18.5099 18.8761 18.8354C18.5371 19.1881 18.0895 19.4186 17.6148 19.4593C17.4114 19.4593 17.2758 19.4051 17.0316 19.283C16.7875 19.1609 14.1293 17.6962 13.4105 17.2487C13.3562 17.2215 13.302 17.1808 13.2342 17.1537L10.142 15.7881C10.0418 16.2789 10.0606 16.3806 10.5488 16.8553C10.6438 16.9503 10.7387 17.0316 10.8472 17.113C10.7658 17.1537 10.6709 17.1944 10.5895 17.2487C9.8707 17.6962 7.25317 19.2016 6.99548 19.3237C6.7378 19.4457 6.61573 19.5 6.39873 19.5C5.91049 19.4457 5.46293 19.2288 5.13743 18.8761C4.78481 18.5371 4.55425 18.0895 4.5 17.6013C4.51356 17.3978 4.56781 17.1944 4.67631 17.0181C4.79837 16.7604 6.3038 14.1429 6.75135 13.4241C7.00905 13.0036 7.14467 12.5154 7.14467 12.0136C7.14467 11.5117 7.00905 11.0235 6.75135 10.6031C6.3038 9.85715 4.78481 7.2396 4.67631 6.98192C4.56781 6.8056 4.51356 6.60217 4.5 6.39873C4.55425 5.91049 4.77125 5.46293 5.12387 5.12387C5.46293 4.77125 5.91049 4.55425 6.39873 4.5C6.60217 4.51356 6.8056 4.56781 6.99548 4.67631C7.21248 4.77125 9.12477 5.88336 10.142 6.48012L10.3725 6.61573C10.4539 6.66998 10.5217 6.71067 10.5759 6.7378L10.6845 6.8056L13.6812 8.3724C13.8329 7.62172 13.8038 7.38878 13.1528 6.88698C13.2342 6.8463 13.3291 6.8056 13.4105 6.75135C14.1293 6.3038 16.7468 4.78481 17.0045 4.67631C17.1808 4.56781 17.3843 4.51356 17.6013 4.5C18.076 4.55425 18.5235 4.77125 18.8626 5.12387Z`,stroke:`currentColor`}),_jsx(`path`,{d:`M12.9623 12.1899L12.1893 12.9629C12.0808 13.0579 11.9045 13.0579 11.8095 12.9629L11.0365 12.1899C10.928 12.0814 10.928 11.9186 11.0365 11.8101L11.8095 11.0371C11.918 10.9286 12.0808 10.9286 12.1893 11.0371L12.9623 11.8101C13.0708 11.9186 13.0708 12.0814 12.9623 12.1899Z`,fill:`currentColor`})]}),_jsx(`circle`,{className:`dbt-health-ring`,cx:`23.6`,cy:`21.0`,r:`6.65`}),_jsx(`g`,{className:`dbt-health-good`,transform:`translate(15.950 13.350) scale(0.6375)`,children:_jsx(`path`,{d:`M17 3.34a10 10 0 1 1 -14.995 8.984l-.005 -.324l.005 -.324a10 10 0 0 1 14.995 -8.336zm-1.293 5.953a1 1 0 0 0 -1.32 -.083l-.094 .083l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.403 1.403l.083 .094l2 2l.094 .083a1 1 0 0 0 1.226 0l.094 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z`,fill:`currentColor`})})]})};const DbtHealthWarningIcon=()=>{return _jsxs(`svg`,{className:`icon-position`,viewBox:`3.5 3.5 27.5 25`,height:`1.5em`,width:`1.65em`,\"aria-hidden\":`true`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsxs(`g`,{className:`dbt-health-mark`,fill:`none`,strokeWidth:`2`,children:[_jsx(`path`,{d:`M18.8626 5.12387C19.2152 5.46293 19.4457 5.91049 19.5 6.39873C19.5 6.60217 19.4457 6.7378 19.3237 6.99548C19.2016 7.25317 17.6962 9.85715 17.2487 10.5759C16.991 10.9964 16.8553 11.4982 16.8553 11.9864C16.8553 12.4883 16.991 12.9765 17.2487 13.3969C17.6962 14.1157 19.2016 16.7333 19.3237 16.991C19.4457 17.2487 19.5 17.3707 19.5 17.5741C19.4457 18.0624 19.2288 18.5099 18.8761 18.8354C18.5371 19.1881 18.0895 19.4186 17.6148 19.4593C17.4114 19.4593 17.2758 19.4051 17.0316 19.283C16.7875 19.1609 14.1293 17.6962 13.4105 17.2487C13.3562 17.2215 13.302 17.1808 13.2342 17.1537L10.142 15.7881C10.0418 16.2789 10.0606 16.3806 10.5488 16.8553C10.6438 16.9503 10.7387 17.0316 10.8472 17.113C10.7658 17.1537 10.6709 17.1944 10.5895 17.2487C9.8707 17.6962 7.25317 19.2016 6.99548 19.3237C6.7378 19.4457 6.61573 19.5 6.39873 19.5C5.91049 19.4457 5.46293 19.2288 5.13743 18.8761C4.78481 18.5371 4.55425 18.0895 4.5 17.6013C4.51356 17.3978 4.56781 17.1944 4.67631 17.0181C4.79837 16.7604 6.3038 14.1429 6.75135 13.4241C7.00905 13.0036 7.14467 12.5154 7.14467 12.0136C7.14467 11.5117 7.00905 11.0235 6.75135 10.6031C6.3038 9.85715 4.78481 7.2396 4.67631 6.98192C4.56781 6.8056 4.51356 6.60217 4.5 6.39873C4.55425 5.91049 4.77125 5.46293 5.12387 5.12387C5.46293 4.77125 5.91049 4.55425 6.39873 4.5C6.60217 4.51356 6.8056 4.56781 6.99548 4.67631C7.21248 4.77125 9.12477 5.88336 10.142 6.48012L10.3725 6.61573C10.4539 6.66998 10.5217 6.71067 10.5759 6.7378L10.6845 6.8056L13.6812 8.3724C13.8329 7.62172 13.8038 7.38878 13.1528 6.88698C13.2342 6.8463 13.3291 6.8056 13.4105 6.75135C14.1293 6.3038 16.7468 4.78481 17.0045 4.67631C17.1808 4.56781 17.3843 4.51356 17.6013 4.5C18.076 4.55425 18.5235 4.77125 18.8626 5.12387Z`,stroke:`currentColor`}),_jsx(`path`,{d:`M12.9623 12.1899L12.1893 12.9629C12.0808 13.0579 11.9045 13.0579 11.8095 12.9629L11.0365 12.1899C10.928 12.0814 10.928 11.9186 11.0365 11.8101L11.8095 11.0371C11.918 10.9286 12.0808 10.9286 12.1893 11.0371L12.9623 11.8101C13.0708 11.9186 13.0708 12.0814 12.9623 12.1899Z`,fill:`currentColor`})]}),_jsx(`circle`,{className:`dbt-health-ring`,cx:`23.6`,cy:`21.0`,r:`6.65`}),_jsx(`g`,{className:`dbt-health-warning`,transform:`translate(15.950 13.350) scale(0.6375)`,children:_jsx(`path`,{d:`M12 1.67c.955 0 1.845 .467 2.39 1.247l.105 .16l8.114 13.548a2.914 2.914 0 0 1 -2.307 4.363l-.195 .008h-16.225a2.914 2.914 0 0 1 -2.582 -4.2l.099 -.185l8.11 -13.538a2.914 2.914 0 0 1 2.491 -1.403zm.01 13.33l-.127 .007a1 1 0 0 0 0 1.986l.117 .007l.127 -.007a1 1 0 0 0 0 -1.986l-.117 -.007zm-.01 -7a1 1 0 0 0 -.993 .883l-.007 .117v4l.007 .117a1 1 0 0 0 1.986 0l.007 -.117v-4l-.007 -.117a1 1 0 0 0 -.993 -.883z`,fill:`currentColor`})})]})};const DbtHealthFailureIcon=()=>{return _jsxs(`svg`,{className:`icon-position`,viewBox:`3.5 3.5 27.5 25`,height:`1.5em`,width:`1.65em`,\"aria-hidden\":`true`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsxs(`g`,{className:`dbt-health-mark`,fill:`none`,strokeWidth:`2`,children:[_jsx(`path`,{d:`M18.8626 5.12387C19.2152 5.46293 19.4457 5.91049 19.5 6.39873C19.5 6.60217 19.4457 6.7378 19.3237 6.99548C19.2016 7.25317 17.6962 9.85715 17.2487 10.5759C16.991 10.9964 16.8553 11.4982 16.8553 11.9864C16.8553 12.4883 16.991 12.9765 17.2487 13.3969C17.6962 14.1157 19.2016 16.7333 19.3237 16.991C19.4457 17.2487 19.5 17.3707 19.5 17.5741C19.4457 18.0624 19.2288 18.5099 18.8761 18.8354C18.5371 19.1881 18.0895 19.4186 17.6148 19.4593C17.4114 19.4593 17.2758 19.4051 17.0316 19.283C16.7875 19.1609 14.1293 17.6962 13.4105 17.2487C13.3562 17.2215 13.302 17.1808 13.2342 17.1537L10.142 15.7881C10.0418 16.2789 10.0606 16.3806 10.5488 16.8553C10.6438 16.9503 10.7387 17.0316 10.8472 17.113C10.7658 17.1537 10.6709 17.1944 10.5895 17.2487C9.8707 17.6962 7.25317 19.2016 6.99548 19.3237C6.7378 19.4457 6.61573 19.5 6.39873 19.5C5.91049 19.4457 5.46293 19.2288 5.13743 18.8761C4.78481 18.5371 4.55425 18.0895 4.5 17.6013C4.51356 17.3978 4.56781 17.1944 4.67631 17.0181C4.79837 16.7604 6.3038 14.1429 6.75135 13.4241C7.00905 13.0036 7.14467 12.5154 7.14467 12.0136C7.14467 11.5117 7.00905 11.0235 6.75135 10.6031C6.3038 9.85715 4.78481 7.2396 4.67631 6.98192C4.56781 6.8056 4.51356 6.60217 4.5 6.39873C4.55425 5.91049 4.77125 5.46293 5.12387 5.12387C5.46293 4.77125 5.91049 4.55425 6.39873 4.5C6.60217 4.51356 6.8056 4.56781 6.99548 4.67631C7.21248 4.77125 9.12477 5.88336 10.142 6.48012L10.3725 6.61573C10.4539 6.66998 10.5217 6.71067 10.5759 6.7378L10.6845 6.8056L13.6812 8.3724C13.8329 7.62172 13.8038 7.38878 13.1528 6.88698C13.2342 6.8463 13.3291 6.8056 13.4105 6.75135C14.1293 6.3038 16.7468 4.78481 17.0045 4.67631C17.1808 4.56781 17.3843 4.51356 17.6013 4.5C18.076 4.55425 18.5235 4.77125 18.8626 5.12387Z`,stroke:`currentColor`}),_jsx(`path`,{d:`M12.9623 12.1899L12.1893 12.9629C12.0808 13.0579 11.9045 13.0579 11.8095 12.9629L11.0365 12.1899C10.928 12.0814 10.928 11.9186 11.0365 11.8101L11.8095 11.0371C11.918 10.9286 12.0808 10.9286 12.1893 11.0371L12.9623 11.8101C13.0708 11.9186 13.0708 12.0814 12.9623 12.1899Z`,fill:`currentColor`})]}),_jsx(`circle`,{className:`dbt-health-ring`,cx:`23.6`,cy:`21.0`,r:`6.65`}),_jsx(`g`,{className:`dbt-health-failure`,transform:`translate(15.950 13.350) scale(0.6375)`,children:_jsx(`path`,{d:`M17 3.34a10 10 0 1 1 -14.995 8.984l-.005 -.324l.005 -.324a10 10 0 0 1 14.995 -8.336zm-6.489 5.8a1 1 0 0 0 -1.218 1.567l1.292 1.293l-1.292 1.293l-.083 .094a1 1 0 0 0 1.497 1.32l1.293 -1.292l1.293 1.292l.094 .083a1 1 0 0 0 1.32 -1.497l-1.292 -1.293l1.292 -1.293l.083 -.094a1 1 0 0 0 -1.497 -1.32l-1.293 1.292l-1.293 -1.292l-.094 -.083z`,fill:`currentColor`})})]})};const DbtHealthUnknownIcon=()=>{return _jsxs(`svg`,{className:`icon-position`,viewBox:`3.5 3.5 27.5 25`,height:`1.5em`,width:`1.65em`,\"aria-hidden\":`true`,xmlns:`http://www.w3.org/2000/svg`,children:[_jsxs(`g`,{className:`dbt-health-mark`,fill:`none`,strokeWidth:`2`,children:[_jsx(`path`,{d:`M18.8626 5.12387C19.2152 5.46293 19.4457 5.91049 19.5 6.39873C19.5 6.60217 19.4457 6.7378 19.3237 6.99548C19.2016 7.25317 17.6962 9.85715 17.2487 10.5759C16.991 10.9964 16.8553 11.4982 16.8553 11.9864C16.8553 12.4883 16.991 12.9765 17.2487 13.3969C17.6962 14.1157 19.2016 16.7333 19.3237 16.991C19.4457 17.2487 19.5 17.3707 19.5 17.5741C19.4457 18.0624 19.2288 18.5099 18.8761 18.8354C18.5371 19.1881 18.0895 19.4186 17.6148 19.4593C17.4114 19.4593 17.2758 19.4051 17.0316 19.283C16.7875 19.1609 14.1293 17.6962 13.4105 17.2487C13.3562 17.2215 13.302 17.1808 13.2342 17.1537L10.142 15.7881C10.0418 16.2789 10.0606 16.3806 10.5488 16.8553C10.6438 16.9503 10.7387 17.0316 10.8472 17.113C10.7658 17.1537 10.6709 17.1944 10.5895 17.2487C9.8707 17.6962 7.25317 19.2016 6.99548 19.3237C6.7378 19.4457 6.61573 19.5 6.39873 19.5C5.91049 19.4457 5.46293 19.2288 5.13743 18.8761C4.78481 18.5371 4.55425 18.0895 4.5 17.6013C4.51356 17.3978 4.56781 17.1944 4.67631 17.0181C4.79837 16.7604 6.3038 14.1429 6.75135 13.4241C7.00905 13.0036 7.14467 12.5154 7.14467 12.0136C7.14467 11.5117 7.00905 11.0235 6.75135 10.6031C6.3038 9.85715 4.78481 7.2396 4.67631 6.98192C4.56781 6.8056 4.51356 6.60217 4.5 6.39873C4.55425 5.91049 4.77125 5.46293 5.12387 5.12387C5.46293 4.77125 5.91049 4.55425 6.39873 4.5C6.60217 4.51356 6.8056 4.56781 6.99548 4.67631C7.21248 4.77125 9.12477 5.88336 10.142 6.48012L10.3725 6.61573C10.4539 6.66998 10.5217 6.71067 10.5759 6.7378L10.6845 6.8056L13.6812 8.3724C13.8329 7.62172 13.8038 7.38878 13.1528 6.88698C13.2342 6.8463 13.3291 6.8056 13.4105 6.75135C14.1293 6.3038 16.7468 4.78481 17.0045 4.67631C17.1808 4.56781 17.3843 4.51356 17.6013 4.5C18.076 4.55425 18.5235 4.77125 18.8626 5.12387Z`,stroke:`currentColor`}),_jsx(`path`,{d:`M12.9623 12.1899L12.1893 12.9629C12.0808 13.0579 11.9045 13.0579 11.8095 12.9629L11.0365 12.1899C10.928 12.0814 10.928 11.9186 11.0365 11.8101L11.8095 11.0371C11.918 10.9286 12.0808 10.9286 12.1893 11.0371L12.9623 11.8101C13.0708 11.9186 13.0708 12.0814 12.9623 12.1899Z`,fill:`currentColor`})]}),_jsx(`circle`,{className:`dbt-health-ring`,cx:`23.6`,cy:`21.0`,r:`6.65`}),_jsx(`g`,{className:`dbt-health-unknown`,transform:`translate(15.950 13.350) scale(0.6375)`,children:_jsx(`path`,{d:`M12 2c5.523 0 10 4.477 10 10a10 10 0 0 1 -19.995 .324l-.005 -.324l.004 -.28c.148 -5.393 4.566 -9.72 9.996 -9.72zm0 13a1 1 0 0 0 -.993 .883l-.007 .117l.007 .127a1 1 0 0 0 1.986 0l.007 -.117l-.007 -.127a1 1 0 0 0 -.993 -.883zm1.368 -6.673a2.98 2.98 0 0 0 -3.631 .728a1 1 0 0 0 1.44 1.383l.171 -.18a.98 .98 0 0 1 1.11 -.15a1 1 0 0 1 -.34 1.886l-.232 .012a1 1 0 0 0 .111 1.994a3 3 0 0 0 1.371 -5.673z`,fill:`currentColor`})})]})};const SideBySide=({src,alt,media,caption,title,children,reverse=false,height=220,divider=false})=>{const classNames=[`side-by-side`];if(reverse)classNames.push(`side-by-side-reverse`);if(divider)classNames.push(`side-by-side-divider`);return _jsxs(`div`,{className:classNames.join(` `),style:{\"--side-by-side-height\":`${height}px`},children:[_jsxs(`div`,{className:`side-by-side-body`,children:[title\u0026\u0026_jsx(`p`,{className:`side-by-side-title`,children:title}),children]}),_jsxs(`figure`,{className:`side-by-side-media`,children:[media||_jsx(`img`,{src,alt}),caption\u0026\u0026_jsx(`figcaption`,{className:`side-by-side-caption`,children:caption})]})]})};function _createMdxContent(props){const _components={a:`a`,blockquote:`blockquote`,code:`code`,em:`em`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Columns,Frame,Heading,Icon,Note,OptimizedImage,Step,Steps,Tab,Table,Tabs,Tip,Warning,_MdxComponentBoundary}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Columns)_missingMdxReference(`Columns`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Icon)_missingMdxReference(`Icon`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Apps let you go beyond dashboards. Where a dashboard arranges charts on a grid, an app is a fully custom HTML and JavaScript interface — with its own layout, components, and interactivity — powered by live queries from your workbook.`}),`\n`,_jsx(_components.p,{children:`The data behind an app is the same governed data that powers everything else in Omni. Each query the app reads lives in the workbook, where anyone with access can open it, inspect the SQL and semantic model behind it, and tune it. The app is a new way to present and interact with those results: all the flexibility of an AI-generated artifact, hosted, shareable, and governed in Omni.`}),`\n`,_jsxs(Columns,{cols:2,children:[_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/omni-e7402367/ayNGVuPp1_ucJAT6/visualize-present/images/app-exec-summary.png?fit=max\u0026auto=format\u0026n=ayNGVuPp1_ucJAT6\u0026q=85\u0026s=7eaa433c9eaafc74e7a3863c1c09db23`,style:{width:`auto`,height:`250px`},alt:`Diagram showing the architecture of the system`,\"data-og-width\":`1106`,width:`1106`,\"data-og-height\":`782`,height:`782`,\"data-path\":`visualize-present/images/app-exec-summary.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/omni-e7402367/ayNGVuPp1_ucJAT6/visualize-present/images/app-exec-summary.png?w=280\u0026fit=max\u0026auto=format\u0026n=ayNGVuPp1_ucJAT6\u0026q=85\u0026s=af3c0e67da1eeecccdaf8db85dd17ca1 280w, https://mintcdn.com/omni-e7402367/ayNGVuPp1_ucJAT6/visualize-present/images/app-exec-summary.png?w=560\u0026fit=max\u0026auto=format\u0026n=ayNGVuPp1_ucJAT6\u0026q=85\u0026s=4d5773962ddc6943a50f61e2c2f3ac7b 560w, https://mintcdn.com/omni-e7402367/ayNGVuPp1_ucJAT6/visualize-present/images/app-exec-summary.png?w=840\u0026fit=max\u0026auto=format\u0026n=ayNGVuPp1_ucJAT6\u0026q=85\u0026s=911068360423ad4ba0d7f34f3dcde8b7 840w, https://mintcdn.com/omni-e7402367/ayNGVuPp1_ucJAT6/visualize-present/images/app-exec-summary.png?w=1100\u0026fit=max\u0026auto=format\u0026n=ayNGVuPp1_ucJAT6\u0026q=85\u0026s=e9ec09e65d4e6b1387b9f61eef7feb3a 1100w, https://mintcdn.com/omni-e7402367/ayNGVuPp1_ucJAT6/visualize-present/images/app-exec-summary.png?w=1650\u0026fit=max\u0026auto=format\u0026n=ayNGVuPp1_ucJAT6\u0026q=85\u0026s=f3f4018cd562659c8e885a07f9efb612 1650w, https://mintcdn.com/omni-e7402367/ayNGVuPp1_ucJAT6/visualize-present/images/app-exec-summary.png?w=2500\u0026fit=max\u0026auto=format\u0026n=ayNGVuPp1_ucJAT6\u0026q=85\u0026s=b5c343b591b67c95b04b9adf7a40a797 2500w`})}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/omni-e7402367/ayNGVuPp1_ucJAT6/visualize-present/images/app-scenario-lab.png?fit=max\u0026auto=format\u0026n=ayNGVuPp1_ucJAT6\u0026q=85\u0026s=49100990d51100161369e27d75ac1024`,style:{width:`auto`,height:`250px`},alt:`Diagram showing the architecture of the system`,\"data-og-width\":`1275`,width:`1275`,\"data-og-height\":`943`,height:`943`,\"data-path\":`visualize-present/images/app-scenario-lab.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/omni-e7402367/ayNGVuPp1_ucJAT6/visualize-present/images/app-scenario-lab.png?w=280\u0026fit=max\u0026auto=format\u0026n=ayNGVuPp1_ucJAT6\u0026q=85\u0026s=a0800e91e2dd371792802e01dd2a9e04 280w, https://mintcdn.com/omni-e7402367/ayNGVuPp1_ucJAT6/visualize-present/images/app-scenario-lab.png?w=560\u0026fit=max\u0026auto=format\u0026n=ayNGVuPp1_ucJAT6\u0026q=85\u0026s=039a4f004981a344df9275d6f581dc1c 560w, https://mintcdn.com/omni-e7402367/ayNGVuPp1_ucJAT6/visualize-present/images/app-scenario-lab.png?w=840\u0026fit=max\u0026auto=format\u0026n=ayNGVuPp1_ucJAT6\u0026q=85\u0026s=fdc40f63f0cd7ef0d59f62096b64865b 840w, https://mintcdn.com/omni-e7402367/ayNGVuPp1_ucJAT6/visualize-present/images/app-scenario-lab.png?w=1100\u0026fit=max\u0026auto=format\u0026n=ayNGVuPp1_ucJAT6\u0026q=85\u0026s=dfd5e1668814b531795b9493f57b5596 1100w, https://mintcdn.com/omni-e7402367/ayNGVuPp1_ucJAT6/visualize-present/images/app-scenario-lab.png?w=1650\u0026fit=max\u0026auto=format\u0026n=ayNGVuPp1_ucJAT6\u0026q=85\u0026s=52a6c8fb537144b87e2a7c7124d62fd3 1650w, https://mintcdn.com/omni-e7402367/ayNGVuPp1_ucJAT6/visualize-present/images/app-scenario-lab.png?w=2500\u0026fit=max\u0026auto=format\u0026n=ayNGVuPp1_ucJAT6\u0026q=85\u0026s=8bdcd260eb9aa0117eca5e0a5d2ae33a 2500w`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`enabling-apps`,children:`Enabling apps`}),`\n`,_jsxs(_components.p,{children:[`Apps are enabled by default. An `,_jsx(_components.strong,{children:`Organization Admin`}),` can toggle the `,_jsx(_components.strong,{children:`Enable apps`}),` setting in `,_jsx(_components.a,{href:`/administration/settings/app-policy`,children:_jsx(_components.strong,{children:`Settings > Apps`})}),` to disable them if needed.`]}),`\n`,_jsxs(_components.p,{children:[`Additionally, Organization Admins can restrict individual users or groups from creating apps through a granular permission on a `,_jsx(_components.a,{href:`/administration/users/custom-roles#permissions-reference`,children:`custom role`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`The same tab carries the `,_jsx(_components.a,{href:`/administration/settings/app-policy#external-source-policy`,children:`external source policy`}),`, which sets the organization-wide ceiling on the external hosts any app may load resources from.`]}),`\n`,_jsx(Heading,{level:`2`,id:`when-to-use-apps`,children:`When to use apps`}),`\n`,_jsx(_components.p,{children:`Apps are the recommended content type to choose. Reach for a dashboard when you need a fully drag-and-drop creation process.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Organization Admins`}),` can set apps as the default presentation type across your organization with the `,_jsx(_components.a,{href:`/administration/settings/app-policy#prefer-apps`,children:_jsx(_components.strong,{children:`Prefer apps`})}),` setting.`]}),`\n`,_jsx(Heading,{level:`2`,id:`creating-apps`,children:`Creating apps`}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Enable apps`}),` setting in `,_jsx(_components.a,{href:`/administration/settings/app-policy`,children:_jsx(_components.strong,{children:`Settings > Apps`})}),` must be enabled to create apps.`]})}),`\n`,_jsx(_components.p,{children:`Every app is paired with a workbook. The workbook holds the queries and the app is the custom interface on top of them.`}),`\n`,_jsxs(Tabs,{sync:false,children:[_jsxs(Tab,{title:`Omni Agent`,icon:`comment`,id:`chat-add-app`,children:[_jsx(_MdxComponentBoundary,{name:`SideBySide`,children:_jsxs(SideBySide,{src:`/visualize-present/images/app-create.png`,alt:`Describe the app you want to the Omni agent`,reverse:true,children:[_jsxs(_components.p,{children:[`The fastest way to build an app is to describe what you want to the `,_jsx(_components.a,{href:`/ai/chat`,children:`Omni Agent`}),`. For example:`]}),_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:_jsx(_components.em,{children:`“Build a sales leaderboard with a podium for the top three reps by quota attainment and a searchable ranking for everyone else”`})}),`\n`]})]})}),_jsx(_components.p,{children:`You can do this:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`In a chat`}),` — Describe the interface and the data it should show in the Omni Agent. The agent generates each query the app needs against your model, writes the HTML, and wires it to the data. When it’s done, the app opens in the editor, where you can keep iterating in chat or by hand.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`In a workbook`}),` — Ask the `,_jsx(_components.a,{href:`/ai/queries`,children:`Omni Agent`}),` to turn your current workbook into an app. The app attaches to that workbook and reads its existing tabs. The agent uses every query tab unless you ask it to use a specific subset, and reports which tabs it skipped. If you reference a tab name that doesn’t exist, the tool will fail and list the real tab names.`]}),`\n`,_jsxs(_components.p,{children:[`If the workbook’s tabs are built on more than one model (see `,_jsx(_components.a,{href:`/analyze-explore/cross-model-tabs`,children:`cross model tabs`}),`), the agent can switch between those models while building or editing the app.`]}),`\n`,_jsxs(_components.p,{children:[`If your workbook contains a `,_jsx(_components.a,{href:`/analyze-explore/cross-model-tabs`,children:`cross model tab`}),`, the agent can switch between the models used while building the app. `,_jsx(_components.strong,{children:`Note`}),`: Creating a new cross model query or making changes to one inside an app may not work correctly yet.`]}),`\n`]}),`\n`]}),_jsxs(_components.p,{children:[`If the workbook hasn’t been saved yet, the agent saves it first — to your `,_jsx(_components.a,{href:`/content/navigate`,children:_jsx(_components.strong,{children:`My documents`})}),` folder if your organization’s `,_jsx(_components.a,{href:`/administration/users/settings#personal-content`,children:`Allow personal content`}),` setting is enabled for you, or otherwise to your organization’s shared `,_jsx(_components.a,{href:`/content/navigate`,children:_jsx(_components.strong,{children:`Hub`})}),` or your embed entity’s shared folder (embed users only), as long as you have permission to save there. If none of these destinations is available, the agent reports that it can’t save the workbook.`]})]}),_jsxs(Tab,{title:`Omni UI`,icon:`window-maximize`,id:`ui-add-app`,children:[_jsx(_components.p,{children:`To start from scratch, you can:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Create a new app and workbook`}),` - Click the `,_jsx(_components.strong,{children:`New`}),` button in the sidebar, then select `,_jsx(_components.strong,{children:`App`}),` and the model to use for the document. Omni creates a new workbook and app with a starter template you can build on in the editor.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Add an app to an existing workbook`}),` - In a draft workbook, click the `,_jsx(_components.strong,{children:`Presentation`}),` button, select `,_jsx(_components.strong,{children:`App`}),`, then confirm. Omni creates the app with a starter template you can build on in the editor.`]}),`\n`]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`editing-apps`,children:`Editing apps`}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Users with `,_jsx(_components.strong,{children:`Editor`}),` permissions and higher can view all the changes to an app with `,_jsx(_components.strong,{children:`File > History`}),`. See `,_jsx(_components.a,{href:`/content/develop/drafts#history`,children:`Viewing draft changes`}),` for more information.`]})}),`\n`,_jsxs(Tabs,{sync:false,children:[_jsxs(Tab,{title:`Omni Agent`,icon:`comment`,id:`agent-edit`,children:[_jsxs(_components.p,{children:[`Open an app and click `,_jsx(_components.strong,{children:`Edit`}),` in the top right corner of the workbook to enter a draft. If you have access to the Omni Agent, the chat split-view opens alongside the app preview so you can iterate with AI as you go.`]}),_jsx(Frame,{caption:`Use the Omni Agent to make changes to the app`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/omni-e7402367/ZtppH87R6L0A4nvx/visualize-present/images/app-editing-with-chat.png?fit=max\u0026auto=format\u0026n=ZtppH87R6L0A4nvx\u0026q=85\u0026s=bca6f5257c11feb97a0dd8e9ac990d4b`,alt:`Editing an app in Omni: Omni Agent chat on the left and a preview of the app on the right`,className:`mint-w-[550px] mint-h-auto`,\"data-og-width\":`2210`,width:`2210`,\"data-og-height\":`1612`,height:`1612`,\"data-path\":`visualize-present/images/app-editing-with-chat.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/omni-e7402367/ZtppH87R6L0A4nvx/visualize-present/images/app-editing-with-chat.png?w=280\u0026fit=max\u0026auto=format\u0026n=ZtppH87R6L0A4nvx\u0026q=85\u0026s=4ecbb8cae23fa68a17416cd9a13f9ef4 280w, https://mintcdn.com/omni-e7402367/ZtppH87R6L0A4nvx/visualize-present/images/app-editing-with-chat.png?w=560\u0026fit=max\u0026auto=format\u0026n=ZtppH87R6L0A4nvx\u0026q=85\u0026s=05309f01d5593d5548bcd081df042f52 560w, https://mintcdn.com/omni-e7402367/ZtppH87R6L0A4nvx/visualize-present/images/app-editing-with-chat.png?w=840\u0026fit=max\u0026auto=format\u0026n=ZtppH87R6L0A4nvx\u0026q=85\u0026s=6a4782e4e116442312aae21d1f7c34c0 840w, https://mintcdn.com/omni-e7402367/ZtppH87R6L0A4nvx/visualize-present/images/app-editing-with-chat.png?w=1100\u0026fit=max\u0026auto=format\u0026n=ZtppH87R6L0A4nvx\u0026q=85\u0026s=804e79cbf063befe8e2212741fe5e423 1100w, https://mintcdn.com/omni-e7402367/ZtppH87R6L0A4nvx/visualize-present/images/app-editing-with-chat.png?w=1650\u0026fit=max\u0026auto=format\u0026n=ZtppH87R6L0A4nvx\u0026q=85\u0026s=b3538d6774d9cf8b7f9e85283d982e08 1650w, https://mintcdn.com/omni-e7402367/ZtppH87R6L0A4nvx/visualize-present/images/app-editing-with-chat.png?w=2500\u0026fit=max\u0026auto=format\u0026n=ZtppH87R6L0A4nvx\u0026q=85\u0026s=474160f12d85bdfb65d78ce63cc8c623 2500w`})}),_jsx(_components.p,{children:`When you ask the agent to change an app, it makes targeted edits by locating the exact snippet in the code and only modifying the relevant portions. Each change appears in chat as a diff preview showing precisely what changed.`}),_jsx(_components.p,{children:`If a partial edit can’t be applied — for example, if the target code has changed — the agent will retry with more context or, as a last resort, rewrite the affected section of HTML.`}),_jsx(_components.p,{children:`The agent can also automatically detect and fix runtime errors in the app while you’re working on a draft. This is possible only while you’re editing the app in a draft.`})]}),_jsxs(Tab,{title:`Omni UI`,icon:`window-maximize`,id:`ui-edit`,children:[_jsx(Note,{children:_jsx(_components.p,{children:`Elements backed by query data can only be edited using the Omni Agent.`})}),_jsx(_components.p,{children:`To manually edit an element in the app:`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:_jsx(_MdxComponentBoundary,{name:`AppAdjustIcon`,children:_jsx(AppAdjustIcon,{label:`Adjust`})})}),` in the app toolbar.`]}),`\n`,_jsxs(_components.li,{children:[`Hover over an element and click to select it. To select multiple elements, use `,_jsx(_components.code,{children:`Command + Click`}),` (Mac) or `,_jsx(_components.code,{children:`Shift + Click`}),` (Windows). If an element can’t be manually edited, you won’t be able to select it.`]}),`\n`,_jsx(_components.li,{children:`A menu with style and formatting options displays:`}),`\n`]}),_jsx(Frame,{caption:`Quickly change text formatting and element styles`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/omni-e7402367/ZtppH87R6L0A4nvx/visualize-present/images/apps-adjust-text-element.png?fit=max\u0026auto=format\u0026n=ZtppH87R6L0A4nvx\u0026q=85\u0026s=e06223ccc1bc923535ba988a74dd8933`,alt:`Text formatting options menu that displays in Adjust mode in Omni apps`,className:`mint-w-[450px] mint-h-auto`,\"data-og-width\":`880`,width:`880`,\"data-og-height\":`332`,height:`332`,\"data-path\":`visualize-present/images/apps-adjust-text-element.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/omni-e7402367/ZtppH87R6L0A4nvx/visualize-present/images/apps-adjust-text-element.png?w=280\u0026fit=max\u0026auto=format\u0026n=ZtppH87R6L0A4nvx\u0026q=85\u0026s=f348c4a8d3268f53cdf5d30e6b4cb77d 280w, https://mintcdn.com/omni-e7402367/ZtppH87R6L0A4nvx/visualize-present/images/apps-adjust-text-element.png?w=560\u0026fit=max\u0026auto=format\u0026n=ZtppH87R6L0A4nvx\u0026q=85\u0026s=34bd6d47688fbf4a1d27d571e3bd0c1a 560w, https://mintcdn.com/omni-e7402367/ZtppH87R6L0A4nvx/visualize-present/images/apps-adjust-text-element.png?w=840\u0026fit=max\u0026auto=format\u0026n=ZtppH87R6L0A4nvx\u0026q=85\u0026s=6aad9b8c1df50f1b164caa0b7e3a0b8b 840w, https://mintcdn.com/omni-e7402367/ZtppH87R6L0A4nvx/visualize-present/images/apps-adjust-text-element.png?w=1100\u0026fit=max\u0026auto=format\u0026n=ZtppH87R6L0A4nvx\u0026q=85\u0026s=b494d96d53ecaf5c140946ca6dd3c4cd 1100w, https://mintcdn.com/omni-e7402367/ZtppH87R6L0A4nvx/visualize-present/images/apps-adjust-text-element.png?w=1650\u0026fit=max\u0026auto=format\u0026n=ZtppH87R6L0A4nvx\u0026q=85\u0026s=e1289f98c16e51751e7586fc43716488 1650w, https://mintcdn.com/omni-e7402367/ZtppH87R6L0A4nvx/visualize-present/images/apps-adjust-text-element.png?w=2500\u0026fit=max\u0026auto=format\u0026n=ZtppH87R6L0A4nvx\u0026q=85\u0026s=acf44e5fa12671505a620c8fb3549b2d 2500w`})}),_jsxs(_components.ol,{start:`4`,children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`For text elements`}),`, update the text or change its formatting or styles. For other element types - for example, input elements - you can only change how the element’s text is formatted and the styles applied to the element overall.`]}),`\n`,_jsxs(_components.li,{children:[`When finished, click the `,_jsx(Icon,{icon:`square-check`,iconType:`solid`,className:`icons`}),` button on the right side of the toolbar to save your changes.`]}),`\n`]})]}),_jsxs(Tab,{title:`API`,icon:`cloud`,id:`api-edit`,children:[_jsxs(_components.p,{children:[`Use the `,_jsx(_components.a,{href:`/api/apps/edit-app-content-on-a-draft`,children:`Edit app content on a draft`}),` endpoint to edit an app using the API:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`15`,language:`http`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`http`,children:_jsxs(_components.code,{language:`http`,numberOfLines:`15`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --request`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` PATCH`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--url `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`https://{your-omni-org}.omniapp.co/api/v2/documents/{documentId}/draft/{draftId}/app`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--header `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Authorization: Bearer {token}'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--header `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Content-Type: application/json'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--data `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`{`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"htmlEdits\": [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"replace\": \"omni-button\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"search\": \"button\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"replaceAll\": true`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'`})}),`\n`]})})})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`styling-apps`,children:`Styling apps`}),`\n`,_jsxs(_components.p,{children:[`Apps automatically have access to Omni’s design system CSS variables and your organization’s custom theme styles. This allows you to build interfaces that match Omni’s look and feel and your organization’s branding, with automatic support for light and dark mode. See `,_jsx(_components.a,{href:`/visualize-present/apps/styling`,children:`Styling apps`}),` for details.`]}),`\n`,_jsx(Heading,{level:`3`,id:`access-warnings`,children:`Access Warnings`}),`\n`,_jsxs(_components.p,{children:[`When editing a draft app, an `,_jsx(_components.strong,{children:`Access Warnings`}),` button may appear in the edit toolbar. This button shows which tiles will be restricted for Viewer and Restricted Querier users, helping you identify accessibility issues before publishing. When clicked, a popover lists the specific tiles that will be restricted and explains why users with limited permissions won’t be able to see them.`]}),`\n`,_jsx(_components.p,{children:`The Access Warnings button only appears when all of the following conditions are met:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`You are editing a draft app`}),`\n`,_jsx(_components.li,{children:`Restricted Queriers or Viewers have access to the underlying model`}),`\n`,_jsx(_components.li,{children:`One or more tiles in the app are restricted`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`You can also show or hide access warnings on a published app with the `,_jsx(_components.strong,{children:`View > Access warnings`}),` checkbox, the same as on a `,_jsx(_components.a,{href:`/share#access-warnings`,children:`dashboard`}),`: it opens the same `,_jsx(_components.strong,{children:`Access Warnings`}),` button and popover in the document header, and its default on a published app follows the organization’s `,_jsx(_components.a,{href:`/administration/content-permissions#access-warnings-when-viewing`,children:_jsx(_components.strong,{children:`Access warnings when viewing`})}),` setting.`]}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/share#access-warnings`,children:`Access warnings`}),` for more information about access warnings and how to resolve them.`]}),`\n`,_jsx(Heading,{level:`2`,id:`filters`,children:`Filters`}),`\n`,_jsxs(_components.p,{children:[`When an app applies dynamic filters to its data (for example, when you interact with custom controls in the app interface), those filter values are automatically saved to the URL as `,_jsx(_components.code,{children:`af--`}),` query parameters. This gives apps the same filter persistence that dashboards have.`]}),`\n`,_jsx(_components.p,{children:`Reloading the app, sharing the link, or opening it in a new tab will restore the filtered state. Using your browser’s back and forward buttons steps through filter changes, so you can navigate through the app’s filter history.`}),`\n`,_jsx(Heading,{level:`2`,id:`drilling`,children:`Drilling`}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`The document’s `,_jsxs(_components.a,{href:`/administration/content-permissions#default-document-abilities`,children:[_jsx(_components.strong,{children:`Drill`}),` setting`]}),` must be enabled to use drilling in an app.`]})}),`\n`,_jsxs(_components.p,{children:[`Apps can let people drill into a value to see the rows behind it, the same way they `,_jsx(_components.a,{href:`/guides/workbooks/custom-drill-fields`,children:`drill on a dashboard`}),`. Drilling works in standalone apps, `,_jsx(_components.a,{href:`#embedding-apps`,children:`embedded apps`}),`, and apps set as a homepage.`]}),`\n`,_jsxs(_components.p,{children:[`To add drilling to an app, describe it to the `,_jsx(_components.a,{href:`/ai/chat`,children:`Omni Agent`}),` when you build or edit the app. For example:`]}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:_jsx(_components.em,{children:`Let users click a cell in the orders table to see the order items behind it.`})}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The Omni Agent uses the available drill fields in the model to fulfill the request. To change the columns that appear when someone drills, refer to `,_jsx(_components.a,{href:`/guides/workbooks/custom-drill-fields`,children:`Customize drill fields`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`writing-data-back`,children:`Writing data back`}),`\n`,_jsx(_components.p,{children:`Apps can save data that people enter, in two ways:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.a,{href:`#writing-to-input-columns`,children:`Input columns`})}),` — Store values against the rows of an existing query, such as a status, a score, or a note per opportunity.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.a,{href:`#writing-to-tables`,children:`Tables`})}),` — Store a table the app owns, such as a project list, a log, or a set of targets. The app adds, edits, and removes rows on its own.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`writing-to-input-columns`,children:`Writing to input columns`}),`\n`,_jsxs(_components.p,{children:[`Apps can write values back to `,_jsx(_components.a,{href:`/analyze-explore/input-columns`,children:`input columns`}),` — the editable columns a workbook author adds to a query. This lets an app collect input from the people using it, such as a triage state, a review score, or a forecast override, and persist it the same way input columns persist everywhere else in Omni.`]}),`\n`,_jsxs(_components.p,{children:[`An app can write to an input column that already exists, or you can ask the `,_jsx(_components.a,{href:`/ai/chat`,children:`Omni Agent`}),` to create one in the same chat while you build or edit the app. The agent only sets up the column’s structure — name, data type, edit mode, and key columns — subject to the same `,_jsx(_components.a,{href:`/analyze-explore/input-columns#requirements`,children:`requirements`}),` as creating one from a workbook. Someone still has to enter values, either in the tab or through the app itself.`]}),`\n`,_jsxs(_components.p,{children:[`Describe the behavior to the `,_jsx(_components.a,{href:`/ai/chat`,children:`Omni Agent`}),` when you build or edit the app. For example:`]}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.p,{children:[`Show open opportunities as cards. Add a `,_jsx(_components.strong,{children:`Mark as in call`}),` button to each card that writes Yes to the `,_jsx(_components.code,{children:`in_call`}),` input column for that opportunity.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`The agent finds the input column on the query, sends the correct key values with each write, and surfaces failures in the app.`}),`\n`,_jsx(_components.p,{children:`Written values appear in the query results the next time the query runs.`}),`\n`,_jsxs(_components.p,{children:[`Writes respect the input column’s `,_jsx(_components.a,{href:`/analyze-explore/input-columns#edit-modes`,children:`edit mode`}),` and the viewer’s row-level data access, so an app can’t be used to write around either.`]}),`\n`,_jsx(Heading,{level:`3`,id:`writing-to-tables`,children:`Writing to tables`}),`\n`,_jsxs(_components.p,{children:[`Apps can also write to a table in the app’s workbook. Ask the `,_jsx(_components.a,{href:`/ai/chat`,children:`Omni Agent`}),` to create one — empty, or with starting rows — while you build or edit the app, and it creates the table, queries it, and wires up the writes. This leverages similar capabilities as uploading a CSV manually, but managed by the app. For example:`]}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`Build a project tracker backed by a table with name, owner, status, and due date. Let people add, edit, and delete projects.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`An app can also write to a `,_jsx(_components.a,{href:`/analyze-explore/data-input-csvs`,children:`data input table`}),` that’s already in the workbook.`]}),`\n`,_jsxs(_components.p,{children:[`To write to a table through an app, a person needs the same `,_jsx(_components.a,{href:`/analyze-explore/data-input-csvs#requirements`,children:`permissions`}),` as uploading data to the workbook.`]}),`\n`,_jsx(Heading,{level:`2`,id:`calling-the-omni-api`,children:`Calling the Omni API`}),`\n`,_jsx(_components.p,{children:`Apps can call a small allowlist of Omni API endpoints. This lets an app read Omni’s own metadata — the viewer’s identity, the content they can open, the models they can query — so you can build homepages, navigation portals, content catalogs, and data dictionaries that stay current on their own.`}),`\n`,_jsx(_components.p,{children:`Calls run with the permissions of the person viewing the app. Two people opening the same app can get different results, and an app can never show someone more than they could see in Omni itself.`}),`\n`,_jsx(_components.p,{children:`Access is read-only. An app can read metadata through these endpoints, but it can’t change anything with them.`}),`\n`,_jsx(Heading,{level:`3`,id:`what-you-can-build`,children:`What you can build`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Homepages and navigation`}),` — a branded landing page of the viewer’s favorites and recents, each tile linking into the real dashboard`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Curated content portals`}),` — a Verified reports hub filtered by label, or a per-team portal driven by folders`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Search experiences`}),` — a custom search box over everything the viewer can open, styled to your brand, for embeds where Omni’s own navigation isn’t available`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Data dictionaries`}),` — a self-serve catalog of every view, dimension, and measure in a model`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Live ERDs`}),` — an always-current diagram of topics and their join relationships, drawn from the model itself`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Describe what you want to the `,_jsx(_components.a,{href:`/ai/chat`,children:`Omni Agent`}),` and it will use these endpoints for you.`]}),`\n`,_jsx(Heading,{level:`3`,id:`api-endpoints`,children:`Available endpoints`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Endpoint`}),_jsx(_components.th,{children:`Returns`}),_jsx(_components.th,{children:`Parameters`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/api/v1/whoami`})}),_jsx(_components.td,{children:`The viewer’s identity, organization role, and resolved per-model permissions`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`modelId`}),` (comma-separated) to filter the models reported`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/api/v1/content/search`})}),_jsx(_components.td,{children:`Free-text search over the dashboards the viewer can open`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`q`}),`, `,_jsx(_components.code,{children:`limit`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/api/v1/folders`})}),_jsx(_components.td,{children:`The folders the viewer can see`}),_jsxs(_components.td,{children:[`Paging, `,_jsx(_components.code,{children:`sortField`}),` (`,_jsx(_components.code,{children:`name`}),`, `,_jsx(_components.code,{children:`path`}),`), `,_jsx(_components.code,{children:`include`}),` (`,_jsx(_components.code,{children:`labels`}),` only)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/api/v1/documents`})}),_jsx(_components.td,{children:`The published content the viewer can open — dashboards, workbooks, reports, and apps, each with its URL. The main browse-and-filter endpoint`}),_jsxs(_components.td,{children:[`Paging, `,_jsx(_components.code,{children:`folderId`}),`, `,_jsx(_components.code,{children:`creatorId`}),`, `,_jsx(_components.code,{children:`labels`}),`, `,_jsx(_components.code,{children:`include`}),` (`,_jsx(_components.code,{children:`_count`}),`, `,_jsx(_components.code,{children:`labels`}),`, `,_jsx(_components.code,{children:`onlyFavorites`}),`, `,_jsx(_components.code,{children:`onlySharedWithMe`}),`), `,_jsx(_components.code,{children:`sortField`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/api/v1/documents/\u003cidentifier>`})}),_jsx(_components.td,{children:`One published dashboard’s name, description, and query presentations`}),_jsx(_components.td,{children:`None`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`/api/v1/labels`}),`, `,_jsx(_components.code,{children:`/api/v1/labels/\u003cname>`})]}),_jsx(_components.td,{children:`Your organization’s label taxonomy, for browse and filter interfaces`}),_jsx(_components.td,{children:`None`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/api/v1/ai/branding`})}),_jsx(_components.td,{children:`The AI assistant’s name, logo URL, and copy, so an app can match Omni’s chrome`}),_jsx(_components.td,{children:`None`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/api/v1/models`})}),_jsx(_components.td,{children:`The models the viewer can see`}),_jsxs(_components.td,{children:[`Paging, `,_jsx(_components.code,{children:`sortField`}),` (`,_jsx(_components.code,{children:`name`}),`, `,_jsx(_components.code,{children:`modelKind`}),`, `,_jsx(_components.code,{children:`connectionId`}),`, `,_jsx(_components.code,{children:`baseModelId`}),`, `,_jsx(_components.code,{children:`createdAt`}),`, `,_jsx(_components.code,{children:`updatedAt`}),`)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`/api/v1/models/\u003cmodelId>/view`})}),_jsx(_components.td,{children:`Every view in the model with its dimensions, measures, and filter-only fields`}),_jsx(_components.td,{children:`None`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`/api/v1/models/\u003cmodelId>/topic`}),`, `,_jsx(_components.code,{children:`/api/v1/models/\u003cmodelId>/topic/\u003ctopicName>`})]}),_jsx(_components.td,{children:`The model’s topics; the detail response includes join relationships`}),_jsx(_components.td,{children:`None`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`inspecting-app-elements`,children:`Inspecting app elements`}),`\n`,_jsxs(_components.p,{children:[`When editing a draft app, an `,_jsx(_components.strong,{children:`Inspect`}),` button appears in the edit toolbar, allowing you to select elements in the running app and send them as annotated images to the Omni Agent for context. See `,_jsx(_components.a,{href:`/visualize-present/apps/inspect`,children:`Using the App inspector`}),` for more information.`]}),`\n`,_jsx(Heading,{level:`2`,id:`delivering-and-downloading-apps`,children:`Delivering and downloading apps`}),`\n`,_jsxs(_components.p,{children:[`A published, viewable app can be downloaded as a PNG, PDF, Excel workbook, or zipped CSVs from `,_jsx(_components.strong,{children:`File > Download`}),`. See `,_jsx(_components.a,{href:`/visualize-present/apps/download`,children:`Downloading apps`}),` for details.`]}),`\n`,_jsxs(_components.p,{children:[`You can also schedule the delivery of an app to an `,_jsx(_components.a,{href:`/share/deliveries/email`,children:`email destinations`}),`, with more destination options coming soon. A delivery can `,_jsx(_components.a,{href:`/connect-data/user-selected-environments#pin-an-environment-on-a-schedule`,children:`pin a specific environment connection`}),`, so it always runs against the same data.`]}),`\n`,_jsxs(_components.p,{children:[`To create a delivery with `,_jsx(_components.a,{href:`/visualize-present/apps/index#filters`,children:`filters`}),`, set the filters in the app first, create the delivery, and check the saved filters in settings. After the delivery is saved, changes to the app’s filters do not affect the delivery.`]}),`\n`,_jsxs(_components.p,{children:[`App deliveries can also `,_jsx(_components.a,{href:`/share/deliveries#data-and-permissions-in-deliveries`,children:`personalize content`}),` with the recipient’s user attributes.`]}),`\n`,_jsx(Heading,{level:`2`,id:`settings`,children:`Settings`}),`\n`,_jsxs(_components.p,{children:[`Apps run in a sandboxed iframe with `,_jsx(_components.a,{href:`#security`,children:`strict security controls`}),` by default. App-level settings let you enable specific features on a per-app basis, giving you fine-grained control over what each app can do. For example, enabling app settings can allow you to:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Load resources like images and fonts from a list of allowed domains`}),`\n`,_jsx(_components.li,{children:`Render map tiles using keyless providers such as Carto`}),`\n`,_jsx(_components.li,{children:`Open links to external sites or navigate to other pages inside Omni`}),`\n`,_jsx(_components.li,{children:`Copy text or values to the clipboard from a button in the app`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/visualize-present/apps/settings`,children:`App settings`}),` for more information.`]}),`\n`,_jsx(Heading,{level:`2`,id:`embedding-apps`,children:`Embedding apps`}),`\n`,_jsxs(_components.p,{children:[`Apps can be embedded in your own product with the same `,_jsx(_components.a,{href:`/embed/setup/standard-sso`,children:`SSO embed`}),` flow used for dashboards and workbooks. Point `,_jsx(_components.a,{href:`/embed/setup/url-parameters/contentPath`,children:_jsx(_components.code,{children:`contentPath`})}),` at the app and everything else about the session — `,_jsx(_components.a,{href:`/embed/setup/url-parameters/mode`,children:`modes`}),`, user attributes, connection roles, filters — behaves as it does for a dashboard. Embedded apps also work with Omni’s `,_jsx(_components.a,{href:`/embed/events`,children:`embed events`}),`.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`You are responsible for the code in any app you embed. Omni does not review or validate app code. Before you embed an app, confirm your organization’s `,_jsx(_components.a,{href:`/administration/settings/app-policy#external-source-policy`,children:`external source policy`}),` — it governs which external hosts apps can reach.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`limitations`,children:`Limitations`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Apps support up to 100 wired queries per app`}),`. This limit applies to the total number of queries referenced in an app’s workbook.`]}),`\n`,_jsx(Heading,{level:`2`,id:`security`,children:`Security`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Apps run in a sandboxed iframe`,icon:`shield`,noAnchor:true,children:[_jsxs(_components.p,{children:[`Each app runs inside a sandboxed iframe that blocks outbound network requests. App code can’t call third-party services or open its own connection to your data — it only works with what Omni passes in, so there’s no route for it to send your data anywhere. `,_jsx(_components.a,{href:`#calling-the-omni-api`,children:`Omni API calls`}),` are no exception: the app names an endpoint and Omni makes the request on the server, against a fixed allowlist. No API key or credential ever reaches the app.`]}),_jsxs(_components.p,{children:[`Specific features that require widening the iframe’s security policy (such as loading map tiles, allowing navigation, or displaying externally-hosted images) can be enabled on a per-app basis through `,_jsx(_components.a,{href:`/visualize-present/apps/settings`,children:`app settings`}),`. These settings are off by default and must be explicitly enabled by an editor.`]}),_jsxs(_components.p,{children:[`However, inline images, video, and audio can be displayed or played without configuring a `,_jsx(_components.a,{href:`/visualize-present/apps/settings#configure-safe-domains`,children:`Safe domain allowlist`}),`. This includes inline base64 content (`,_jsx(_components.code,{children:`data:`}),` URIs) and canvas-generated or in-browser-recorded content (`,_jsx(_components.code,{children:`blob:`}),` URIs), as these are all rendered within the iframe without making network requests.`]})]}),_jsxs(Step,{title:`Data access stays governed`,icon:`lock`,noAnchor:true,children:[_jsx(_components.p,{children:`An app can’t query your warehouse directly. The only data it sees is the results of its workbook’s queries, which Omni passes into the iframe. Every app inherits the access rules already in place — connection permissions, the semantic model and data permissions, and content sharing all carry over.`}),_jsxs(_components.p,{children:[`The same holds for the ways an app reaches beyond its own query results. `,_jsx(_components.a,{href:`#writing-to-input-columns`,children:`Input column writes`}),` respect the column’s edit mode and the writer’s row-level data access. `,_jsx(_components.a,{href:`#writing-to-tables`,children:`Table writes`}),` require the same permissions as uploading data to the workbook, and only reach tables in the app’s own workbook. `,_jsx(_components.a,{href:`#calling-the-omni-api`,children:`Omni API calls`}),` run with the permissions of the person viewing the app, so two people can get different results from the same app, and an app can never widen anyone’s access.`]})]}),_jsx(Step,{title:`Only trusted libraries can load`,icon:`handshake`,noAnchor:true,children:_jsxs(_components.p,{children:[`Apps can load charting, styling, and font libraries from a short list of trusted CDNs, but nothing else. App editors can optionally configure `,_jsx(_components.a,{href:`/visualize-present/apps/settings#safe-domains`,children:`Safe domains`}),` to load resources from additional trusted hosts beyond the default CDNs, within whatever ceiling the organization’s `,_jsx(_components.a,{href:`/administration/settings/app-policy#external-source-policy`,children:`external source policy`}),` sets. Video and audio hosts work the same way as images: they load only from a host added to Safe domains.`]})})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`An app rendered inline through the Omni MCP server’s `,_jsx(_components.a,{href:`/ai/mcp/tools#show-app`,children:_jsx(_components.code,{children:`showApp`})}),` tool runs under the same sandboxing and governed queries described above.`]})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{CheckIcon,XCircleIcon,HistoryIcon,ExpandAllIcon,AppAdjustIcon,AdditionalReqIcon,RecommendedIcon,OptionalIcon,DbtNoteIssueIcon,DbtWarningIssueIcon,DbtErrorIssueIcon,MicrosoftFabricIcon,SidebarHomeIcon,SidebarRoutinesIcon,SidebarActivityIcon,SidebarAiHubIcon,DisabledFilterIcon,ContentValidatorIcon,TroubleshootWrenchIcon,DbtIdeIcon,RefreshIcon,MarkdownVariablesIcon,DashboardIcon,WorkbookIcon,WorkbookNumberFormatIcon,DashboardPreviewIcon,DashboardCatalogIcon,DashboardAddItemIcon,DashboardControlIcon,DashboardChartIcon,DashboardPlaceholderIcon,DashboardLayoutIcon,DashboardTextIcon,DashboardStackContainerIcon,DashboardPageNavIcon,IdeFileIcon,DbtHealthGoodIcon,DbtHealthWarningIcon,DbtHealthFailureIcon,DbtHealthUnknownIcon,SideBySide,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Apps","sidebarTitle":"Apps","description":"Build bespoke, fully custom data experiences — backed by live, governed data.","keywords":["apps","app builder","custom interface","vibe apps","Omni Agent","AI app","inspector","input columns","writeback","table writeback","csv writeback","embed apps","embedded apps","app deliveries","deliver apps","schedule apps"],"href":"/visualize-present/apps/index"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[145,31826,")=>null;const XCircleIcon=()=>null;const HistoryIcon=()=>null;const ExpandAllIcon=()=>null;const AppAdjustIcon=()=>null;const AdditionalReqIcon=()=>null;const RecommendedIcon=()=>null;const OptionalIcon=()=>null;const DbtNoteIssueIcon=()=>null;const DbtWarningIssueIcon=()=>null;const DbtErrorIssueIcon=()=>null;const MicrosoftFabricIcon=()=>null;const SidebarHomeIcon=()=>null;const SidebarRoutinesIcon=()=>null;const SidebarActivityIcon=()=>null;const SidebarAiHubIcon=()=>null;const DisabledFilterIcon=()=>null;const ContentValidatorIcon=()=>null;const TroubleshootWrenchIcon=()=>null;const DbtIdeIcon=()=>null;const RefreshIcon=()=>null;const MarkdownVariablesIcon=()=>null;const DashboardIcon=()=>null;const WorkbookIcon=()=>null;const WorkbookNumberFormatIcon=()=>null;const DashboardPreviewIcon=()=>null;const DashboardCatalogIcon=()=>null;const DashboardAddItemIcon=()=>null;const DashboardControlIcon=()=>null;const DashboardChartIcon=()=>null;const DashboardPlaceholderIcon=()=>null;const DashboardLayoutIcon=()=>null;const DashboardTextIcon=()=>null;const DashboardStackContainerIcon=()=>null;const DashboardPageNavIcon=()=>null;const IdeFileIcon=()=>null;const DbtHealthGoodIcon=()=>null;const DbtHealthWarningIcon=()=>null;const DbtHealthFailureIcon=()=>null;const DbtHealthUnknownIcon=()=>null;const SideBySide=()=>null;functi"]]},"mdxExtracts":{"tableOfContents":[{"title":"Enabling apps","slug":"enabling-apps","depth":2,"children":[]},{"title":"When to use apps","slug":"when-to-use-apps","depth":2,"children":[]},{"title":"Creating apps","slug":"creating-apps","depth":2,"children":[]},{"title":"Editing apps","slug":"editing-apps","depth":2,"children":[{"title":"Styling apps","slug":"styling-apps","depth":3,"children":[]},{"title":"Access Warnings","slug":"access-warnings","depth":3,"children":[]}]},{"title":"Filters","slug":"filters","depth":2,"children":[]},{"title":"Drilling","slug":"drilling","depth":2,"children":[]},{"title":"Writing data back","slug":"writing-data-back","depth":2,"children":[{"title":"Writing to input columns","slug":"writing-to-input-columns","depth":3,"children":[]},{"title":"Writing to tables","slug":"writing-to-tables","depth":3,"children":[]}]},{"title":"Calling the Omni API","slug":"calling-the-omni-api","depth":2,"children":[{"title":"What you can build","slug":"what-you-can-build","depth":3,"children":[]},{"title":"Available endpoints","slug":"api-endpoints","depth":3,"children":[]}]},{"title":"Inspecting app elements","slug":"inspecting-app-elements","depth":2,"children":[]},{"title":"Delivering and downloading apps","slug":"delivering-and-downloading-apps","depth":2,"children":[]},{"title":"Settings","slug":"settings","depth":2,"children":[]},{"title":"Embedding apps","slug":"embedding-apps","depth":2,"children":[]},{"title":"Limitations","slug":"limitations","depth":2,"children":[]},{"title":"Security","slug":"security","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"dynamicCss":".mint-h-auto {\n height: auto\n}\n.mint-w-\\[450px\\] {\n width: 450px\n}\n.mint-w-\\[550px\\] {\n width: 550px\n}","subdomain":"omni-e7402367","siteName":"Omni Docs","title":"Apps - Omni Docs","relatedPagesConfig":{"enabled":true,"limit":3,"mode":"manual"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-05T20:49:07.792Z","originalFileLocation":"visualize-present/apps/index.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Build bespoke, fully custom data experiences — backed by live, governed data.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Omni Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Apps - Omni Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Build bespoke, fully custom data experiences — backed by live, governed data.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Omni Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.omni.co/visualize-present/apps\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://omni-e7402367.mintlify.app/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Apps\u0026amp;description=Build+bespoke%2C+fully+custom+data+experiences+%E2%80%94+backed+by+live%2C+governed+data.\u0026amp;theme=191f8a92cb0a982596561b95\u0026amp;signature=e65cb98e2d98ddc13ff4ea4e718747cbd28bd67ebef4669d5cdbbdeaac6e4d1d\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Apps - Omni Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Build bespoke, fully custom data experiences — backed by live, governed data.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://omni-e7402367.mintlify.app/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Apps\u0026amp;description=Build+bespoke%2C+fully+custom+data+experiences+%E2%80%94+backed+by+live%2C+governed+data.\u0026amp;theme=191f8a92cb0a982596561b95\u0026amp;signature=e65cb98e2d98ddc13ff4ea4e718747cbd28bd67ebef4669d5cdbbdeaac6e4d1d\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Omni Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FF5FA2\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.omni.co/visualize-present/apps\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/visualize-present/apps.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.omni.co/#organization\",\"name\":\"Omni Docs\",\"url\":\"https://docs.omni.co\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/omni-e7402367/m1fg0tfdkEcnYhky/images/logo/omni-black.png?fit=max\u0026auto=format\u0026n=m1fg0tfdkEcnYhky\u0026q=85\u0026s=85b81b605382b15b60eb75159899002a\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.omni.co#website\",\"name\":\"Omni Docs\",\"url\":\"https://docs.omni.co\",\"publisher\":{\"@id\":\"https://docs.omni.co/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.omni.co/visualize-present/apps#webpage\",\"url\":\"https://docs.omni.co/visualize-present/apps\",\"name\":\"Apps\",\"description\":\"Build bespoke, fully custom data experiences — backed by live, governed data.\",\"dateModified\":\"2026-11-05T20:49:07.792Z\",\"isPartOf\":{\"@id\":\"https://docs.omni.co#website\"},\"breadcrumb\":{\"@id\":\"https://docs.omni.co/visualize-present/apps#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.omni.co/visualize-present/apps#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Visualize \u0026 present\",\"item\":\"https://docs.omni.co/visualize-present/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Apps\",\"item\":\"https://docs.omni.co/visualize-present/apps/index\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Apps\",\"item\":\"https://docs.omni.co/visualize-present/apps\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.omni.co/visualize-present/apps#article\",\"headline\":\"Apps\",\"name\":\"Apps\",\"description\":\"Build bespoke, fully custom data experiences — backed by live, governed data.\",\"url\":\"https://docs.omni.co/visualize-present/apps\",\"mainEntityOfPage\":{\"@id\":\"https://docs.omni.co/visualize-present/apps#webpage\"},\"dateModified\":\"2026-11-05T20:49:07.792Z\",\"keywords\":\"apps, app builder, custom interface, vibe apps, Omni Agent, AI app, inspector, input columns, writeback, table writeback, csv writeback, embed apps, embedded apps, app deliveries, deliver apps, schedule apps\",\"publisher\":{\"@id\":\"https://docs.omni.co/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.omni.co#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Omni Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Omni Docs","nav":{"global":null,"tabs":[{"tab":"Docs","groups":[{"group":"Getting started","icon":"hand-sparkles","pages":[{"title":"Welcome to the Omni docs!","sidebarTitle":"Introduction","mode":"wide","href":""},{"title":"AI in Omni","sidebarTitle":"AI in Omni","href":"/ai/index"},{"title":"Omni for developers","sidebarTitle":"Developers","href":"/getting-started/developers"},{"title":"Onboarding to Omni as a Viewer","sidebarTitle":"Viewers","href":"/getting-started/viewers"},{"title":"Keyboard shortcuts","sidebarTitle":"Keyboard shortcuts","href":"/getting-started/keyboard-shortcuts"},{"title":"Omni Best Practices","sidebarTitle":"Best practices","href":"/getting-started/best-practices"}]},{"group":"Manage content","icon":"book","pages":[{"group":"Navigate","pages":[{"title":"Navigating Omni","sidebarTitle":"Overview","href":"/content/navigate"},{"title":"Searching content","sidebarTitle":"Search content","href":"/content/search"},{"title":"Tracking recent work with the My Activity page","sidebarTitle":"My Activity","href":"/content/activity"}]},{"title":"Organizing content with folders \u0026 labels","sidebarTitle":"Folders and labels","href":"/content/organize"},{"group":"Draft and publish content","pages":[{"title":"Editing \u0026 publishing content","sidebarTitle":"Overview","href":"/content/develop/index"},{"title":"Developing content with Draft-only mode","sidebarTitle":"Draft-only mode","href":"/content/develop/drafts"},{"title":"Developing content and models with Branch Mode","sidebarTitle":"Branch Mode","href":"/content/develop/branch-mode"},{"title":"Common content and model publishing workflows","sidebarTitle":"Common workflows","href":"/content/develop/workflows"}]},{"title":"Content sharing","sidebarTitle":"Share content","href":"/share/index"},{"title":"Archiving and restoring content","sidebarTitle":"Archive and restore content","href":"/content/archive-restore"}]},{"group":"Analyze \u0026 build","icon":"magnifying-glass-chart","pages":[{"title":"Analyze \u0026 build in Omni","sidebarTitle":"Overview","href":"/analyze-explore/index"},{"title":"Build analyses in workbooks","sidebarTitle":"Workbook basics","href":"/analyze-explore/workbook-basics"},{"group":"Query data","root":{"title":"Querying data in Omni","sidebarTitle":"Overview","href":"/analyze-explore/querying"},"pages":[{"group":"With AI","pages":[{"title":"Omni Agent","sidebarTitle":"Standalone AI chat","href":"/ai/chat"},{"title":"Building queries \u0026 filters with AI","sidebarTitle":"Workbook Agent","href":"/ai/queries"},{"title":"Skills","sidebarTitle":"Skills","href":"/ai/skills"},{"title":"AI Routines","sidebarTitle":"Routines","href":"/ai/routines"},{"title":"Generating forecasts with AI","sidebarTitle":"Forecast with AI","href":"/ai/forecasting"}]},{"title":"Building point-and-click queries","sidebarTitle":"Point-and-click","href":"/analyze-explore/point-click-queries"},{"title":"Building workbook queries on topics","sidebarTitle":"Topic-based queries","href":"/analyze-explore/queries/topics"},{"title":"Filters","sidebarTitle":"Filters","href":"/analyze-explore/queries/filters"},{"title":"Saving queries as views","sidebarTitle":"Queries as views","href":"/analyze-explore/saved-views"},{"group":"SQL","pages":[{"title":"Writing SQL in Omni","sidebarTitle":"Write SQL queries","href":"/analyze-explore/sql/index"},{"title":"Understanding SQL generation in Omni","sidebarTitle":"SQL generation","href":"/analyze-explore/sql/generation"},{"title":"Handling fan out with symmetric aggregates","sidebarTitle":"Symmetric aggregates","href":"/analyze-explore/sql/symmetric-aggregates"}]},{"title":"Cross model tabs","sidebarTitle":"Cross model tabs","href":"/analyze-explore/cross-model-tabs"}]},{"group":"Add data","pages":[{"title":"Uploading CSVs with data input tables","sidebarTitle":"CSV \u0026 Excel uploads","href":"/analyze-explore/data-input-csvs"},{"title":"Input columns","sidebarTitle":"Input columns","href":"/analyze-explore/input-columns"}]},{"title":"Formatting \u0026 analyzing data with spreadsheet tabs","sidebarTitle":"Spreadsheets","href":"/analyze-explore/spreadsheet-tabs"},{"group":"Calculations","root":{"title":"Using Excel-style functions to create table calculations","sidebarTitle":"Overview","href":"/analyze-explore/calculations/index"},"pages":[{"title":"Supported table calculation functions","sidebarTitle":"All functions","href":"/analyze-explore/calculations/all"},{"title":"Supported AI functions","sidebarTitle":"AI","href":"/analyze-explore/calculations/ai"},{"title":"Supported date \u0026 time functions","sidebarTitle":"Date \u0026 time","href":"/analyze-explore/calculations/date-time"},{"title":"Supported math and number functions","sidebarTitle":"Math \u0026 number","href":"/analyze-explore/calculations/math-number"},{"title":"Supported position functions","sidebarTitle":"Position","href":"/analyze-explore/calculations/position"},{"title":"Supported logic functions","sidebarTitle":"Logic","href":"/analyze-explore/calculations/logic"},{"title":"Supported text functions","sidebarTitle":"Text","href":"/analyze-explore/calculations/text"}]},{"group":"Custom fields","pages":[{"title":"Creating custom fields in Omni workbooks","sidebarTitle":"Overview","href":"/analyze-explore/custom-fields/index"},{"title":"Binning and grouping custom fields","sidebarTitle":"Bin and group","href":"/analyze-explore/custom-fields/bin-group"},{"title":"Creating filtered measures from query results","sidebarTitle":"Filtered measures","href":"/analyze-explore/custom-fields/filtered-measures"},{"title":"Ranking values with Top N fields","sidebarTitle":"Top N","href":"/analyze-explore/custom-fields/top-n"}]},{"title":"Workbook inspector","sidebarTitle":"Debug \u0026 inspect queries","href":"/analyze-explore/workbook-inspector"},{"group":"Performance optimization","pages":[{"title":"Improving query performance with caching","sidebarTitle":"Caching","href":"/analyze-explore/performance/caching"},{"title":"Optimizing query performance with aggregate awareness","sidebarTitle":"Aggregate awareness","href":"/analyze-explore/performance/aggregate-awareness"}]}]},{"group":"Visualize \u0026 present","icon":"table-columns","pages":[{"title":"Visualize \u0026 present","sidebarTitle":"Overview","href":"/visualize-present/index"},{"group":"Visualizations","root":{"title":"Visualize data in Omni","sidebarTitle":"Overview","href":"/visualize-present/visualizations/index"},"pages":[{"title":"Generating visualizations with AI","sidebarTitle":"Build with AI","href":"/ai/visualizations"},{"group":"Chart types","pages":[{"title":"Overview","href":"/visualize-present/visualizations/types/index"},{"title":"AI summary visualization","sidebarTitle":"AI summary","href":"/visualize-present/visualizations/types/ai-summary"},{"title":"Area charts","href":"/visualize-present/visualizations/types/area"},{"title":"Bar charts","href":"/visualize-present/visualizations/types/bar"},{"title":"Boxplots","href":"/visualize-present/visualizations/types/boxplot"},{"title":"Funnel charts","sidebarTitle":"Funnel","href":"/visualize-present/visualizations/types/funnel"},{"title":"Heatmap Charts","href":"/visualize-present/visualizations/types/heatmap"},{"title":"KPI","href":"/visualize-present/visualizations/types/kpi"},{"title":"Line charts","href":"/visualize-present/visualizations/types/line"},{"title":"Maps","href":"/visualize-present/visualizations/types/map"},{"title":"Markdown visualizations","sidebarTitle":"Markdown","href":"/visualize-present/visualizations/types/markdown"},{"title":"Pie \u0026 Donut charts","href":"/visualize-present/visualizations/types/pie"},{"title":"Sankey charts","sidebarTitle":"Sankey","href":"/visualize-present/visualizations/types/sankey"},{"title":"Scatterplots and bubble charts","sidebarTitle":"Scatterplots","href":"/visualize-present/visualizations/types/scatterplot"},{"group":"Tables","root":{"title":"Table visualizations","sidebarTitle":"Tables","href":"/visualize-present/visualizations/types/table"},"pages":[{"title":"Configuring table field display options","sidebarTitle":"Field display options","href":"/visualize-present/visualizations/types/table-field-display"}]},{"title":"Single record tables","href":"/visualize-present/visualizations/types/single-record"}]},{"group":"Layers","root":{"title":"Build X/Y charts with layers","sidebarTitle":"Layers","href":"/visualize-present/visualizations/layers/index"},"pages":[{"title":"Measure names and Measure values","sidebarTitle":"Measure names and values","href":"/visualize-present/visualizations/layers/measure-names-values"},{"title":"Smart aggregation","sidebarTitle":"Smart aggregation","href":"/visualize-present/visualizations/layers/smart-aggregation"},{"title":"Switch between the layers and classic editors","sidebarTitle":"Switch editors","href":"/visualize-present/visualizations/layers/switch-editors"}]},{"title":"Custom visualizations","href":"/visualize-present/visualizations/types/custom"},{"group":"Configure charts","pages":[{"title":"Color by / Stacking","href":"/visualize-present/visualizations/configuration/color"},{"title":"Series configuration","href":"/visualize-present/visualizations/configuration/series-configuration"},{"title":"Series mapping","href":"/visualize-present/visualizations/configuration/series-mapping"},{"title":"Size by","href":"/visualize-present/visualizations/configuration/size"},{"title":"Tooltips","href":"/visualize-present/visualizations/configuration/tooltips"},{"title":"X-axis configuration","href":"/visualize-present/visualizations/configuration/x-axis"},{"title":"Y-axis (left axis / right axis)","href":"/visualize-present/visualizations/configuration/y-axis"}]},{"group":"Showcase","root":{"title":"Visualization showcase","mode":"wide","href":"/showcase/index"},"pages":[{"title":"Calendar heatmaps","href":"/showcase/visualizations/calendar-heatmaps"},{"title":"Card with criteria checklist","href":"/showcase/visualizations/card-criteria-checklist"},{"title":"Card grid","href":"/showcase/visualizations/card-grid"},{"title":"Card with target candlesticks","href":"/showcase/visualizations/card-target-candlesticks"},{"title":"Card with strip plot","href":"/showcase/visualizations/card-with-strip-plot"},{"title":"Cohort table","href":"/showcase/visualizations/cohort-table"},{"title":"Colored progress bars","href":"/showcase/visualizations/colored-progress-bars"},{"title":"Dashboard tabs","href":"/showcase/visualizations/dashboard-tabs"},{"title":"Dashboard tile anchors (table of contents)","href":"/showcase/visualizations/dashboard-tile-anchors"},{"title":"Data readout","href":"/showcase/visualizations/data-readout"},{"title":"Dumbbell plot","href":"/showcase/visualizations/dumbbell-plot"},{"title":"Gauges","href":"/showcase/visualizations/gauge"},{"title":"Gradient card with metrics","href":"/showcase/visualizations/gradient-card"},{"title":"Honeycomb categorical chart","href":"/showcase/visualizations/honeycomb-categorical"},{"title":"Honeycomb map","href":"/showcase/visualizations/honeycomb-map"},{"title":"Image grid","href":"/showcase/visualizations/image-grid"},{"title":"Invoice report","href":"/showcase/visualizations/invoice-report"},{"title":"Kanban","href":"/showcase/visualizations/kanban"},{"title":"KPI conditional colors","href":"/showcase/visualizations/kpi-conditional-colors"},{"title":"KPI table","href":"/showcase/visualizations/kpi-table"},{"title":"KPI with sparkline","href":"/showcase/visualizations/kpi-with-sparkline"},{"title":"Card list","href":"/showcase/visualizations/list-view"},{"title":"Location with national flag","href":"/showcase/visualizations/location-with-national-flag"},{"title":"Metric tree","href":"/showcase/visualizations/metric-tree"},{"title":"Pie or donut with custom legend","href":"/showcase/visualizations/pie-donut-custom-legend"},{"title":"Pills","href":"/showcase/visualizations/pills"},{"title":"Record lookup","href":"/showcase/visualizations/record-lookup"},{"title":"Repeating pie charts","href":"/showcase/visualizations/repeating-pie-chart"},{"title":"Repeating square fill charts","href":"/showcase/visualizations/repeating-square-fill-chart"},{"title":"Repeating waffle charts","href":"/showcase/visualizations/repeating-waffle-chart"},{"title":"Fancy subtotal table","href":"/showcase/visualizations/simple-subtotal-table"},{"title":"Star rating","href":"/showcase/visualizations/star-rating"},{"title":"Status indicator","href":"/showcase/visualizations/status-indicator"},{"title":"Symmetric funnel","href":"/showcase/visualizations/symmetric-funnel"},{"title":"Table with tiny bar charts","href":"/showcase/visualizations/table-with-tiny-bars"},{"title":"Team progress tracker","href":"/showcase/visualizations/team-progress-tracker"},{"title":"Test result cards","href":"/showcase/visualizations/test-results-cards"},{"title":"Thermometer progress indicator","href":"/showcase/visualizations/thermometer"},{"title":"Uptime heatmaps","href":"/showcase/visualizations/uptime-heatmaps"},{"title":"User profile","href":"/showcase/visualizations/user-profile"},{"title":"Word cloud","href":"/showcase/visualizations/word-cloud"}]}]},{"group":"Dashboards","root":{"title":"Dashboards","sidebarTitle":"Overview","href":"/visualize-present/dashboards/index"},"pages":[{"title":"Create a dashboard","sidebarTitle":"Create","href":"/visualize-present/dashboards/create"},{"group":"Build layouts","pages":[{"title":"Building dashboard layouts with containers and items","sidebarTitle":"Layout containers and items","href":"/visualize-present/dashboards/containers-items"},{"title":"Wireframing with placeholder content","sidebarTitle":"Placeholders","href":"/visualize-present/dashboards/placeholders"},{"title":"Creating multi-page dashboards","sidebarTitle":"Multi-page dashboards","href":"/visualize-present/dashboards/pages"},{"title":"Building page navigation for multi-page dashboards","sidebarTitle":"Page navigation","href":"/visualize-present/dashboards/page-navigation"}]},{"group":"Add content","pages":[{"title":"Working with dashboard charts","sidebarTitle":"Charts","href":"/visualize-present/dashboards/charts"},{"title":"Adding text with Markdown tiles","sidebarTitle":"Text / Markdown","href":"/visualize-present/dashboards/text-markdown"},{"group":"Filters","root":{"title":"Working with dashboard filters","sidebarTitle":"Filters","href":"/visualize-present/dashboards/filters"},"pages":[{"title":"Filter display options","sidebarTitle":"Filter display options","href":"/visualize-present/dashboards/filter-display-options"},{"title":"Filter interactivity","sidebarTitle":"Filter interactivity","href":"/visualize-present/dashboards/filter-interactivity"}]},{"group":"Controls","root":{"title":"Dynamically displaying tile fields with controls","sidebarTitle":"Field controls","href":"/visualize-present/dashboards/controls"},"pages":[{"title":"Dynamic filter controls","sidebarTitle":"Dynamic filter controls","href":"/visualize-present/dashboards/dynamic-filter-controls"}]},{"group":"Dynamic content","pages":[{"title":"Creating dynamic dashboard content with Mustache","sidebarTitle":"Overview","href":"/visualize-present/dynamic-content"},{"title":"Mustache syntax reference","href":"/visualize-present/mustache-reference"},{"title":"Mustache cheatsheet","mode":"wide","href":"/visualize-present/mustache-cheatsheet"}]}]},{"title":"Applying themes to dashboards","sidebarTitle":"Theming","href":"/visualize-present/dashboards/theming"},{"group":"Preview and test","pages":[{"title":"Preview mode","href":"/visualize-present/dashboards/preview-mode"},{"title":"Viewing dashboards as another user","sidebarTitle":"View as user","href":"/visualize-present/dashboards/view-as"}]},{"group":"Manage dashboards","pages":[{"title":"Managing dashboard settings","sidebarTitle":"Settings","href":"/visualize-present/dashboards/settings"},{"title":"Enabling timezone selection on documents","sidebarTitle":"Timezone selection","href":"/visualize-present/dashboards/timezone-override"},{"title":"Analyzing dashboard performance","sidebarTitle":"Dashboard performance profiler","href":"/visualize-present/dashboards/performance-profiler"},{"title":"Downloading dashboards","sidebarTitle":"Download","href":"/visualize-present/dashboards/download"},{"title":"Defining custom dashboard error and empty results messages","sidebarTitle":"Custom error \u0026 empty result messages","href":"/visualize-present/dashboards/custom-state-message"},{"title":"Removing a dashboard from a document","sidebarTitle":"Remove a dashboard","href":"/visualize-present/dashboards/delete"}]}]},{"title":"Chat with Content","sidebarTitle":"Chat with Content","description":"Chat with Content brings Omni's conversational analytics directly into your content.","href":"/ai/dashboard-assistant"},{"group":"Apps","root":{"title":"Apps","sidebarTitle":"Apps","href":"/visualize-present/apps/index"},"pages":[{"title":"Styling Apps","sidebarTitle":"Styling","description":"Use Omni's design system CSS variables and your organization's custom theme to build Apps that match your branding and adapt to light and dark mode automatically.","href":"/visualize-present/apps/styling"},{"title":"Inspecting App elements","sidebarTitle":"Element inspector","description":"Select elements in draft apps and send them to the Omni Agent as context.","href":"/visualize-present/apps/inspect"},{"title":"Downloading apps","sidebarTitle":"Download","description":"Download a published Omni app as a PNG, PDF, Excel workbook, or zipped CSVs.","href":"/visualize-present/apps/download"},{"title":"Importing Claude dashboards as apps","sidebarTitle":"Import from Claude","description":"Prototype a dashboard in Claude with your Omni semantic model, then send it to Omni as an app that you can continue to iterate on.","href":"/visualize-present/apps/claude-dashboards"},{"title":"App settings","sidebarTitle":"Settings","description":"Configure per-app security and functionality settings to enable features like map rendering, embedded sites, and link navigation in Apps.","href":"/visualize-present/apps/settings"}]}]},{"group":"Deliver content","icon":"user-group","pages":[{"title":"Sharing content with schedules \u0026 alerts","sidebarTitle":"Overview","href":"/share/deliveries/index"},{"title":"Delivering Omni content to Amazon S3","sidebarTitle":"Amazon S3","href":"/share/deliveries/amazon-s3"},{"group":"Email","pages":[{"title":"Delivering Omni content via email","sidebarTitle":"Create email delivery","href":"/share/deliveries/email/index"},{"title":"Personalizing email deliveries with recipient attributes","sidebarTitle":"Personalize deliveries","href":"/share/deliveries/email/personalization"},{"title":"Whitelabeling sender addresses for email deliveries","sidebarTitle":"Whitelabel sender address","href":"/share/deliveries/email/whitelabel"},{"title":"Restricting recipient email domains with allowlist","sidebarTitle":"Domain allowlist","href":"/share/deliveries/email/domain-allowlist"}]},{"title":"Delivering Omni content to Google Sheets","sidebarTitle":"Google Sheets","href":"/share/deliveries/google-sheets"},{"title":"Delivering Omni content to an SFTP server","sidebarTitle":"SFTP","href":"/share/deliveries/sftp"},{"title":"Delivering Omni content to Slack","sidebarTitle":"Slack","href":"/share/deliveries/slack"},{"title":"Webhook deliveries","sidebarTitle":"Webhooks","href":"/share/deliveries/webhooks"},{"title":"Creating dynamic delivery content with Mustache","sidebarTitle":"Dynamic content","href":"/share/deliveries/dynamic-content"},{"title":"Troubleshooting failed deliveries","sidebarTitle":"Troubleshooting","href":"/share/deliveries/troubleshooting"}]},{"group":"Model data","icon":"wrench","pages":[{"group":"Getting started","pages":[{"title":"Modeling in Omni","sidebarTitle":"Overview","href":"/modeling/index"},{"title":"Developing in Omni: Permissions \u0026 content organization","sidebarTitle":"Permissions \u0026 content organization","href":"/modeling/develop/guides/permissions-content-org"},{"title":"Developing in Omni: Modeling in workbooks","sidebarTitle":"Workbook models","href":"/modeling/develop/guides/workbook-modeling"},{"title":"Developing in Omni: Model IDE","sidebarTitle":"Model IDE","href":"/modeling/develop/guides/model-ide"},{"title":"Developing in Omni: Advanced modeling concepts","sidebarTitle":"Advanced concepts","href":"/modeling/develop/guides/advanced-concepts"}]},{"group":"Develop models","root":{"title":"Managing your models","sidebarTitle":"Management","href":"/modeling/develop/model-management"},"pages":[{"title":"Model generation","href":"/modeling/develop/model-generation"},{"title":"Modeling Agent","sidebarTitle":"Modeling Agent","href":"/ai/model-assistant"},{"group":"Optimize for AI","pages":[{"title":"Suggestions","sidebarTitle":"Suggestions","href":"/ai/suggestions"},{"title":"Evals","sidebarTitle":"Evals","href":"/ai/evals"},{"title":"Optimize models for Omni AI","sidebarTitle":"Context management","href":"/modeling/develop/ai-optimization"},{"title":"Learn from conversation","sidebarTitle":"Learn from conversation","href":"/ai/learn-from-conversation"}]},{"title":"Promoting workbook changes to the shared model","sidebarTitle":"Promote changes","href":"/modeling/develop/promotion"},{"title":"Incorporating database changes with schema refreshes","sidebarTitle":"Schema refreshes","href":"/modeling/develop/schema-refreshes"},{"title":"Table migration","sidebarTitle":"Migrate tables","href":"/modeling/develop/table-migration"},{"title":"Validating model changes with the Content Validator","sidebarTitle":"Validate content","href":"/modeling/develop/content-validator"},{"title":"Viewing and restoring model versions in the model IDE","sidebarTitle":"Compare and restore versions","href":"/modeling/develop/history"},{"group":"Shared extensions","root":{"title":"Shared extension models","sidebarTitle":"Shared extensions","href":"/modeling/develop/shared-extensions/index"},"pages":[{"title":"Setting up a shared extension model","sidebarTitle":"Setup","href":"/modeling/develop/shared-extensions/setup"},{"title":"Extension settings","sidebarTitle":"Settings","href":"/modeling/develop/shared-extensions/settings"},{"title":"Branches and Git for extension models","sidebarTitle":"Branches and Git","href":"/modeling/develop/shared-extensions/extension-branches"}]}]},{"group":"Model settings","root":{"title":"Configuring your models","sidebarTitle":"Overview","mode":"wide","href":"/modeling/models/index"},"pages":[{"title":"Controlling data access using the modeling layer","sidebarTitle":"Control data access","href":"/modeling/develop/data-access-control"},{"title":"Formatting values","sidebarTitle":"Format values","href":"/modeling/models/format-values"},{"group":"Model file parameters","expanded":false,"pages":[{"title":"access_grants - Model files","sidebarTitle":"access_grants","href":"/modeling/models/access-grants"},{"title":"ai_chat_topics - Model files","sidebarTitle":"ai_chat_topics","href":"/modeling/models/ai-chat-topics"},{"title":"ai_context - Model files","sidebarTitle":"ai_context","href":"/modeling/models/ai-context"},{"group":"ai_settings","root":{"title":"ai_settings","sidebarTitle":"ai_settings","href":"/modeling/models/parameters/ai-settings/index"},"pages":[{"title":"allow_ctes - AI settings","sidebarTitle":"allow_ctes","href":"/modeling/models/parameters/ai-settings/allow-ctes"},{"title":"allow_custom_fields - AI settings","sidebarTitle":"allow_custom_fields","href":"/modeling/models/parameters/ai-settings/allow-custom-fields"},{"title":"analyze_configuration - AI settings","sidebarTitle":"analyze_configuration","tag":"deprecated","href":"/modeling/models/parameters/ai-settings/analyze-configuration"},{"title":"build_configuration - AI settings","sidebarTitle":"build_configuration","tag":"deprecated","href":"/modeling/models/parameters/ai-settings/build-configuration"},{"title":"conversation_prune_length - AI settings","sidebarTitle":"conversation_prune_length","href":"/modeling/models/parameters/ai-settings/conversation-prune-length"},{"title":"disabled_tools - AI settings","sidebarTitle":"disabled_tools","href":"/modeling/models/parameters/ai-settings/disabled-tools"},{"title":"query_all_views_and_fields - AI settings","sidebarTitle":"query_all_views_and_fields","href":"/modeling/models/parameters/ai-settings/query-all-views-and-fields"},{"title":"show_progress_narration - AI settings","sidebarTitle":"show_progress_narration","href":"/modeling/models/parameters/ai-settings/show-progress-narration"},{"title":"simple_summarize_configuration - AI settings","sidebarTitle":"simple_summarize_configuration","tag":"deprecated","href":"/modeling/models/parameters/ai-settings/simple-summarize-configuration"},{"title":"topic_prune_characters - AI settings","sidebarTitle":"topic_prune_characters","href":"/modeling/models/parameters/ai-settings/topic-prune-characters"},{"title":"validate_analysis - AI settings","sidebarTitle":"validate_analysis","href":"/modeling/models/parameters/ai-settings/validate-analysis"}]},{"title":"auto_run - Model files","sidebarTitle":"auto_run","href":"/modeling/models/auto-run"},{"title":"auto_run_dashboard - Model files","sidebarTitle":"auto_run_dashboard","href":"/modeling/models/auto-run-dashboard"},{"title":"cache_policies - Model files","sidebarTitle":"cache_policies","href":"/modeling/models/cache-policies"},{"title":"calcs_default_pushdown - Model files","sidebarTitle":"calcs_default_pushdown","href":"/modeling/models/calcs-default-pushdown"},{"title":"compute_routing - Model files","sidebarTitle":"compute_routing","href":"/modeling/models/compute-routing"},{"title":"constants - Model files","sidebarTitle":"constants","href":"/modeling/models/constants"},{"title":"custom_calendars - Model files","sidebarTitle":"custom_calendars","href":"/modeling/models/custom-calendars"},{"title":"custom_formats - Model files","sidebarTitle":"custom_formats","href":"/modeling/models/custom-formats"},{"title":"default_cache_policy - Model files","sidebarTitle":"default_cache_policy","href":"/modeling/models/default-cache-policy"},{"title":"default_custom_calendar - Model files","sidebarTitle":"default_custom_calendar","href":"/modeling/models/default-custom-calendar"},{"title":"default_group_by - Model files","sidebarTitle":"default_group_by","href":"/modeling/models/default-group-by"},{"title":"default_numeric_locale - Model files","sidebarTitle":"default_numeric_locale","href":"/modeling/models/default-numeric-locale"},{"title":"default_row_limit - Model files","sidebarTitle":"default_row_limit","href":"/modeling/models/default-row-limit"},{"title":"default_timeframes - Model files","sidebarTitle":"default_timeframes","href":"/modeling/models/default-timeframes"},{"title":"default_topic_access_filters - Model files","sidebarTitle":"default_topic_access_filters","href":"/modeling/models/default-topic-access-filters"},{"title":"default_topic_hidden_unless_access_grants - Model files","sidebarTitle":"default_topic_hidden_unless_access_grants","href":"/modeling/models/default-topic-hidden-unless-access-grants"},{"title":"default_topic_required_access_grants - Model files","sidebarTitle":"default_topic_required_access_grants","href":"/modeling/models/default-topic-required-access-grants"},{"title":"dynamic_schemas - Model files","sidebarTitle":"dynamic_schemas","href":"/modeling/models/dynamic-schemas"},{"title":"dynamic_shared_extensions - Model files","sidebarTitle":"dynamic_shared_extensions","href":"/modeling/models/dynamic-shared-extensions"},{"title":"extends - Model files","sidebarTitle":"extends","mode":"wide","href":"/modeling/models/extends"},{"title":"facet_workbook_filters - Model files","sidebarTitle":"facet_workbook_filters","href":"/modeling/models/facet-workbook-filters"},{"title":"fiscal_month_offset - Model files","sidebarTitle":"fiscal_month_offset","href":"/modeling/models/fiscal-month-offset"},{"title":"ignored_schemas - Model files","sidebarTitle":"ignored_schemas","href":"/modeling/models/ignored-schemas"},{"title":"ignored_views - Model files","sidebarTitle":"ignored_views","href":"/modeling/models/ignored-views"},{"title":"included_schemas - Model files","sidebarTitle":"included_schemas","mode":"wide","href":"/modeling/models/included-schemas"},{"title":"included_views - Model files","sidebarTitle":"included_views","mode":"wide","href":"/modeling/models/included-views"},{"title":"sample_queries - Model files","sidebarTitle":"sample_queries","href":"/modeling/models/sample-queries"},{"title":"sets - Model files","sidebarTitle":"sets","href":"/modeling/models/sets"},{"title":"skills - Model files","sidebarTitle":"skills","href":"/modeling/models/skills"},{"title":"slot_reservation - Model files","sidebarTitle":"slot_reservation","href":"/modeling/models/slot-reservation"},{"title":"sql_preamble - Model files","sidebarTitle":"sql_preamble","href":"/modeling/models/sql-preamble"},{"title":"template - Model files","sidebarTitle":"template","href":"/modeling/models/template"},{"title":"topic_group_descriptions - Model files","sidebarTitle":"topic_group_descriptions","href":"/modeling/models/topic-group-descriptions"},{"title":"topics - Model files","sidebarTitle":"topics","href":"/modeling/models/topics"},{"title":"warehouse_override - Model files","sidebarTitle":"warehouse_override","href":"/modeling/models/warehouse-override"},{"title":"week_start_day - Model files","sidebarTitle":"week_start_day","href":"/modeling/models/week-start-day"}]}]},{"group":"Topics","root":{"title":"Curating datasets with topics","sidebarTitle":"Overview","href":"/modeling/topics/index"},"pages":[{"title":"Creating topics","sidebarTitle":"Create topics","href":"/modeling/topics/setup"},{"title":"Creating topics with AI quickstart","sidebarTitle":"Create topics with AI","href":"/modeling/topics/quickstart"},{"title":"Topic best practices","sidebarTitle":"Best practices","href":"/modeling/topics/best-practices"},{"title":"Topic design inspiration","sidebarTitle":"Examples","href":"/modeling/topics/examples"},{"group":"Parameters","pages":[{"title":"Topic file parameters","sidebarTitle":"All parameters","href":"/modeling/topics/parameters/index"},{"title":"access_filters - Topics","sidebarTitle":"access_filters","href":"/modeling/topics/parameters/access-filters"},{"title":"ai_context - Topics","sidebarTitle":"ai_context","href":"/modeling/topics/parameters/ai-context"},{"title":"ai_fields - Topics","sidebarTitle":"ai_fields","href":"/modeling/topics/parameters/ai-fields"},{"title":"ai_prune_characters - Topics","sidebarTitle":"ai_prune_characters","href":"/modeling/topics/parameters/ai-prune-characters"},{"title":"always_having_filters - Topics","sidebarTitle":"always_having_filters","href":"/modeling/topics/parameters/always-having-filters"},{"title":"always_having_sql - Topics","sidebarTitle":"always_having_sql","href":"/modeling/topics/parameters/always-having-sql"},{"title":"always_where_filters - Topics","sidebarTitle":"always_where_filters","href":"/modeling/topics/parameters/always-where-filters"},{"title":"always_where_sql - Topics","sidebarTitle":"always_where_sql","href":"/modeling/topics/parameters/always-where-sql"},{"title":"auto_run - Topics","sidebarTitle":"auto_run","href":"/modeling/topics/parameters/auto-run"},{"title":"base_view - Topics","sidebarTitle":"base_view","href":"/modeling/topics/parameters/base-view"},{"title":"base_view_label - Topics","sidebarTitle":"base_view_label","href":"/modeling/topics/parameters/base-view-label"},{"title":"cache_policy - Topics","sidebarTitle":"cache_policy","href":"/modeling/topics/parameters/cache-policy"},{"title":"default_filters - Topics","sidebarTitle":"default_filters","href":"/modeling/topics/parameters/default-filters"},{"title":"default_row_limit - Topics","sidebarTitle":"default_row_limit","href":"/modeling/topics/parameters/default-row-limit"},{"title":"description - Topics","sidebarTitle":"description","href":"/modeling/topics/parameters/description"},{"title":"display_order - Topics","sidebarTitle":"display_order","href":"/modeling/topics/parameters/display-order"},{"title":"extends - Topics","sidebarTitle":"extends","href":"/modeling/topics/parameters/extends"},{"title":"fields - Topics","sidebarTitle":"fields","href":"/modeling/topics/parameters/fields"},{"title":"group_label - Topics","sidebarTitle":"group_label","href":"/modeling/topics/parameters/group-label"},{"title":"hidden - Topics","sidebarTitle":"hidden","href":"/modeling/topics/parameters/hidden"},{"title":"hidden_unless_access_grants - Topics","sidebarTitle":"hidden_unless_access_grants","href":"/modeling/topics/parameters/hidden-unless-access-grants"},{"title":"joins - Topics","sidebarTitle":"joins","href":"/modeling/topics/parameters/joins"},{"title":"label - Topics","sidebarTitle":"label","href":"/modeling/topics/parameters/label"},{"title":"owners - Topics","sidebarTitle":"owners","href":"/modeling/topics/parameters/owners"},{"title":"relationships - Topics","sidebarTitle":"relationships","href":"/modeling/topics/parameters/relationships"},{"title":"required_access_grants - Topics","sidebarTitle":"required_access_grants","href":"/modeling/topics/parameters/required-access-grants"},{"title":"sample_queries - Topics","sidebarTitle":"sample_queries","href":"/modeling/topics/parameters/sample-queries"},{"title":"skills - Topics","sidebarTitle":"skills","href":"/modeling/topics/parameters/skills"},{"title":"tags - Topics","sidebarTitle":"tags","href":"/modeling/topics/parameters/tags"},{"title":"template - Topics","sidebarTitle":"template","href":"/modeling/topics/parameters/template"},{"title":"views - Topics","sidebarTitle":"views","href":"/modeling/topics/parameters/views"},{"title":"warehouse_override - Topics","sidebarTitle":"warehouse_override","href":"/modeling/topics/parameters/warehouse-override"},{"title":"week_start_day - Topics","sidebarTitle":"week_start_day","href":"/modeling/topics/parameters/week-start-day"}]}]},{"group":"Composite topics","root":{"title":"Composite topics","sidebarTitle":"Overview","href":"/modeling/composite-topics/index"},"pages":[{"title":"Create a composite topic","sidebarTitle":"Create composite topics","href":"/modeling/composite-topics/create"},{"title":"Composite topic examples","sidebarTitle":"Examples","href":"/modeling/composite-topics/examples"},{"group":"Parameters","root":{"title":"Composite topic parameters","sidebarTitle":"All parameters","href":"/modeling/composite-topics/parameters/index"},"pages":[{"title":"ai_context - Composite topics","sidebarTitle":"ai_context","href":"/modeling/composite-topics/parameters/ai-context"},{"title":"always_join_all_topics - Composite topics","sidebarTitle":"always_join_all_topics","href":"/modeling/composite-topics/parameters/always-join-all-topics"},{"title":"cache_policy - Composite topics","sidebarTitle":"cache_policy","href":"/modeling/composite-topics/parameters/cache-policy"},{"title":"default_filters - Composite topics","sidebarTitle":"default_filters","href":"/modeling/composite-topics/parameters/default-filters"},{"title":"description - Composite topics","sidebarTitle":"description","href":"/modeling/composite-topics/parameters/description"},{"title":"display_order - Composite topics","sidebarTitle":"display_order","href":"/modeling/composite-topics/parameters/display-order"},{"title":"fields - Composite topics","sidebarTitle":"fields","href":"/modeling/composite-topics/parameters/fields"},{"title":"hidden - Composite topics","sidebarTitle":"hidden","href":"/modeling/composite-topics/parameters/hidden"},{"title":"hidden_unless_access_grants - Composite topics","sidebarTitle":"hidden_unless_access_grants","href":"/modeling/composite-topics/parameters/hidden-unless-access-grants"},{"title":"label - Composite topics","sidebarTitle":"label","href":"/modeling/composite-topics/parameters/label"},{"title":"required_access_grants - Composite topics","sidebarTitle":"required_access_grants","href":"/modeling/composite-topics/parameters/required-access-grants"},{"title":"sample_queries - Composite topics","sidebarTitle":"sample_queries","href":"/modeling/composite-topics/parameters/sample-queries"},{"title":"shared_dimensions - Composite topics","sidebarTitle":"shared_dimensions","href":"/modeling/composite-topics/parameters/shared-dimensions"},{"title":"shared_measures - Composite topics","sidebarTitle":"shared_measures","href":"/modeling/composite-topics/parameters/shared-measures"},{"title":"shared_views - Composite topics","sidebarTitle":"shared_views","href":"/modeling/composite-topics/parameters/shared-views"},{"title":"tags - Composite topics","sidebarTitle":"tags","href":"/modeling/composite-topics/parameters/tags"},{"title":"topics - Composite topics","sidebarTitle":"topics","href":"/modeling/composite-topics/parameters/topics"},{"title":"unrelated_dimension_handling - Composite topics","sidebarTitle":"unrelated_dimension_handling","href":"/modeling/composite-topics/parameters/unrelated-dimension-handling"}]}]},{"group":"Views","root":{"title":"Working with views","sidebarTitle":"Overview","href":"/modeling/views/index"},"pages":[{"title":"Editing database views","sidebarTitle":"Edit views","href":"/modeling/views/edit"},{"title":"Aliasing views","sidebarTitle":"Aliasing","href":"/modeling/views/alias"},{"group":"Parameters","root":{"title":"All View file parameters","sidebarTitle":"All parameters","mode":"wide","href":"/modeling/views/parameters/index"},"pages":[{"title":"ai_context - Views","sidebarTitle":"ai_context","href":"/modeling/views/parameters/ai-context"},{"title":"aliases - Views","sidebarTitle":"aliases","href":"/modeling/views/parameters/aliases"},{"title":"catalog - Views","sidebarTitle":"catalog","href":"/modeling/views/parameters/catalog"},{"title":"custom_compound_primary_key_sql - Views","sidebarTitle":"custom_compound_primary_key_sql","href":"/modeling/views/parameters/custom-compound-primary-key-sql"},{"title":"default_drill_fields - Views","sidebarTitle":"default_drill_fields","href":"/modeling/views/parameters/default-drill-fields"},{"title":"default_drill_query - Views","sidebarTitle":"default_drill_query","href":"/modeling/views/parameters/default-drill-query"},{"title":"description - Views","sidebarTitle":"description","href":"/modeling/views/parameters/description"},{"title":"display_order - Views","sidebarTitle":"display_order","href":"/modeling/views/parameters/display-order"},{"title":"extends - Views","sidebarTitle":"extends","href":"/modeling/views/parameters/extends"},{"title":"fill_fields - Views","sidebarTitle":"fill_fields","href":"/modeling/views/parameters/fill-fields"},{"title":"folder - Views","sidebarTitle":"folder","href":"/modeling/views/parameters/folder"},{"title":"hidden - Views","sidebarTitle":"hidden","href":"/modeling/views/parameters/hidden"},{"title":"ignored - Views","sidebarTitle":"ignored","href":"/modeling/views/parameters/ignored"},{"title":"ignored_props - Views","sidebarTitle":"ignored_props","href":"/modeling/views/parameters/ignored-props"},{"title":"label - Views","sidebarTitle":"label","href":"/modeling/views/parameters/label"},{"title":"materialized_query - Views","sidebarTitle":"materialized_query","href":"/modeling/views/parameters/materialized-query"},{"title":"name - Views","sidebarTitle":"name","href":"/modeling/views/parameters/name"},{"title":"query - Views","sidebarTitle":"query","href":"/modeling/views/parameters/query"},{"title":"required_access_grants - Views","sidebarTitle":"required_access_grants","href":"/modeling/views/parameters/required-access-grants"},{"title":"schema - Views","sidebarTitle":"schema","href":"/modeling/views/parameters/schema"},{"title":"schema_label - Views","sidebarTitle":"schema_label","href":"/modeling/views/parameters/schema-label"},{"title":"sql - Views","sidebarTitle":"sql","href":"/modeling/views/parameters/sql"},{"title":"table_name - Views","sidebarTitle":"table_name","href":"/modeling/views/parameters/table-name"},{"title":"tags - Views","sidebarTitle":"tags","href":"/modeling/views/parameters/tags"},{"title":"template - Views","sidebarTitle":"template","href":"/modeling/views/parameters/template"},{"title":"uploaded_table_name - Views","sidebarTitle":"uploaded_table_name","href":"/modeling/views/parameters/uploaded-table-name"}]}]},{"group":"Query views","root":{"title":"Configuring query views","sidebarTitle":"Overview","href":"/modeling/query-views/index"},"pages":[{"title":"Editing query views","sidebarTitle":"Edit query views","href":"/modeling/query-views/edit"},{"group":"Parameters","root":{"title":"Query view parameters","sidebarTitle":"All parameters","href":"/modeling/query-views/parameters/index"},"pages":[{"title":"ai_context - Query views","sidebarTitle":"ai_context","href":"/modeling/query-views/parameters/ai-context"},{"title":"base_view - Query views","sidebarTitle":"base_view","href":"/modeling/query-views/parameters/base-view"},{"title":"description - Query views","sidebarTitle":"description","href":"/modeling/query-views/parameters/description"},{"title":"display_order - Query views","sidebarTitle":"display_order","href":"/modeling/query-views/parameters/display-order"},{"title":"dimensions - Query views","sidebarTitle":"dimensions","href":"/modeling/query-views/parameters/dimensions"},{"title":"hidden - Query views","sidebarTitle":"hidden","href":"/modeling/query-views/parameters/hidden"},{"title":"ignored - Query views","sidebarTitle":"ignored","href":"/modeling/query-views/parameters/ignored"},{"title":"label - Query views","sidebarTitle":"label","href":"/modeling/query-views/parameters/label"},{"title":"measures - Query views","sidebarTitle":"measures","href":"/modeling/query-views/parameters/measures"},{"group":"query","root":{"title":"query - Query views","sidebarTitle":"query","href":"/modeling/query-views/parameters/query"},"pages":[{"title":"bind - Query views","sidebarTitle":"bind","href":"/modeling/query-views/parameters/bind"},{"title":"bind_all_filters - Query views","sidebarTitle":"bind_all_filters","href":"/modeling/query-views/parameters/bind-all-filters"},{"title":"bind_outer_context - Query views","sidebarTitle":"bind_outer_context","href":"/modeling/query-views/parameters/bind-outer-context"},{"title":"calculations - Query views","sidebarTitle":"calculations","href":"/modeling/query-views/parameters/calculations"},{"title":"default_group_by - Query views","sidebarTitle":"default_group_by","href":"/modeling/query-views/parameters/default-group-by"},{"title":"fields - Query views","sidebarTitle":"fields","href":"/modeling/query-views/parameters/fields"},{"title":"fill_fields - Query views","sidebarTitle":"fill_fields","href":"/modeling/query-views/parameters/fill-fields"},{"title":"filters - Query views","sidebarTitle":"filters","href":"/modeling/query-views/parameters/filters"},{"title":"join_via_map - Query views","sidebarTitle":"join_via_map","href":"/modeling/query-views/parameters/join-via-map"},{"title":"limit - Query views","sidebarTitle":"limit","href":"/modeling/query-views/parameters/limit"},{"title":"sorts - Query views","sidebarTitle":"sorts","href":"/modeling/query-views/parameters/sorts"},{"title":"topic - Query views","sidebarTitle":"topic","href":"/modeling/query-views/parameters/topic"}]},{"title":"schema - Query views","sidebarTitle":"schema","href":"/modeling/query-views/parameters/schema"},{"title":"sql - Query views","sidebarTitle":"sql","href":"/modeling/query-views/parameters/sql"},{"title":"tags - Query views","sidebarTitle":"tags","href":"/modeling/query-views/parameters/tags"}]}]},{"group":"Measures","root":{"title":"Measures","sidebarTitle":"Overview","href":"/modeling/measures/index"},"pages":[{"group":"Parameters","root":{"title":"Measure parameters","sidebarTitle":"All parameters","href":"/modeling/measures/parameters/index"},"pages":[{"title":"aggregate_type - Measures","sidebarTitle":"aggregate_type","href":"/modeling/measures/parameters/aggregate-type"},{"title":"ai_context - Measures","sidebarTitle":"ai_context","href":"/modeling/measures/parameters/ai-context"},{"title":"aliases - Measures","sidebarTitle":"aliases","href":"/modeling/measures/parameters/aliases"},{"title":"all_values - Measures","sidebarTitle":"all_values","href":"/modeling/measures/parameters/all-values"},{"title":"colors - Measures","sidebarTitle":"colors","href":"/modeling/measures/parameters/colors"},{"title":"custom_primary_key_sql - Measures","sidebarTitle":"custom_primary_key_sql","href":"/modeling/measures/parameters/custom-primary-key-sql"},{"title":"description - Measures","sidebarTitle":"description","href":"/modeling/measures/parameters/description"},{"title":"display_order - Measures","sidebarTitle":"display_order","href":"/modeling/measures/parameters/display-order"},{"title":"drill_fields - Measures","sidebarTitle":"drill_fields","href":"/modeling/measures/parameters/drill-fields"},{"title":"drill_queries - Measures","sidebarTitle":"drill_queries","href":"/modeling/measures/parameters/drill-queries"},{"title":"filters - Measures","sidebarTitle":"filters","href":"/modeling/measures/parameters/filters"},{"title":"format - Measures","sidebarTitle":"format","href":"/modeling/measures/parameters/format"},{"title":"group_label - Measures","sidebarTitle":"group_label","href":"/modeling/measures/parameters/group-label"},{"title":"hidden - Measures","sidebarTitle":"hidden","href":"/modeling/measures/parameters/hidden"},{"title":"ignored - Measures","sidebarTitle":"ignored","href":"/modeling/measures/parameters/ignored"},{"title":"ignored_props - Measures","sidebarTitle":"ignored_props","href":"/modeling/measures/parameters/ignored-props"},{"title":"label - Measures","sidebarTitle":"label","href":"/modeling/measures/parameters/label"},{"title":"level_of_detail - Measures","sidebarTitle":"level_of_detail","href":"/modeling/measures/parameters/level-of-detail"},{"title":"links - Measures","sidebarTitle":"links","href":"/modeling/measures/parameters/links"},{"title":"markdown - Measures","sidebarTitle":"markdown","href":"/modeling/measures/parameters/markdown"},{"title":"null_display - Measures","sidebarTitle":"null_display","href":"/modeling/measures/parameters/null-display"},{"title":"required_access_grants - Measures","sidebarTitle":"required_access_grants","href":"/modeling/measures/parameters/required-access-grants"},{"title":"required_fields - Measures","sidebarTitle":"required_fields","href":"/modeling/measures/parameters/required-fields"},{"title":"sample_values - Measures","sidebarTitle":"sample_values","href":"/modeling/measures/parameters/sample-values"},{"title":"sql - Measures","sidebarTitle":"sql","href":"/modeling/measures/parameters/sql"},{"title":"suggest_from_field - Measures","sidebarTitle":"suggest_from_field","href":"/modeling/measures/parameters/suggest-from-field"},{"title":"suggestion_list - Measures","sidebarTitle":"suggestion_list","href":"/modeling/measures/parameters/suggestion-list"},{"title":"synonyms - Measures","sidebarTitle":"synonyms","href":"/modeling/measures/parameters/synonyms"},{"title":"tags - Measures","sidebarTitle":"tags","href":"/modeling/measures/parameters/tags"},{"title":"view_label - Measures","sidebarTitle":"view_label","href":"/modeling/measures/parameters/view-label"}]}]},{"group":"Dimensions","root":{"title":"Dimensions","sidebarTitle":"Overview","href":"/modeling/dimensions/index"},"pages":[{"group":"Parameters","root":{"title":"All dimension parameters","sidebarTitle":"All parameters","href":"/modeling/dimensions/parameters/index"},"pages":[{"title":"ai_context - Dimensions","sidebarTitle":"ai_context","href":"/modeling/dimensions/parameters/ai-context"},{"title":"aliases - Dimensions","sidebarTitle":"aliases","href":"/modeling/dimensions/parameters/aliases"},{"title":"all_values - Dimensions","sidebarTitle":"all_values","href":"/modeling/dimensions/parameters/all-values"},{"title":"bin_boundaries - Dimensions","sidebarTitle":"bin_boundaries","href":"/modeling/dimensions/parameters/bin-boundaries"},{"title":"colors - Dimensions","sidebarTitle":"colors","href":"/modeling/dimensions/parameters/colors"},{"title":"convert_tz - Dimensions","sidebarTitle":"convert_tz","href":"/modeling/dimensions/parameters/convert-tz"},{"title":"custom_calendar - Dimensions","sidebarTitle":"custom_calendar","href":"/modeling/dimensions/parameters/custom-calendar"},{"title":"custom_primary_key_sql_for_quick_aggs - Dimensions","sidebarTitle":"custom_primary_key_sql_for_quick_aggs","href":"/modeling/dimensions/parameters/custom-primary-key-sql-for-quick-aggs"},{"title":"description - Dimensions","sidebarTitle":"description","href":"/modeling/dimensions/parameters/description"},{"title":"display_order - Dimensions","sidebarTitle":"display_order","href":"/modeling/dimensions/parameters/display-order"},{"title":"duration - Dimensions","sidebarTitle":"duration","href":"/modeling/dimensions/parameters/duration"},{"title":"dynamic_top_n - Dimensions","sidebarTitle":"dynamic_top_n","href":"/modeling/dimensions/parameters/dynamic-top-n"},{"title":"drill_fields - Dimensions","sidebarTitle":"drill_fields","href":"/modeling/dimensions/parameters/drill-fields"},{"title":"extends - Dimensions","sidebarTitle":"extends","href":"/modeling/dimensions/parameters/extends"},{"title":"faceting - Dimensions","sidebarTitle":"faceting","href":"/modeling/dimensions/parameters/faceting"},{"title":"filter_single_select_only - Dimensions","sidebarTitle":"filter_single_select_only","href":"/modeling/dimensions/parameters/filter-single-select-only"},{"title":"format - Dimensions","sidebarTitle":"format","href":"/modeling/dimensions/parameters/format"},{"title":"group_label - Dimensions","sidebarTitle":"group_label","href":"/modeling/dimensions/parameters/group-label"},{"title":"groups - Dimensions","sidebarTitle":"groups","href":"/modeling/dimensions/parameters/groups"},{"title":"hidden - Dimensions","sidebarTitle":"hidden","href":"/modeling/dimensions/parameters/hidden"},{"title":"ignore_from_extended - Dimensions","sidebarTitle":"ignore_from_extended","href":"/modeling/dimensions/parameters/ignore-from-extended"},{"title":"ignored - Dimensions","sidebarTitle":"ignored","href":"/modeling/dimensions/parameters/ignored"},{"title":"ignored_props - Dimensions","sidebarTitle":"ignored_props","href":"/modeling/dimensions/parameters/ignored-props"},{"title":"label - Dimensions","sidebarTitle":"label","href":"/modeling/dimensions/parameters/label"},{"title":"level_of_detail - Dimensions","sidebarTitle":"level_of_detail","href":"/modeling/dimensions/parameters/level-of-detail"},{"title":"links - Dimensions","sidebarTitle":"links","href":"/modeling/dimensions/parameters/links"},{"title":"markdown - Dimensions","sidebarTitle":"markdown","href":"/modeling/dimensions/parameters/markdown"},{"title":"mask_unless_access_grants - Dimensions","sidebarTitle":"mask_unless_access_grants","href":"/modeling/dimensions/parameters/mask-unless-access-grants"},{"title":"null_display - Dimensions","sidebarTitle":"null_display","href":"/modeling/dimensions/parameters/null-display"},{"title":"order_by_field - Dimensions","sidebarTitle":"order_by_field","href":"/modeling/dimensions/parameters/order-by-field"},{"title":"parent_field - Dimensions","sidebarTitle":"parent_field","href":"/modeling/dimensions/parameters/parent-field"},{"title":"primary_key - Dimensions","sidebarTitle":"primary_key","href":"/modeling/dimensions/parameters/primary-key"},{"title":"required_access_grants - Dimensions","sidebarTitle":"required_access_grants","href":"/modeling/dimensions/parameters/required-access-grants"},{"title":"sample_values - Dimensions","sidebarTitle":"sample_values","href":"/modeling/dimensions/parameters/sample-values"},{"title":"skip_parent_label - Dimensions","sidebarTitle":"skip_parent_label","href":"/modeling/dimensions/parameters/skip-parent-label"},{"title":"sql - Dimensions","sidebarTitle":"sql","href":"/modeling/dimensions/parameters/sql"},{"title":"suggest_from_field - Dimensions","sidebarTitle":"suggest_from_field","href":"/modeling/dimensions/parameters/suggest-from-field"},{"title":"suggest_from_topic - Dimensions","sidebarTitle":"suggest_from_topic","href":"/modeling/dimensions/parameters/suggest-from-topic"},{"title":"suggestion_list - Dimensions","sidebarTitle":"suggestion_list","href":"/modeling/dimensions/parameters/suggestion-list"},{"title":"synonyms - Dimensions","sidebarTitle":"synonyms","href":"/modeling/dimensions/parameters/synonyms"},{"title":"tags - Dimensions","sidebarTitle":"tags","href":"/modeling/dimensions/parameters/tags"},{"title":"timeframes - Dimensions","sidebarTitle":"timeframes","href":"/modeling/dimensions/parameters/timeframes"},{"title":"view_label - Dimensions","sidebarTitle":"view_label","href":"/modeling/dimensions/parameters/view-label"},{"title":"week_start_day - Dimensions","sidebarTitle":"week_start_day","href":"/modeling/dimensions/parameters/week-start-day"}]}]},{"group":"Joins","root":{"title":"Relationships and joins","sidebarTitle":"Overview","href":"/modeling/relationships/index"},"pages":[{"title":"Creating table joins","sidebarTitle":"Build table joins","href":"/modeling/relationships/build"},{"group":"Parameters","root":{"title":"Relationship file parameters","sidebarTitle":"All parameters","href":"/modeling/relationships/parameters/index"},"pages":[{"title":"id - Relationships","sidebarTitle":"id","href":"/modeling/relationships/parameters/id"},{"title":"join_from_view - Relationships","sidebarTitle":"join_from_view","href":"/modeling/relationships/parameters/join-from-view"},{"title":"join_from_view_as - Relationships","sidebarTitle":"join_from_view_as","href":"/modeling/relationships/parameters/join-from-view-as"},{"title":"join_from_view_as_label - Relationships","sidebarTitle":"join_from_view_as_label","href":"/modeling/relationships/parameters/join-from-view-as-label"},{"title":"join_to_view - Relationships","sidebarTitle":"join_to_view","href":"/modeling/relationships/parameters/join-to-view"},{"title":"join_to_view_as - Relationships","sidebarTitle":"join_to_view_as","href":"/modeling/relationships/parameters/join-to-view-as"},{"title":"join_to_view_as_label - Relationships","sidebarTitle":"join_to_view_as_label","href":"/modeling/relationships/parameters/join-to-view-as-label"},{"title":"join_type - Relationships","sidebarTitle":"join_type","href":"/modeling/relationships/parameters/join-type"},{"title":"on_sql - Relationships","sidebarTitle":"on_sql","href":"/modeling/relationships/parameters/on-sql"},{"title":"relationship_type - Relationships","sidebarTitle":"relationship_type","href":"/modeling/relationships/parameters/relationship-type"},{"title":"reversible - Relationships","sidebarTitle":"reversible","href":"/modeling/relationships/parameters/reversible"},{"title":"where_sql - Relationships","sidebarTitle":"where_sql","href":"/modeling/relationships/parameters/where-sql"}]}]},{"group":"Filters","root":{"title":"Filter syntax","sidebarTitle":"Syntax","href":"/modeling/filters/index"},"pages":[{"title":"Filter examples","sidebarTitle":"Examples","href":"/modeling/filters/examples"},{"group":"Operators","root":{"title":"Filter operators","sidebarTitle":"All operators","href":"/modeling/filters/operators/index"},"pages":[{"group":"Conditional","pages":[{"title":"and - Filter operators","sidebarTitle":"and","href":"/modeling/filters/operators/and"},{"title":"is - Filter operators","sidebarTitle":"is","href":"/modeling/filters/operators/is"},{"title":"not - Filter operators","sidebarTitle":"not","href":"/modeling/filters/operators/not"},{"title":"or - Filter operators","sidebarTitle":"or","href":"/modeling/filters/operators/or"}]},{"group":"Advanced","pages":[{"title":"cancel_query_filter - Filter operators","sidebarTitle":"cancel_query_filter","href":"/modeling/filters/operators/cancel-query-filter"},{"title":"exclude_from_bind_all - Filter operators","sidebarTitle":"exclude_from_bind_all","href":"/modeling/filters/operators/exclude-from-bind-all"},{"title":"exclude_from_level_of_detail - Filter operators","sidebarTitle":"exclude_from_level_of_detail","href":"/modeling/filters/operators/exclude-from-level-of-detail"},{"title":"field_name_in_query - Filter operators","sidebarTitle":"field_name_in_query","href":"/modeling/filters/operators/field-name-in-query"},{"title":"field_name_not_in_query - Filter operators","sidebarTitle":"field_name_not_in_query","href":"/modeling/filters/operators/field-name-not-in-query"},{"title":"required - Filter operators","sidebarTitle":"required","href":"/modeling/filters/operators/required"}]},{"group":"Date \u0026 time","pages":[{"title":"before - Filter operators","sidebarTitle":"before","href":"/modeling/filters/operators/before"},{"title":"between_dates - Filter operators","sidebarTitle":"between_dates","href":"/modeling/filters/operators/between-dates"},{"title":"date_offset_from_query - Filter operators","sidebarTitle":"date_offset_from_query","href":"/modeling/filters/operators/date-offset-from-query"},{"title":"day_of_month - Filter operators","sidebarTitle":"day_of_month","href":"/modeling/filters/operators/day-of-month"},{"title":"day_of_quarter - Filter operators","sidebarTitle":"day_of_quarter","href":"/modeling/filters/operators/day-of-quarter"},{"title":"day_of_week - Filter operators","sidebarTitle":"day_of_week","href":"/modeling/filters/operators/day-of-week"},{"title":"day_of_year - Filter operators","sidebarTitle":"day_of_year","href":"/modeling/filters/operators/day-of-year"},{"title":"hour_of_day - Filter operators","sidebarTitle":"hour_of_day","href":"/modeling/filters/operators/hour-of-day"},{"title":"month_of_year - Filter operators","sidebarTitle":"month_of_year","href":"/modeling/filters/operators/month-of-year"},{"title":"on_or_after - Filter operators","sidebarTitle":"on_or_after","href":"/modeling/filters/operators/on-or-after"},{"title":"quarter_of_year - Filter operators","sidebarTitle":"quarter_of_year","href":"/modeling/filters/operators/quarter-of-year"},{"title":"time_for_duration - Filter operators","sidebarTitle":"time_for_duration","href":"/modeling/filters/operators/time-for-duration"}]},{"group":"Number","pages":[{"title":"between - Filter operators","sidebarTitle":"between","href":"/modeling/filters/operators/between"},{"title":"greater_than - Filter operators","sidebarTitle":"greater_than","href":"/modeling/filters/operators/greater-than"},{"title":"greater_than_or_equal_to - Filter operators","sidebarTitle":"greater_than_or_equal_to","href":"/modeling/filters/operators/greater-than-or-equal-to"},{"title":"less_than - Filter operators","sidebarTitle":"less_than","href":"/modeling/filters/operators/less-than"},{"title":"less_than_or_equal_to - Filter operators","sidebarTitle":"less_than_or_equal_to","href":"/modeling/filters/operators/less-than-or-equal-to"}]},{"group":"Text","pages":[{"title":"case_insensitive - Filter operators","sidebarTitle":"case_insensitive","href":"/modeling/filters/operators/case-insensitive"},{"title":"contains - Filter operators","sidebarTitle":"contains","href":"/modeling/filters/operators/contains"},{"title":"ends_with - Filter operators","sidebarTitle":"ends_with","href":"/modeling/filters/operators/ends-with"},{"title":"is_empty - Filter operators","sidebarTitle":"is_empty","href":"/modeling/filters/operators/is-empty"},{"title":"starts_with - Filter operators","sidebarTitle":"starts_with","href":"/modeling/filters/operators/starts-with"},{"title":"sql_like - Filter operators","sidebarTitle":"sql_like","href":"/modeling/filters/operators/sql-like"}]}]}]},{"title":"Templated filters","sidebarTitle":"Parameterizing filters","href":"/modeling/templated-filters/index"}]},{"group":"Manage integrations","icon":"engine","pages":[{"group":"dbt","pages":[{"title":"Getting started with dbt","sidebarTitle":"Getting started","href":"/integrations/dbt/index"},{"group":"Connect Git","root":{"title":"Connecting a dbt Git repository to Omni","sidebarTitle":"Overview","href":"/integrations/dbt/setup/index"},"pages":[{"title":"Connecting an Azure DevOps dbt repository to Omni","sidebarTitle":"Azure DevOps","href":"/integrations/dbt/setup/azure-devops"},{"title":"Connecting a GitHub dbt repository to Omni","sidebarTitle":"GitHub","href":"/integrations/dbt/setup/github"},{"title":"Connecting a Gitlab dbt repository to Omni","sidebarTitle":"Gitlab","href":"/integrations/dbt/setup/gitlab"}]},{"title":"Connecting dbt platform","sidebarTitle":"Connect dbt platform","href":"/integrations/dbt/dbt-platform"},{"group":"Sync from dbt","pages":[{"title":"Triggering dbt syncs in Omni","sidebarTitle":"Trigger syncs","href":"/integrations/dbt/syncing-dbt"},{"title":"Integrating dbt's semantic layer with Omni","sidebarTitle":"Integrate dbt's semantic layer","href":"/integrations/dbt/semantic-layer"},{"title":"dbt metadata reference","sidebarTitle":"Metadata reference","href":"/integrations/dbt/metadata-reference"},{"title":"Debugging dbt sync issues","sidebarTitle":"Troubleshooting","href":"/integrations/dbt/debugging-sync-issues"}]},{"group":"Push to dbt","pages":[{"title":"Pushing descriptions to dbt","sidebarTitle":"Push descriptions","href":"/integrations/dbt/push-descriptions"},{"title":"Pushing exposures to dbt","sidebarTitle":"Push exposures","href":"/integrations/dbt/exposures"}]},{"group":"Develop in Omni","pages":[{"title":"Configuring dbt environments in Omni","sidebarTitle":"Configure environments","href":"/integrations/dbt/environments"},{"title":"Swapping dbt environments with virtual schemas","sidebarTitle":"Swap environments","href":"/integrations/dbt/virtual-schemas"},{"title":"Authoring dbt models in Omni","sidebarTitle":"Author models","href":"/integrations/dbt/models"},{"title":"Working with dbt and Git","sidebarTitle":"Work with Git","href":"/integrations/dbt/git-workflows"}]}]},{"group":"git","root":{"title":"Integrate git for model version control","sidebarTitle":"Overview","href":"/integrations/git/index"},"pages":[{"group":"Setup","root":{"title":"Setting up the git integration","sidebarTitle":"Overview","href":"/integrations/git/setup/index"},"pages":[{"title":"Connect an Azure DevOps repository to Omni","sidebarTitle":"Azure DevOps","href":"/integrations/git/setup/azure-devops"},{"title":"Connect a Bitbucket Cloud repository to Omni","sidebarTitle":"Bitbucket Cloud","href":"/integrations/git/setup/bitbucket-cloud"},{"title":"Connect a Bitbucket Data Center/Server repository to Omni","sidebarTitle":"Bitbucket Data Center/Server","href":"/integrations/git/setup/bitbucket-data-center"},{"title":"Connect a GitHub repository to Omni","sidebarTitle":"GitHub","href":"/integrations/git/setup/github"},{"title":"Connect a GitLab repository to Omni","sidebarTitle":"GitLab","href":"/integrations/git/setup/gitlab"}]},{"title":"Git integration best practices","sidebarTitle":"Best practices","href":"/integrations/git/best-practices"},{"group":"Follower mode","root":{"title":"git follower mode","sidebarTitle":"Overview","href":"/integrations/git/follower-mode/index"},"pages":[{"title":"Configuring git follower mode","sidebarTitle":"Configure follower mode","href":"/integrations/git/follower-mode/setup"},{"title":"git follower mode best practices","sidebarTitle":"Follower mode best practices","href":"/integrations/git/follower-mode/best-practices"}]},{"group":"Content in git","root":{"title":"Content in git","sidebarTitle":"Overview","href":"/integrations/git/content/index"},"pages":[{"title":"Syncing content to git","sidebarTitle":"Sync to git","href":"/integrations/git/content/sync-to-git"},{"title":"Repository structure for content in git","sidebarTitle":"Repository structure","href":"/integrations/git/content/repository-structure"},{"title":"Troubleshooting content in git","sidebarTitle":"Troubleshooting","href":"/integrations/git/content/troubleshooting"}]},{"title":"Configuring git integration settings","sidebarTitle":"Settings","href":"/integrations/git/settings"},{"title":"Webhook deliveries","sidebarTitle":"Webhook Deliveries","href":"/integrations/git/webhook-deliveries"},{"title":"Troubleshooting the Git integration","sidebarTitle":"Troubleshooting","href":"/integrations/git/troubleshooting"}]},{"group":"MCP Server","root":{"title":"AI MCP Server","sidebarTitle":"Overview","href":"/ai/mcp/index"},"pages":[{"title":"MCP authentication","sidebarTitle":"Authentication","href":"/ai/mcp/authentication"},{"title":"MCP server tools","sidebarTitle":"Tools","href":"/ai/mcp/tools"},{"group":"Setup","pages":[{"title":"Using the MCP Server in ChatGPT","sidebarTitle":"ChatGPT","href":"/ai/mcp/chatgpt"},{"title":"Using the MCP Server in Claude Code","sidebarTitle":"Claude Code","href":"/ai/mcp/claude-code"},{"title":"Using the MCP Server in Claude Desktop","sidebarTitle":"Claude Desktop","href":"/ai/mcp/claude-desktop"},{"title":"Using the MCP Server in Codex","sidebarTitle":"Codex","href":"/ai/mcp/codex"},{"title":"Using the MCP Server in Cursor","sidebarTitle":"Cursor","href":"/ai/mcp/cursor"},{"title":"Using the MCP Server in Microsoft Copilot","sidebarTitle":"Microsoft Copilot","href":"/ai/mcp/microsoft-copilot"},{"title":"Using the MCP Server in Visual Studio Code","sidebarTitle":"VS Code","href":"/ai/mcp/vscode"}]}]},{"title":"Omni Slack Agent","sidebarTitle":"Omni Slack Agent","href":"/integrations/omni-slack-agent"},{"group":"External AI context","root":{"title":"Connecting AI integrations","sidebarTitle":"Overview","href":"/integrations/ai/index"},"pages":[{"group":"Google","pages":[{"title":"Setting up Google AI integrations","sidebarTitle":"Setup","href":"/integrations/ai/google-setup"},{"title":"Google Calendar AI integration","sidebarTitle":"Google Calendar","href":"/integrations/ai/google-calendar"},{"title":"Google Drive AI integration","sidebarTitle":"Google Drive","href":"/integrations/ai/google-drive"}]},{"title":"GitHub AI integration","sidebarTitle":"GitHub","href":"/integrations/ai/github"},{"title":"Notion AI integration","sidebarTitle":"Notion","href":"/integrations/ai/notion"},{"title":"Slack AI integration","sidebarTitle":"Slack","href":"/integrations/ai/slack"}]}]}]},{"tab":"Admin","pages":[{"title":"Admin","href":"/administration"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides"}]},{"tab":"Library","pages":[{"title":"Library","href":"/library"}]},{"tab":"Developers","menu":[{"item":"REST APIs","icon":"cloud","description":"Programmatically interact with Omni","pages":[{"title":"REST APIs","href":"/api"}]},{"item":"Embedding","icon":"chart-column","description":"Embed Omni's analytics \u0026 AI in apps","pages":[{"title":"Embedding","href":"/embed"}]},{"item":"CLI","icon":"terminal","description":"Interact with Omni APIs from the terminal","pages":[{"title":"CLI","href":"/developers/cli"}]},{"item":"Agent skills","icon":"robot","description":"Bring Omni workflows into your agent environment","pages":[{"title":"Agent skills","href":"/developers/agent-skills"}]}],"pages":[{"title":"Developers","href":"/api"}]},{"tab":"Product updates","menu":[{"item":"Demos","icon":"rocket","description":"Weekly updates of upcoming and experimental features","pages":[{"title":"Demos","href":"/demos"}]},{"item":"Changelog","icon":"file-lines","description":"New features, improvements, and bug fixes","pages":[{"title":"Changelog","href":"/changelog"}]}],"pages":[{"title":"Product updates","href":"/demos"}]}]},"basePath":"","title":"Apps - Omni Docs","buildId":"dpl_GZsjphRpnhWkstV12jxWNcMHFyox","deploymentId":"dpl_GZsjphRpnhWkstV12jxWNcMHFyox","dynamics":["10e4515597","07c022d89b","a74be98ba7"],"chunks":["BannerMarkdown-B2eHeXx_.js","dist-Dt1IougW.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-DptzKFCt.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","Frame-BJc2v2A3.js","DynamicMarkdown-CWvhfcZc.js","zoom-image-lightbox-CAita2ok.js","lightbox-handle-r17bVUz3.js"]}