Connect a GitHub repository to an Omni model using SSH deploy keys, HTTPS token authentication, or GitHub App authentication
Omni supports the following methods for connecting to a GitHub repository:
GitHub App authentication - Uses a GitHub app to perform authentication. Enables commit signing.
SSH authentication — Uses a deploy key and webhooks to connect Omni to your repository. This is the traditional method and requires configuring both a deploy key and a webhook in GitHub. You can either:
Use the deploy key Omni generates by default
Generate your own keypair and supply Omni with the private key
HTTPS token authentication — Uses a GitHub fine-grained access token to authenticate
Choose the method that best fits your team’s security requirements and preferences.
After the setup is complete, you can configure the integration’s behavior by changing its settings. Refer to the git integration settings reference for more information.
{"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":"6aea1608847e2d9213069e2d","collectionId":"97625c6d-68b6-443b-9117-f1a027405aa5","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aea1608847e2d9213069e2d"},"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":"6aea1608847e2d9213069e2d","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"Docs","count":503},{"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}},"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":"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":"byok-sep-25","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":"billing-updated-9-15","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}],"privacy":{"consentBanner":{"enabled":false}},"googleFontsInlined":true},"customCss":[{"filePath":"styles.css","content":"img{border:1px solid;border-color:rgb(var(--gray-200))}.nav-logo,.no-border{border:0}#banner{color:#fcfcf7;font-weight:600}#topbar-cta-button,[data-testid=rss-feed-button]{transition:background-color .2s ease,transform .1s ease}#topbar-cta-button{background-color:#ff5fa2;padding:0;border-radius:160px;text-decoration:none;font-weight:800;cursor:pointer}#topbar-cta-button span{background-color:transparent!important}#topbar-cta-button>a{padding:8px 14px!important}#topbar-cta-button,#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/.1)!important}.dark .navbar-link a:hover{background-color:rgb(255 255 255/.2)!important}[data-testid=rss-feed-button]{border-color:#ff5fa2!important;color:#ff5fa2!important;border-radius:160px!important;gap:6px}[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,.05)!important;transform:translateY(-1px)}.dark [data-testid=rss-feed-button]:hover{background-color:rgba(255,95,162,.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:0 0 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 .15s ease}.guide-sidebar-back:hover,.guide-sidebar-links a{color:rgb(var(--primary))}.guide-sidebar-section{margin-bottom:20px}.guide-sidebar-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.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,.dark .guide-sidebar-progress-text{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))}.guide-sidebar-links a{font-size:14px;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) .guide-sidebar-links a,:has(>.guide-header) a.guide-sidebar-back:hover{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}.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-links),.guide-sidebar-section:has(.guide-sidebar-progress){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,.03);color:#faf5f7}.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) a,.dark :has(>.guide-header) h1,.dark :has(>.guide-header) h2,.dark :has(>.guide-header) h3,.dark :has(>.guide-header) strong{color:rgb(var(--gray-50))}:has(>.guide-header) h1{font-size:2.25rem;margin:0 0 16px}:has(>.guide-header) h2{font-size:1.5rem;font-weight:600;margin:32px 0 16px;line-height:1.3}:has(>.guide-header) [data-component-part=step-title]{margin:0 0 16px}:has(>.guide-header) h3{font-size:1.25rem;font-weight:600;margin:24px 0 12px;line-height:1.4}:has(>.guide-header) [data-as=p],:has(>.guide-header) p{display:block;margin:16px 0;line-height:1.7}:has(>.guide-header)>.guide-header+[data-as=p],:has(>.guide-header)>.guide-header+p{margin-top:0}:has(>.guide-header) ol:not(.not-prose),:has(>.guide-header) ul: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:#111827;text-decoration:none;font-weight:600;border-bottom:1px solid rgb(var(--primary))}:has(>.guide-header) a:hover{border-bottom-width:2px}:has(>.guide-header) strong,:has(>.guide-header) th{font-weight:600;color:rgb(var(--gray-900))}:has(>.guide-header) code{font-size:.9em}:has(>.guide-header) table{width:100%;border-collapse:collapse;margin:16px 0}:has(>.guide-header) th{text-align:left;padding:8px 16px 8px 0;border-bottom:1px solid rgb(var(--gray-200))}.dark :has(>.guide-header) th{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,.dark :has(>.guide-header) th{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!important}:has(>.guide-header) [data-component-part=card-content]{font-size:.875rem!important;line-height:1.5!important}:has(>.guide-header) [data-component-part=card-content] [data-as=p]{font-size:.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,.dark .guides-filter-label{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,.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:.05em;color:#1e191a;margin-bottom:8px}.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:#e6e1e2;font-size:14px;box-sizing:border-box;background-color:rgba(17,12,14,.03);color:#777274}.dark .guides-filter-input{background-color:rgba(255,255,255,.03);border-color:#334155;color:rgba(255,255,255,.5)}.guides-filter-input:focus{outline:0;border-color:#ff5fa2}.dark .guides-filter-input::placeholder{color:rgba(255,255,255,.5)}.guides-clear-button,.guides-filter-button{width:100%;border:1px solid #e2e8f0;border-radius:160px;color:#334155;font-size:14px;cursor:pointer;transition:all .15s ease}.guides-filter-button{display:block;padding:8px 12px;margin-bottom:4px;background:0 0;text-align:left}.dark .guides-filter-button{color:#cbd5e1;border-color:rgba(255,255,255,.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,.15)}.guides-clear-button{padding:10px 12px;margin-bottom:16px;background:#f8fafc;font-weight:500}.dark .guides-clear-button{background:#0e0b0e;color:#e2e8f0;border-color:rgba(255,255,255,.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 .15s ease,box-shadow .15s ease;background-color:#fcfcf7}.dark .guides-card{border-color:rgba(255,255,255,.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,.08)}.dark .guides-card:hover{box-shadow:0 2px 8px rgba(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,.03);color:#faf5f7}.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:#fff}.lib-logo-chip img{border:0;border-radius:0}.endpoint-table{table-layout:fixed}.endpoint-table td:first-child,.endpoint-table th:first-child{width:18rem;min-width:18rem;max-width:18rem}.endpoint-table td:last-child,.endpoint-table th:last-child{width:8rem;min-width:8rem;max-width:8rem}.icon{border:0}.icons{background-color:#000}.dark .icons{background-color:rgb(var(--gray-50))}.icon-position{display:inline;vertical-align:middle}[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:.75rem;padding:0 2rem .5rem;text-align:center;font-size:.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 [data-as=p],.side-by-side-body p{display:block;margin:1rem 0}.side-by-side-body .side-by-side-title{margin: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,.guides-title,:has(>.guide-header) h1{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":"integrations/git/setup/github","slug":"/integrations/git/setup/github","pageMetadata":{"title":"Connect a GitHub repository to Omni","sidebarTitle":"GitHub","description":"Connect a GitHub repository to an Omni model using SSH deploy keys, HTTPS token authentication, or GitHub App authentication","keywords":["https authentication","ssh authentication","fine-grained access token","github","https token","github repository","git","github app","github app authentication","commit signing","verified commit"],"href":"/integrations/git/setup/github"},"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: \"Connect a GitHub repository to an Omni model using SSH deploy keys, HTTPS token authentication, or GitHub App authentication\"\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 token_0=`GitHub fine-grained personal access token`;const keyInstructions_1=`Paste the contents of the omni_deploy_key.pub file from the previous step`;const writeAccess_1=`Check this box, which will allow Omni to push changes made in Omni to the repository`;const keyInstructions_0=`Copy the public key from the Omni Git settings page and paste it into this field`;const writeAccess_0=`Check this box, which will allow Omni to push changes made in Omni to the repository`;const type_3=`HTTPS`;const type_2=`SSH`;const type_1=`SSH`;const type_0=`HTTPS`;const introCopy_3=`configure HTTPS token authentication`;const provider_3=`GitHub`;const permission1_3=`Create fine-grained personal access tokens that can access the repository`;const permission2_3=undefined;const introCopy_2=`configure SSH with your own private key`;const provider_2=`GitHub`;const permission1_2=`Add webhooks and deploy/SSH keys to repositories`;const permission2_2=undefined;const introCopy_1=`configure SSH with an Omni deploy key`;const provider_1=`GitHub`;const permission1_1=`Add webhooks and deploy/SSH keys to repositories`;const permission2_1=undefined;const introCopy_0=`configure GitHub App authentication`;const provider_0=`GitHub`;const permission1_0=`Install GitHub Apps on the repository or organization`;const permission2_0=undefined;function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Frame,Heading,Note,OptimizedImage,Step,Steps,Tab,Tabs,Tip,View}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,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(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!View)_missingMdxReference(`View`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Omni supports the following methods for connecting to a GitHub repository:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`GitHub App authentication`}),` - Uses a GitHub app to perform authentication. Enables commit signing.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`SSH authentication`}),` — Uses a deploy key and webhooks to connect Omni to your repository. This is the traditional method and requires configuring both a deploy key and a webhook in GitHub. You can either:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Use the deploy key Omni generates by default`}),`\n`,_jsx(_components.li,{children:`Generate your own keypair and supply Omni with the private key`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`HTTPS token authentication`}),` — Uses a GitHub fine-grained access token to authenticate`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Choose the method that best fits your team’s security requirements and preferences.`}),`\n`,_jsxs(View,{title:`Select authentication method`,id:`select-authentication-method`,children:[_jsx(Heading,{level:`2`,id:`select-an-authentication-method`,children:`Select an authentication method`}),_jsxs(Note,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`To view instructions for your authentication method`}),`, select it from the `,_jsx(_components.strong,{children:`dropdown menu`}),` on the right side of the page, above the table of contents.`]}),_jsx(Frame,{caption:`Select your authentication method from the dropdown to view setup instructions`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/omni-e7402367/z4NfWcJoMfO93ijI/integrations/images/git-select-auth-method.png?fit=max\u0026auto=format\u0026n=z4NfWcJoMfO93ijI\u0026q=85\u0026s=e95edc19fad7856990cb7b855fa72e2c`,alt:`Authentication method selection menu on right side of this page`,\"data-og-width\":`278`,width:`278`,\"data-og-height\":`170`,height:`170`,\"data-path\":`integrations/images/git-select-auth-method.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/omni-e7402367/z4NfWcJoMfO93ijI/integrations/images/git-select-auth-method.png?w=280\u0026fit=max\u0026auto=format\u0026n=z4NfWcJoMfO93ijI\u0026q=85\u0026s=2a6a5f55ad0132ffd8d14c51630bc5d9 280w, https://mintcdn.com/omni-e7402367/z4NfWcJoMfO93ijI/integrations/images/git-select-auth-method.png?w=560\u0026fit=max\u0026auto=format\u0026n=z4NfWcJoMfO93ijI\u0026q=85\u0026s=bf104e69d88ccc8537c19e2d7d34ff43 560w, https://mintcdn.com/omni-e7402367/z4NfWcJoMfO93ijI/integrations/images/git-select-auth-method.png?w=840\u0026fit=max\u0026auto=format\u0026n=z4NfWcJoMfO93ijI\u0026q=85\u0026s=12d2bd3afdc1de0be95946995d0ab111 840w, https://mintcdn.com/omni-e7402367/z4NfWcJoMfO93ijI/integrations/images/git-select-auth-method.png?w=1100\u0026fit=max\u0026auto=format\u0026n=z4NfWcJoMfO93ijI\u0026q=85\u0026s=23289ed10402a6c4f5f6b23b99b02b30 1100w, https://mintcdn.com/omni-e7402367/z4NfWcJoMfO93ijI/integrations/images/git-select-auth-method.png?w=1650\u0026fit=max\u0026auto=format\u0026n=z4NfWcJoMfO93ijI\u0026q=85\u0026s=f233e75fe0c9e57c0ae713c63d284df0 1650w, https://mintcdn.com/omni-e7402367/z4NfWcJoMfO93ijI/integrations/images/git-select-auth-method.png?w=2500\u0026fit=max\u0026auto=format\u0026n=z4NfWcJoMfO93ijI\u0026q=85\u0026s=5afedaaa4def2f73aa80c0ded755758f 2500w`})})]})]}),`\n`,_jsxs(View,{title:`GitHub App`,id:`github-app`,children:[_jsx(Heading,{level:`2`,id:`requirements`,children:`Requirements`}),_jsxs(_components.p,{children:[`To `,introCopy_0,`, you’ll need:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/administration/users/permissions`,children:_jsx(_components.strong,{children:`Connection Admin permissions`})}),` for the Omni model you want to connect to git`]}),`\n`,_jsx(_components.li,{children:_jsxs(_components.strong,{children:[`An existing `,provider_0,` repository`]})}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Permissions in `,provider_0,` that allow you to:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,permission1_0,`\n`]}),`\n`]}),`\n`]}),`\n`]}),_jsxs(_components.p,{children:[`Refer to `,_jsx(_components.a,{href:`https://docs.github.com/en/get-started/learning-about-github/access-permissions-on-github`,children:`GitHub’s documentation`}),` for information about user permissions.`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`GitHub App authentication is only available for `,_jsx(_components.code,{children:`github.com`}),` repositories. This option only appears if your Omni instance has the GitHub App configured. If you don’t see this option and want to use it, reach out to Omni support.`]})}),_jsx(Heading,{level:`2`,id:`configure-github-app-authentication`,children:`Configure GitHub App authentication`}),_jsx(_components.p,{children:`In this guide, you’ll set up GitHub App authentication using the Omni GitHub App.`}),_jsxs(Steps,{titleSize:`h3`,children:[_jsxs(Step,{title:`Retrieve the repository's HTTPS URL`,id:`retrieve-the-repositorys-https-url`,children:[_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`In your browser, navigate to the GitHub repository you want to connect to Omni.`}),`\n`,_jsxs(_components.li,{children:[`Click the `,_jsx(_components.strong,{children:`Code`}),` button.`]}),`\n`,_jsxs(_components.li,{children:[`In the modal that displays, locate the `,_jsx(_components.strong,{children:type_0}),` option.`]}),`\n`]}),_jsx(_components.p,{children:`Keep this page open - you’ll need it in the next step.`})]}),_jsxs(Step,{title:`Launch the Omni GitHub App installation flow`,id:`launch-the-omni-github-app-installation-flow`,children:[_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In Omni, click `,_jsx(_components.strong,{children:`Develop`}),` in the `,_jsx(_components.a,{href:`/administration/settings/sidebar`,children:`sidebar`}),`.`]}),`\n`,_jsx(_components.li,{children:`If your organization has more than one model, click the model you want to connect to git. If you have only one model, Omni opens it automatically.`}),`\n`,_jsxs(_components.li,{children:[`In the model IDE, click `,_jsx(_components.strong,{children:`Model > Advanced > Git settings`}),`.`]}),`\n`]}),_jsxs(_components.ol,{start:`4`,children:[`\n`,_jsxs(_components.li,{children:[`From the `,_jsx(_components.strong,{children:`Authentication Method`}),` dropdown, select `,_jsx(_components.strong,{children:`GitHub App`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`HTTPS URL`}),` field, copy and paste the repository’s HTTPS URL from Step 1.`]}),`\n`,_jsxs(_components.li,{children:[`Next to the `,_jsx(_components.strong,{children:`Installation ID`}),` field, click the `,_jsx(_components.strong,{children:`Install the Omni GitHub App`}),` link.`]}),`\n`]}),_jsx(_components.p,{children:`GitHub will open in another tab in your browser. Leave this page open and finish the app installation in the other tab.`})]}),_jsxs(Step,{title:`Install the Omni GitHub App`,id:`install-the-omni-github-app`,children:[_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`In GitHub, select the repository you want to connect.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Complete the installation.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`After you complete the installation, retrieve the app’s `,_jsx(_components.strong,{children:`installation ID`}),` from the page URL:`]}),`\n`,_jsx(Frame,{caption:`The installation ID is the string of numbers after the final forward slash in the page URL. In this example, the ID is 149469922.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/omni-e7402367/FnnxljlPEokrSOpD/integrations/images/github-app-installation-id.png?fit=max\u0026auto=format\u0026n=FnnxljlPEokrSOpD\u0026q=85\u0026s=0d8403c6f6a112915dbaaf8a5d00448c`,alt:`Highlighted app installation ID in the page URL`,\"data-og-width\":`1050`,width:`1050`,\"data-og-height\":`373`,height:`373`,\"data-path\":`integrations/images/github-app-installation-id.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/omni-e7402367/FnnxljlPEokrSOpD/integrations/images/github-app-installation-id.png?w=280\u0026fit=max\u0026auto=format\u0026n=FnnxljlPEokrSOpD\u0026q=85\u0026s=8448fbfc06d87e71722d19728d1eabd9 280w, https://mintcdn.com/omni-e7402367/FnnxljlPEokrSOpD/integrations/images/github-app-installation-id.png?w=560\u0026fit=max\u0026auto=format\u0026n=FnnxljlPEokrSOpD\u0026q=85\u0026s=7f676b7e2be67c4c18adc7a5579a5387 560w, https://mintcdn.com/omni-e7402367/FnnxljlPEokrSOpD/integrations/images/github-app-installation-id.png?w=840\u0026fit=max\u0026auto=format\u0026n=FnnxljlPEokrSOpD\u0026q=85\u0026s=2be607b9f59ca36ee56de23821968115 840w, https://mintcdn.com/omni-e7402367/FnnxljlPEokrSOpD/integrations/images/github-app-installation-id.png?w=1100\u0026fit=max\u0026auto=format\u0026n=FnnxljlPEokrSOpD\u0026q=85\u0026s=326cb230f97f2ed9a5bce6e6b19583cb 1100w, https://mintcdn.com/omni-e7402367/FnnxljlPEokrSOpD/integrations/images/github-app-installation-id.png?w=1650\u0026fit=max\u0026auto=format\u0026n=FnnxljlPEokrSOpD\u0026q=85\u0026s=50cef55372b9612f2dc100cc7e097273 1650w, https://mintcdn.com/omni-e7402367/FnnxljlPEokrSOpD/integrations/images/github-app-installation-id.png?w=2500\u0026fit=max\u0026auto=format\u0026n=FnnxljlPEokrSOpD\u0026q=85\u0026s=37e1b4908d01048a23d8414cd782029c 2500w`})}),`\n`]}),`\n`]}),_jsx(_components.p,{children:`The installation ID is the string of numbers after the last forward slash in the page URL.`})]}),_jsx(Step,{title:`Configure the Git settings in Omni`,id:`configure-the-git-settings-in-omni`,children:_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Navigate back to the Omni Git settings page.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Finish configuring the integration’s settings:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Installation ID`}),` - Paste the installation ID you copied from GitHub in the previous step`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Base Branch`}),` - Enter the name of the default branch for the repository. Omni will default to `,_jsx(_components.code,{children:`main`}),` unless a different name is specified.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Git follower`}),` - Select this option if the repository should be treated as a `,_jsx(_components.a,{href:`/integrations/git/follower-mode`,children:`follower`}),`.`]}),`\n`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`If you want to configure `,_jsx(_components.a,{href:`#configure-commit-signing`,children:`commit signing`}),`, enter a `,_jsx(_components.strong,{children:`Committer name`}),` and `,_jsx(_components.strong,{children:`Committer email`}),`. You won’t be able to change these after clicking `,_jsx(_components.strong,{children:`Configure git`}),`.`]})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Configure Git`}),`.`]}),`\n`]}),`\n`]})}),_jsxs(Step,{title:`Configure commit signing`,id:`configure-commit-signing`,children:[_jsx(Note,{children:_jsx(_components.p,{children:`This step is optional.`})}),_jsxs(_components.p,{children:[`Authenticating through Omni’s GitHub app allows you to enable commit signing. When a user with a verified email adds Omni’s public signing key, Omni’s commits will show up as `,_jsx(_components.strong,{children:`Verified`}),`.`]}),_jsxs(_components.p,{children:[`The user with the verified `,_jsx(_components.strong,{children:`Committer email`}),` you defined in the previous step must complete the following to configure commit signing:`]}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In GitHub, navigate to `,_jsx(_components.strong,{children:`Settings > SSH and GPG keys`}),`. `,_jsx(_components.strong,{children:`Note`}),`: This is an individual `,_jsx(_components.strong,{children:`user’s`}),` settings, not the connected repository’s settings.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`New SSH key`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Set the `,_jsx(_components.strong,{children:`Key type`}),` to `,_jsx(_components.strong,{children:`Signing key`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`Key`}),` field, paste the public key from the Omni Git settings page.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Add SSH key`}),`.`]}),`\n`]})]}),_jsx(Step,{title:`Add repository webhooks`,id:`add-repository-webhooks`,children:_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`The repository settings page should still be open in GitHub. If not, re-open it.`}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Webhooks`}),`, located in the `,_jsx(_components.strong,{children:`Code and automation`}),` section of the sidebar.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Add webhook`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Fill in the fields as follows:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Payload URL`}),` - From the Omni `,_jsx(_components.strong,{children:`Git settings`}),` page, copy the `,_jsx(_components.strong,{children:`Payload URL`}),` and paste it into this field.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Content type`}),` - Select the `,_jsx(_components.strong,{children:`application/json`}),` option.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Secret`}),` - From the Omni `,_jsx(_components.strong,{children:`Git settings`}),` page, copy the `,_jsx(_components.strong,{children:`Webhook secret`}),` and paste it into this field.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`SSL verification`}),` - Omni recommends leaving SSL verification enabled.`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`Which events would you like to trigger this webhook?`}),` section:`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Let me select individual events`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Select the `,_jsx(_components.strong,{children:`Pull request`}),` event.`]}),`\n`,_jsxs(_components.li,{children:[`If the `,_jsx(_components.strong,{children:`Push`}),` event is selected, deselect it.`]}),`\n`,_jsxs(_components.li,{children:[`When finished, click `,_jsx(_components.strong,{children:`Add webhook`}),`.`]}),`\n`]})}),_jsx(Step,{title:`Test the connection`,id:`test-the-connection`,children:_jsxs(_components.p,{children:[`To verify the setup, navigate back to the `,_jsx(_components.strong,{children:`Git settings`}),` page in Omni. Click the `,_jsx(_components.strong,{children:`Test git connection`}),` button near the top of the page to test the connection.`]})})]})]}),`\n`,_jsxs(View,{title:`SSH + Omni deploy key`,id:`ssh-omni-deploy-key`,children:[_jsx(Heading,{level:`2`,id:`requirements-2`,children:`Requirements`}),_jsxs(_components.p,{children:[`To `,introCopy_1,`, you’ll need:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/administration/users/permissions`,children:_jsx(_components.strong,{children:`Connection Admin permissions`})}),` for the Omni model you want to connect to git`]}),`\n`,_jsx(_components.li,{children:_jsxs(_components.strong,{children:[`An existing `,provider_1,` repository`]})}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Permissions in `,provider_1,` that allow you to:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,permission1_1,`\n`]}),`\n`]}),`\n`]}),`\n`]}),_jsxs(_components.p,{children:[`Refer to `,_jsx(_components.a,{href:`https://docs.github.com/en/get-started/learning-about-github/access-permissions-on-github`,children:`GitHub’s documentation`}),` for information about user permissions.`]}),_jsx(Heading,{level:`2`,id:`configure-ssh-authentication-with-an-omni-deploy-key`,children:`Configure SSH authentication with an Omni deploy key`}),_jsx(_components.p,{children:`In this guide, you’ll set up SSH authentication that uses the deploy key Omni generates for you.`}),_jsxs(Steps,{titleSize:`h3`,children:[_jsxs(Step,{title:`Retrieve the repository's SSH URL`,id:`retrieve-the-repositorys-ssh-url`,children:[_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`In your browser, navigate to the GitHub repository you want to connect to Omni.`}),`\n`,_jsxs(_components.li,{children:[`Click the `,_jsx(_components.strong,{children:`Code`}),` button.`]}),`\n`,_jsxs(_components.li,{children:[`In the modal that displays, locate the `,_jsx(_components.strong,{children:type_1}),` option.`]}),`\n`]}),_jsx(_components.p,{children:`Keep this page open - you’ll need it in the next step.`})]}),_jsxs(Step,{title:`Connect the repository to Omni`,id:`connect-the-repository-to-omni`,children:[_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In Omni, click `,_jsx(_components.strong,{children:`Develop`}),` in the `,_jsx(_components.a,{href:`/administration/settings/sidebar`,children:`sidebar`}),`.`]}),`\n`,_jsx(_components.li,{children:`If your organization has more than one model, click the model you want to connect to git. If you have only one model, Omni opens it automatically.`}),`\n`,_jsxs(_components.li,{children:[`In the model IDE, click `,_jsx(_components.strong,{children:`Model > Advanced > Git settings`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`You’ll be prompted to enter connection details for the repository:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Authentication Method`}),` - Select `,_jsx(_components.strong,{children:`SSH (Deploy Key)`}),` from the dropdown.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`SSH URL`}),` - Copy and paste the repository’s SSH URL from Step 1.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Base Branch`}),` - Enter the name of the default branch for the repository. Omni will default to `,_jsx(_components.code,{children:`main`}),` unless a different name is specified.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Git follower`}),` - Select this option if the repository should be treated as a `,_jsx(_components.a,{href:`/integrations/git/follower-mode`,children:`follower`}),`.`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Configure Git`}),`.`]}),`\n`]}),_jsx(_components.p,{children:`The page will update to display additional git settings, including information for deploy keys and webhooks.`})]}),_jsxs(Step,{title:`Add a repository deploy key`,id:`add-a-repository-deploy-key`,children:[_jsx(Note,{children:_jsxs(_components.p,{children:[`If the repository is already linked to another Omni model or connected through the `,_jsx(_components.a,{href:`/integrations/dbt`,children:`dbt integration`}),`, skip this step. Omni will use the existing deploy key.`]})}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In the GitHub repository, click the `,_jsx(_components.strong,{children:`Settings`}),` tab.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Deploy keys`}),`, located in the `,_jsx(_components.strong,{children:`Security`}),` section of the sidebar.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Add deploy key`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Fill in the fields as follows:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Title`}),` - Enter a descriptive title to help you identify what the key is used for. For example, `,_jsx(_components.em,{children:`Omni Snowflake Model`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Key`}),` - `,keyInstructions_0]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Allow write access`}),` - `,writeAccess_0]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Add key`}),`.`]}),`\n`]})]}),_jsxs(Step,{title:`Add repository webhooks`,id:`add-repository-webhooks-2`,children:[_jsx(Note,{children:_jsx(_components.p,{children:`If the repository is already linked to another Omni model, skip this step. Omni will use the existing webhook configuration.`})}),_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`The repository settings page should still be open in GitHub. If not, re-open it.`}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Webhooks`}),`, located in the `,_jsx(_components.strong,{children:`Code and automation`}),` section of the sidebar.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Add webhook`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Fill in the fields as follows:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Payload URL`}),` - From the Omni `,_jsx(_components.strong,{children:`Git settings`}),` page, copy the `,_jsx(_components.strong,{children:`Payload URL`}),` and paste it into this field.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Content type`}),` - Select the `,_jsx(_components.strong,{children:`application/json`}),` option.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Secret`}),` - From the Omni `,_jsx(_components.strong,{children:`Git settings`}),` page, copy the `,_jsx(_components.strong,{children:`Webhook secret`}),` and paste it into this field.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`SSL verification`}),` - Omni recommends leaving SSL verification enabled.`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`Which events would you like to trigger this webhook?`}),` section:`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Let me select individual events`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Select the `,_jsx(_components.strong,{children:`Pull request`}),` event.`]}),`\n`,_jsxs(_components.li,{children:[`If the `,_jsx(_components.strong,{children:`Push`}),` event is selected, deselect it.`]}),`\n`,_jsxs(_components.li,{children:[`When finished, click `,_jsx(_components.strong,{children:`Add webhook`}),`.`]}),`\n`]})]}),_jsx(Step,{title:`Test the connection`,id:`test-the-connection-2`,children:_jsxs(_components.p,{children:[`To verify the setup, navigate back to the `,_jsx(_components.strong,{children:`Git settings`}),` page in Omni. Click the `,_jsx(_components.strong,{children:`Test git connection`}),` button near the top of the page to test the connection.`]})})]})]}),`\n`,_jsxs(View,{title:`SSH + Your private key`,id:`ssh-your-private-key`,children:[_jsx(Heading,{level:`2`,id:`requirements-3`,children:`Requirements`}),_jsxs(_components.p,{children:[`To `,introCopy_2,`, you’ll need:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/administration/users/permissions`,children:_jsx(_components.strong,{children:`Connection Admin permissions`})}),` for the Omni model you want to connect to git`]}),`\n`,_jsx(_components.li,{children:_jsxs(_components.strong,{children:[`An existing `,provider_2,` repository`]})}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Permissions in `,provider_2,` that allow you to:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,permission1_2,`\n`]}),`\n`]}),`\n`]}),`\n`]}),_jsxs(_components.p,{children:[`Refer to `,_jsx(_components.a,{href:`https://docs.github.com/en/get-started/learning-about-github/access-permissions-on-github`,children:`GitHub’s documentation`}),` for information about user permissions.`]}),_jsx(_components.p,{children:`To generate the keypair and supply the private key to Omni, you’ll also need:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`An `,_jsx(_components.a,{href:`/api/authentication`,children:`Omni API key`})]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`The shared model’s `,_jsx(_components.code,{children:`modelId`}),`,`]}),` which you can retrieve using the `,_jsx(_components.a,{href:`/api/models/list-models`,children:`List models`}),` endpoint`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`ssh-keygen`}),` installed locally`]}),` to generate keypairs`]}),`\n`]}),_jsx(Heading,{level:`2`,id:`configure-ssh-authentication-with-your-private-key`,children:`Configure SSH authentication with your private key`}),_jsx(_components.p,{children:`In this guide, you’ll set up SSH authentication that uses the private key you generate as part of a public-private keypair.`}),_jsxs(Steps,{titleSize:`h3`,children:[_jsxs(Step,{title:`Retrieve the repository's SSH URL`,id:`retrieve-the-repositorys-ssh-url-2`,children:[_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`In your browser, navigate to the GitHub repository you want to connect to Omni.`}),`\n`,_jsxs(_components.li,{children:[`Click the `,_jsx(_components.strong,{children:`Code`}),` button.`]}),`\n`,_jsxs(_components.li,{children:[`In the modal that displays, locate the `,_jsx(_components.strong,{children:type_2}),` option.`]}),`\n`]}),_jsx(_components.p,{children:`Keep this page open - you’ll need it in the next step.`})]}),_jsxs(Step,{title:`Connect the repository to Omni`,id:`connect-the-repository-to-omni-2`,children:[_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In Omni, click `,_jsx(_components.strong,{children:`Develop`}),` in the `,_jsx(_components.a,{href:`/administration/settings/sidebar`,children:`sidebar`}),`.`]}),`\n`,_jsx(_components.li,{children:`If your organization has more than one model, click the model you want to connect to git. If you have only one model, Omni opens it automatically.`}),`\n`,_jsxs(_components.li,{children:[`In the model IDE, click `,_jsx(_components.strong,{children:`Model > Advanced > Git settings`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`You’ll be prompted to enter connection details for the repository:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Authentication Method`}),` - Select `,_jsx(_components.strong,{children:`SSH (Deploy Key)`}),` from the dropdown.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`SSH URL`}),` - Copy and paste the repository’s SSH URL from Step 1.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Base Branch`}),` - Enter the name of the default branch for the repository. Omni will default to `,_jsx(_components.code,{children:`main`}),` unless a different name is specified.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Git follower`}),` - Select this option if the repository should be treated as a `,_jsx(_components.a,{href:`/integrations/git/follower-mode`,children:`follower`}),`.`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Configure Git`}),`.`]}),`\n`]}),_jsx(_components.p,{children:`The page will update to display additional git settings, including information for deploy keys and webhooks.`})]}),_jsxs(Step,{title:`Generate a new keypair`,id:`generate-a-new-keypair`,children:[_jsxs(_components.p,{children:[`Use `,_jsx(_components.code,{children:`ssh-keygen`}),` to generate a new RSA or ED25519 keypair.`]}),_jsxs(Tabs,{children:[_jsx(Tab,{title:`ED25519`,id:`ed25519`,children:_jsx(CodeBlock,{filename:``,wrap:`true`,numberOfLines:`1`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ssh-keygen`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -t`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ed25519`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -C`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"omni-deploy-key-rotation-$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`date`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` +%Y%m%d)\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` omni_deploy_key`})]}),`\n`]})})})}),_jsx(Tab,{title:`RSA`,id:`rsa`,children:_jsx(CodeBlock,{filename:``,wrap:`true`,numberOfLines:`1`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ssh-keygen`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -t`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` rsa`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -b`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 4096`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -C`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"omni-deploy-key-rotation-$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`date`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` +%Y%m%d)\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` omni_deploy_key`})]}),`\n`]})})})})]}),_jsx(_components.p,{children:`When prompted for a passphrase:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`To leave the key unencrypted`}),`, press `,_jsx(_components.code,{children:`Enter`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`To encrypt the key`}),`, provide a passphrase. This is more secure at rest, but you’ll need to supply it to Omni.`]}),`\n`]}),_jsx(_components.p,{children:`This generates two files:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`omni_deploy_key`}),` — The private key, which you’ll supply to Omni`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`omni_deploy_key.pub`}),` — The public key, which you’ll authorize with your Git provider`]}),`\n`]})]}),_jsxs(Step,{title:`Add a repository deploy key`,id:`add-a-repository-deploy-key-2`,children:[_jsx(Note,{children:_jsx(_components.p,{children:`If the repository is already linked to another Omni model, skip this step. Omni will use the existing deploy key.`})}),_jsxs(_components.p,{children:[`Add the public key (`,_jsx(_components.code,{children:`omni_deploy_key.pub`}),`) to your Git repository as a deploy key with `,_jsx(_components.strong,{children:`write access`}),`. This step ensures the new key is authorized before you supply the private key to Omni.`]}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In the GitHub repository, click the `,_jsx(_components.strong,{children:`Settings`}),` tab.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Deploy keys`}),`, located in the `,_jsx(_components.strong,{children:`Security`}),` section of the sidebar.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Add deploy key`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Fill in the fields as follows:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Title`}),` - Enter a descriptive title to help you identify what the key is used for. For example, `,_jsx(_components.em,{children:`Omni Snowflake Model`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Key`}),` - `,keyInstructions_1]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Allow write access`}),` - `,writeAccess_1]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Add key`}),`.`]}),`\n`]})]}),_jsxs(Step,{title:`Add repository webhooks`,id:`add-repository-webhooks-3`,children:[_jsx(Note,{children:_jsx(_components.p,{children:`If the repository is already linked to another Omni model, skip this step. Omni will use the existing webhook configuration.`})}),_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`The repository settings page should still be open in GitHub. If not, re-open it.`}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Webhooks`}),`, located in the `,_jsx(_components.strong,{children:`Code and automation`}),` section of the sidebar.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Add webhook`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Fill in the fields as follows:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Payload URL`}),` - From the Omni `,_jsx(_components.strong,{children:`Git settings`}),` page, copy the `,_jsx(_components.strong,{children:`Payload URL`}),` and paste it into this field.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Content type`}),` - Select the `,_jsx(_components.strong,{children:`application/json`}),` option.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Secret`}),` - From the Omni `,_jsx(_components.strong,{children:`Git settings`}),` page, copy the `,_jsx(_components.strong,{children:`Webhook secret`}),` and paste it into this field.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`SSL verification`}),` - Omni recommends leaving SSL verification enabled.`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`Which events would you like to trigger this webhook?`}),` section:`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Let me select individual events`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Select the `,_jsx(_components.strong,{children:`Pull request`}),` event.`]}),`\n`,_jsxs(_components.li,{children:[`If the `,_jsx(_components.strong,{children:`Push`}),` event is selected, deselect it.`]}),`\n`,_jsxs(_components.li,{children:[`When finished, click `,_jsx(_components.strong,{children:`Add webhook`}),`.`]}),`\n`]})]}),_jsxs(Step,{title:`Supply the private key to Omni with the API`,id:`supply-the-private-key-to-omni-with-the-api`,children:[_jsx(Note,{children:_jsx(_components.p,{children:`If the repository is already linked to another Omni model, skip this step. Omni will use the existing deploy key.`})}),_jsxs(_components.p,{children:[`Next, call the `,_jsx(_components.a,{href:`/api/model-git-configuration/update-git-configuration`,children:`Update Git configuration`}),` API and provide the private key.`]}),_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Unencrypted keys`,id:`unencrypted-keys`,children:[_jsxs(_components.p,{children:[`In the terminal, navigate to the same location where the `,_jsx(_components.code,{children:`omni_deploy_key`}),` file was saved. Then, run the following:`]}),_jsx(CodeBlock,{filename:``,wrap:`true`,numberOfLines:`4`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,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:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` PATCH`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`your-subdomai`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`n`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`.omniapp.co/api/v1/models/`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`MODEL_I`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`D`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/git`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer \u003cYOUR_API_TOKEN>\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_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:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`jq`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -n`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --arg`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` key \"$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`cat`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` omni_deploy_key)\" '{deployPrivateKey: $key}')\"`})]}),`\n`]})})}),_jsx(_components.p,{children:`Replace the following variables:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`\u003cyour-subdomain>`}),` - Your Omni subdomain`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`\u003cMODEL_ID>`}),` - The shared model’s UUID`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`\u003cYOUR_API_TOKEN>`}),` - Your Omni API key`]}),`\n`]}),_jsxs(_components.p,{children:[`A successful response will include the derived public key in the `,_jsx(_components.code,{children:`publicKey`}),` field.`]})]}),_jsx(Tab,{title:`Passphrase-protected keys`,id:`passphrase-protected-keys`,children:_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`In the terminal, navigate to the same location where the `,_jsx(_components.code,{children:`omni_deploy_key`}),` file was saved.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Run the following to create a plain shell variable for the passphrase:`}),`\n`,_jsx(CodeBlock,{filename:``,wrap:`true`,numberOfLines:`1`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`printf`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Passphrase: \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026 `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`read`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -rs`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` DEPLOY_KEY_PASSPHRASE`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026 `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`echo`})]}),`\n`]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`When prompted, enter the passphrase.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Then, run the following to supply Omni with the private key and passphrase:`}),`\n`,_jsx(CodeBlock,{filename:``,wrap:`true`,numberOfLines:`7`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`7`,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:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` PATCH`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`your-subdomai`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`n`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`.omniapp.co/api/v1/models/`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`MODEL_I`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`D`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/git`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer \u003cYOUR_API_TOKEN>\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_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:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`jq`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -n`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --arg`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` key \"$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`cat`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` omni_deploy_key)\" `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --arg`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` passphrase \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$DEPLOY_KEY_PASSPHRASE`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\" `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{deployPrivateKey: $key, deployKeyPassphrase: $passphrase}')\"`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Replace the following:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`\u003cyour-subdomain>`}),` - Your Omni subdomain`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`\u003cMODEL_ID>`}),` - The shared model’s UUID`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`\u003cYOUR_API_TOKEN>`}),` - Your Omni API key`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`A successful response will include the derived public key in the `,_jsx(_components.code,{children:`publicKey`}),` field.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`After you receive a successful response, run the following to unset the passphrase variable:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`unset`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` DEPLOY_KEY_PASSPHRASE`})]}),`\n`]})})}),`\n`]}),`\n`]})})]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`If you run into issues, see the `,_jsx(_components.a,{href:`/guides/api/rotate-ssh-deploy-keys#troubleshooting`,children:`Troubleshooting section in the Rotate Git SSH keys guide`}),`.`]})})]}),_jsxs(Step,{title:`Test the connection`,id:`test-the-connection-3`,children:[_jsxs(_components.p,{children:[`To verify the setup, navigate back to the `,_jsx(_components.strong,{children:`Git settings`}),` page in Omni. Click the `,_jsx(_components.strong,{children:`Test git connection`}),` button near the top of the page to test the connection.`]}),_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Need to rotate keys?`}),` See `,_jsx(_components.a,{href:`/guides/api/rotate-ssh-deploy-keys`,children:`Rotate Git SSH deploy keys`}),` for step-by-step instructions.`]})})]})]})]}),`\n`,_jsxs(View,{title:`HTTPS token authentication`,id:`https-token-authentication`,children:[_jsx(Heading,{level:`2`,id:`requirements-4`,children:`Requirements`}),_jsxs(_components.p,{children:[`To `,introCopy_3,`, you’ll need:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/administration/users/permissions`,children:_jsx(_components.strong,{children:`Connection Admin permissions`})}),` for the Omni model you want to connect to git`]}),`\n`,_jsx(_components.li,{children:_jsxs(_components.strong,{children:[`An existing `,provider_3,` repository`]})}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Permissions in `,provider_3,` that allow you to:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,permission1_3,`\n`]}),`\n`]}),`\n`]}),`\n`]}),_jsxs(_components.p,{children:[`Refer to `,_jsx(_components.a,{href:`https://docs.github.com/en/get-started/learning-about-github/access-permissions-on-github`,children:`GitHub’s documentation`}),` for information about user permissions.`]}),_jsx(Heading,{level:`2`,id:`configure-https-token-authentication`,children:`Configure HTTPS token authentication`}),_jsx(_components.p,{children:`In this guide, you’ll set up HTTPS token authentication.`}),_jsxs(Steps,{titleSize:`h3`,children:[_jsxs(Step,{title:`Retrieve the repository's HTTPS URL`,id:`retrieve-the-repositorys-https-url-2`,children:[_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`In your browser, navigate to the GitHub repository you want to connect to Omni.`}),`\n`,_jsxs(_components.li,{children:[`Click the `,_jsx(_components.strong,{children:`Code`}),` button.`]}),`\n`,_jsxs(_components.li,{children:[`In the modal that displays, locate the `,_jsx(_components.strong,{children:type_3}),` option.`]}),`\n`]}),_jsx(_components.p,{children:`Keep this page open - you’ll need it in the next step.`})]}),_jsxs(Step,{title:`Create a GitHub fine-grained personal access token`,id:`create-a-github-fine-grained-personal-access-token`,children:[_jsx(Note,{children:_jsxs(_components.p,{children:[`If the repository belongs to an organization, the organization must have a `,_jsx(_components.a,{href:`https://docs.github.com/en/organizations/managing-programmatic-access-to-your-organization/setting-a-personal-access-token-policy-for-your-organization`,children:`personal access token policy`}),` that allows the creation of personal access tokens.`]})}),_jsx(_components.p,{children:`In GitHub, create a fine-grained personal access token with the following permissions for the repository:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Contents`}),`: Read and write`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Metadata`}),`: Read-only (automatically included)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Pull requests`}),`: Read and write`]}),`\n`]}),_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token`,children:`GitHub’s documentation`}),` for instructions on creating a fine-grained personal access token.`]})]}),_jsx(Step,{title:`Connect the repository to Omni`,noAnchor:true,children:_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In Omni, click `,_jsx(_components.strong,{children:`Develop`}),` in the `,_jsx(_components.a,{href:`/administration/settings/sidebar`,children:`sidebar`}),`.`]}),`\n`,_jsx(_components.li,{children:`If your organization has more than one model, click the model you want to connect to git. If you have only one model, Omni opens it automatically.`}),`\n`,_jsxs(_components.li,{children:[`In the model IDE, click `,_jsx(_components.strong,{children:`Model > Advanced > Git settings`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`You’ll be prompted to enter connection details for the repository:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Authentication Method`}),` - Select `,_jsx(_components.strong,{children:`HTTPS (Token)`}),` from the dropdown.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`HTTPS URL`}),` - Copy and paste the repository’s `,_jsx(_components.strong,{children:`HTTPS URL`}),` from Step 1.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Access Token`}),` - Paste the `,token_0,` from Step 2.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Base Branch`}),` - Enter the name of the default branch for the repository. Omni will default to `,_jsx(_components.code,{children:`main`}),` unless a different name is specified.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Git follower`}),` - Select this option if the repository should be treated as a `,_jsx(_components.a,{href:`/integrations/git/follower-mode`,children:`follower`}),`.`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Configure Git`}),`.`]}),`\n`]})}),_jsx(Step,{title:`Test the connection`,id:`test-the-connection-4`,children:_jsxs(_components.p,{children:[`To verify the setup, navigate back to the `,_jsx(_components.strong,{children:`Git settings`}),` page in Omni. Click the `,_jsx(_components.strong,{children:`Test git connection`}),` button near the top of the page to test the connection.`]})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`what’s-next`,children:`What’s next?`}),`\n`,_jsxs(_components.p,{children:[`After the setup is complete, you can configure the integration’s behavior by changing its settings. Refer to the `,_jsx(_components.a,{href:`/integrations/git/settings`,children:`git integration settings reference`}),` for more information.`]}),`\n`,_jsx(Heading,{level:`2`,id:`related`,children:`Related`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/integrations/git/troubleshooting`,children:`Troubleshooting the Git integration`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/integrations/git/best-practices`,children:`Git best practices`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/guides/api/rotate-ssh-deploy-keys`,children:`Rotate Git SSH deploy keys`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/api/model-git-configuration/sync-model-with-git-repository`,children:`Sync model with Git repository API`})}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{token_0,keyInstructions_1,writeAccess_1,keyInstructions_0,writeAccess_0,type_3,type_2,type_1,type_0,introCopy_3,provider_3,permission1_3,permission2_3,introCopy_2,provider_2,permission1_2,permission2_2,introCopy_1,provider_1,permission1_1,permission2_1,introCopy_0,provider_0,permission1_0,permission2_0,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":"Connect a GitHub repository to Omni","sidebarTitle":"GitHub","description":"Connect a GitHub repository to an Omni model using SSH deploy keys, HTTPS token authentication, or GitHub App authentication","keywords":["https authentication","ssh authentication","fine-grained access token","github","https token","github repository","git","github app","github app authentication","commit signing","verified commit"],"href":"/integrations/git/setup/github"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[134,134,"permission2_3=undefined;const permission2_2=undefined;const permission2_1=undefined;const permission2_0=undefined;const "],[872,902,""],[1059,1089,""],[1244,1274,""],[1426,1456,""],[5771,5785,"`configure GitHub App authentication`,`,"],[6147,6169,"`GitHub`,` repositor"],[6267,6289,"`GitHub`,` that allo"],[6347,6416,"(_components.li,{children:`Install GitHub Apps on the repository or organization`}),`\n`]}),`\n`]}),`\n"],[7729,7748,"`HTTPS`}),` option.`"],[17625,17637,"`configure SSH with an Omni deploy key`,"],[18001,18023,"`GitHub`,` repositor"],[18121,18143,"`GitHub`,` that allo"],[18201,18255,"(_components.li,{children:`Add webhooks and deploy/SSH keys to repositories`}),`"],[19303,19324,"`SSH`}),` option.`]}"],[22563,22598,"`Copy the public key from the Omni Git settings page and paste it into this field`]}),`\n`,_jsxs(_com"],[22683,22710,"`Check this box, which will allow Omni to push changes made in Omni to the repository`]}),`\n`]}),`\n`"],[25693,25723,"`configure SSH with your own private key`,`, you’ll need:`]}"],[26069,26091,"`GitHub`,` repositor"],[26189,26211,"`GitHub`,` that allo"],[26269,26323,"(_components.li,{children:`Add webhooks and deploy/SSH keys to repositories`}),`"],[28107,28128,"`SSH`}),` option.`]}"],[35554,35576,"`Paste the contents of the omni_deploy_key.pub file from the previous step`]}),`"],[35674,35701,"`Check this box, which will allow Omni to push changes made in Omni to the repository`]}),`\n`]}),`\n`"],[51681,51694,"`configure HTTPS token authentication`,`"],[52057,52079,"`GitHub`,` repositor"],[52177,52199,"`GitHub`,` that allo"],[52257,52326,"(_components.li,{children:`Create fine-grained personal access tokens that can access the repository`}),`\n`]}),`\n`]}),`\n"],[53293,53312,"`HTTPS`}),` option.`"],[56066,56090,"`GitHub fine-grained personal access token`,` from Step 2.`]"],[58338,58342,"permission2_3,permission2_2,permission2_1,permission2_0,toke"],[58475,58651,"introCopy_2,provider_2,permission1_2,introCopy_1,provider_1,permission1_1,introCopy_0,provider_0,permission1_0,default:M"]]},"mdxExtracts":{"tableOfContents":[{"title":"Select an authentication method","slug":"select-an-authentication-method","depth":2,"children":[],"viewId":"Select authentication method"},{"title":"Requirements","slug":"requirements","depth":2,"children":[],"viewId":"GitHub App"},{"title":"Configure GitHub App authentication","slug":"configure-github-app-authentication","depth":2,"children":[{"title":"Retrieve the repository's HTTPS URL","slug":"retrieve-the-repositorys-https-url","depth":3,"children":[],"viewId":"GitHub App"},{"title":"Launch the Omni GitHub App installation flow","slug":"launch-the-omni-github-app-installation-flow","depth":3,"children":[],"viewId":"GitHub App"},{"title":"Install the Omni GitHub App","slug":"install-the-omni-github-app","depth":3,"children":[],"viewId":"GitHub App"},{"title":"Configure the Git settings in Omni","slug":"configure-the-git-settings-in-omni","depth":3,"children":[],"viewId":"GitHub App"},{"title":"Configure commit signing","slug":"configure-commit-signing","depth":3,"children":[],"viewId":"GitHub App"},{"title":"Add repository webhooks","slug":"add-repository-webhooks","depth":3,"children":[],"viewId":"GitHub App"},{"title":"Test the connection","slug":"test-the-connection","depth":3,"children":[],"viewId":"GitHub App"}],"viewId":"GitHub App"},{"title":"Requirements","slug":"requirements-2","depth":2,"children":[],"viewId":"SSH + Omni deploy key"},{"title":"Configure SSH authentication with an Omni deploy key","slug":"configure-ssh-authentication-with-an-omni-deploy-key","depth":2,"children":[{"title":"Retrieve the repository's SSH URL","slug":"retrieve-the-repositorys-ssh-url","depth":3,"children":[],"viewId":"SSH + Omni deploy key"},{"title":"Connect the repository to Omni","slug":"connect-the-repository-to-omni","depth":3,"children":[],"viewId":"SSH + Omni deploy key"},{"title":"Add a repository deploy key","slug":"add-a-repository-deploy-key","depth":3,"children":[],"viewId":"SSH + Omni deploy key"},{"title":"Add repository webhooks","slug":"add-repository-webhooks-2","depth":3,"children":[],"viewId":"SSH + Omni deploy key"},{"title":"Test the connection","slug":"test-the-connection-2","depth":3,"children":[],"viewId":"SSH + Omni deploy key"}],"viewId":"SSH + Omni deploy key"},{"title":"Requirements","slug":"requirements-3","depth":2,"children":[],"viewId":"SSH + Your private key"},{"title":"Configure SSH authentication with your private key","slug":"configure-ssh-authentication-with-your-private-key","depth":2,"children":[{"title":"Retrieve the repository's SSH URL","slug":"retrieve-the-repositorys-ssh-url-2","depth":3,"children":[],"viewId":"SSH + Your private key"},{"title":"Connect the repository to Omni","slug":"connect-the-repository-to-omni-2","depth":3,"children":[],"viewId":"SSH + Your private key"},{"title":"Generate a new keypair","slug":"generate-a-new-keypair","depth":3,"children":[],"viewId":"SSH + Your private key"},{"title":"Add a repository deploy key","slug":"add-a-repository-deploy-key-2","depth":3,"children":[],"viewId":"SSH + Your private key"},{"title":"Add repository webhooks","slug":"add-repository-webhooks-3","depth":3,"children":[],"viewId":"SSH + Your private key"},{"title":"Supply the private key to Omni with the API","slug":"supply-the-private-key-to-omni-with-the-api","depth":3,"children":[],"viewId":"SSH + Your private key"},{"title":"Test the connection","slug":"test-the-connection-3","depth":3,"children":[],"viewId":"SSH + Your private key"}],"viewId":"SSH + Your private key"},{"title":"Requirements","slug":"requirements-4","depth":2,"children":[],"viewId":"HTTPS token authentication"},{"title":"Configure HTTPS token authentication","slug":"configure-https-token-authentication","depth":2,"children":[{"title":"Retrieve the repository's HTTPS URL","slug":"retrieve-the-repositorys-https-url-2","depth":3,"children":[],"viewId":"HTTPS token authentication"},{"title":"Create a GitHub fine-grained personal access token","slug":"create-a-github-fine-grained-personal-access-token","depth":3,"children":[],"viewId":"HTTPS token authentication"},{"title":"Test the connection","slug":"test-the-connection-4","depth":3,"children":[],"viewId":"HTTPS token authentication"}],"viewId":"HTTPS token authentication"},{"title":"What’s next?","slug":"what’s-next","depth":2,"children":[]},{"title":"Related","slug":"related","depth":2,"children":[]}],"multiViewItems":[{"title":"Select authentication method","content":"","id":"select-authentication-method","active":true},{"title":"GitHub App","content":"","id":"github-app","active":false},{"title":"SSH + Omni deploy key","content":"","id":"ssh-omni-deploy-key","active":false},{"title":"SSH + Your private key","content":"","id":"ssh-your-private-key","active":false},{"title":"HTTPS token authentication","content":"","id":"https-token-authentication","active":false}],"codeExamples":{}},"jsLinks":[],"subdomain":"omni-e7402367","siteName":"Omni Docs","title":"Connect a GitHub repository to Omni - Omni Docs","relatedPagesConfig":{"enabled":true,"limit":3,"mode":"manual"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-30T23:22:31.347Z","originalFileLocation":"integrations/git/setup/github.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=\"Connect a GitHub repository to an Omni model using SSH deploy keys, HTTPS token authentication, or GitHub App authentication\">\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=\"Connect a GitHub repository to Omni - Omni Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Connect a GitHub repository to an Omni model using SSH deploy keys, HTTPS token authentication, or GitHub App authentication\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Omni Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.omni.co/integrations/git/setup/github\">\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=Setup\u0026amp;title=Connect+a+GitHub+repository+to+Omni\u0026amp;description=Connect+a+GitHub+repository+to+an+Omni+model+using+SSH+deploy+keys%2C+HTTPS+token+authentication%2C+or+GitHub+App+authentication\u0026amp;theme=191f8a92cb0a982596561b95\u0026amp;signature=9ed3918facabbf5d43f91a7d32dff234a4615fd792dc7ee61d3f2d8994be52f9\">\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=\"Connect a GitHub repository to Omni - Omni Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Connect a GitHub repository to an Omni model using SSH deploy keys, HTTPS token authentication, or GitHub App authentication\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://omni-e7402367.mintlify.app/_mintlify/api/og/v2?division=Setup\u0026amp;title=Connect+a+GitHub+repository+to+Omni\u0026amp;description=Connect+a+GitHub+repository+to+an+Omni+model+using+SSH+deploy+keys%2C+HTTPS+token+authentication%2C+or+GitHub+App+authentication\u0026amp;theme=191f8a92cb0a982596561b95\u0026amp;signature=9ed3918facabbf5d43f91a7d32dff234a4615fd792dc7ee61d3f2d8994be52f9\">\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/integrations/git/setup/github\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/integrations/git/setup/github.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/integrations/git/setup/github#webpage\",\"url\":\"https://docs.omni.co/integrations/git/setup/github\",\"name\":\"Connect a GitHub repository to Omni\",\"description\":\"Connect a GitHub repository to an Omni model using SSH deploy keys, HTTPS token authentication, or GitHub App authentication\",\"dateModified\":\"2026-09-30T23:22:31.347Z\",\"isPartOf\":{\"@id\":\"https://docs.omni.co#website\"},\"breadcrumb\":{\"@id\":\"https://docs.omni.co/integrations/git/setup/github#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.omni.co/integrations/git/setup/github#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Manage integrations\",\"item\":\"https://docs.omni.co/integrations/dbt/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"git\",\"item\":\"https://docs.omni.co/integrations/git/index\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Setup\",\"item\":\"https://docs.omni.co/integrations/git/setup/index\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Connect a GitHub repository to Omni\",\"item\":\"https://docs.omni.co/integrations/git/setup/github\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.omni.co/integrations/git/setup/github#article\",\"headline\":\"Connect a GitHub repository to Omni\",\"name\":\"Connect a GitHub repository to Omni\",\"description\":\"Connect a GitHub repository to an Omni model using SSH deploy keys, HTTPS token authentication, or GitHub App authentication\",\"url\":\"https://docs.omni.co/integrations/git/setup/github\",\"mainEntityOfPage\":{\"@id\":\"https://docs.omni.co/integrations/git/setup/github#webpage\"},\"dateModified\":\"2026-09-30T23:22:31.347Z\",\"keywords\":\"https authentication, ssh authentication, fine-grained access token, github, https token, github repository, git, github app, github app authentication, commit signing, verified commit\",\"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","href":"/ai/dashboard-assistant"},{"group":"Apps","root":{"title":"Apps","sidebarTitle":"Apps","href":"/visualize-present/apps/index"},"pages":[{"title":"Styling Apps","sidebarTitle":"Styling","href":"/visualize-present/apps/styling"},{"title":"Inspecting App elements","sidebarTitle":"Element inspector","href":"/visualize-present/apps/inspect"},{"title":"Downloading apps","sidebarTitle":"Download","href":"/visualize-present/apps/download"},{"title":"Importing Claude dashboards as apps","sidebarTitle":"Import from Claude","href":"/visualize-present/apps/claude-dashboards"},{"title":"App settings","sidebarTitle":"Settings","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"}]},{"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","description":"Connect a self-hosted Bitbucket Data Center or Server repository to an Omni model","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","description":"Connect a GitLab repository to an Omni model using SSH deploy keys or HTTPS token authentication","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"}]},{"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":"Connect a GitHub repository to Omni - Omni Docs","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":["10e4515597","07c022d89b","a74be98ba7"],"chunks":["BannerMarkdown-DHaG7hr_.js","dist-DKZWslLH.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-BIWXJmsZ.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","Frame-DW6UFrUy.js","DynamicMarkdown-B62XqCSI.js","zoom-image-lightbox-eHyQ0tlO.js","lightbox-handle-r17bVUz3.js"]}