[{"data":1,"prerenderedAt":1013},["ShallowReactive",2],{"navigation":3,"\u002Fintegrations\u002Foutlabsauth-ui":189,"\u002Fintegrations\u002Foutlabsauth-ui-surround":1008},[4,34,60,116,137,153],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":33},"Getting Started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15,18,23,28],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-house",{"title":5,"path":16,"stem":17,"icon":6},"\u002Fgetting-started\u002Fgetting-started","1.getting-started\u002F2.getting-started",{"title":19,"path":20,"stem":21,"icon":22},"Choosing a Preset","\u002Fgetting-started\u002Fchoosing-a-preset","1.getting-started\u002F3.choosing-a-preset","i-lucide-git-branch",{"title":24,"path":25,"stem":26,"icon":27},"Deployment","\u002Fgetting-started\u002Fdeployment","1.getting-started\u002F4.deployment","i-lucide-cloud",{"title":29,"path":30,"stem":31,"icon":32},"Background Maintenance","\u002Fgetting-started\u002Fbackground-maintenance","1.getting-started\u002F5.background-maintenance","i-lucide-timer-reset",false,{"title":35,"icon":36,"path":37,"stem":38,"children":39,"page":33},"Build","i-lucide-wrench","\u002Fbuild","2.build",[40,45,50,55],{"title":41,"path":42,"stem":43,"icon":44},"Routers & Prefixes","\u002Fbuild\u002Frouters-and-prefixes","2.build\u002F1.routers-and-prefixes","i-lucide-route",{"title":46,"path":47,"stem":48,"icon":49},"Configuration","\u002Fbuild\u002Fconfiguration","2.build\u002F2.configuration","i-lucide-settings",{"title":51,"path":52,"stem":53,"icon":54},"Authorization Dependencies","\u002Fbuild\u002Fauthorization-dependencies","2.build\u002F3.authorization-dependencies","i-lucide-shield-check",{"title":56,"path":57,"stem":58,"icon":59},"Command Line","\u002Fbuild\u002Fcli","2.build\u002F4.cli","i-lucide-terminal",{"title":61,"icon":62,"path":63,"stem":64,"children":65,"page":33},"Auth","i-lucide-lock","\u002Fauth","3.auth",[66,71,76,81,86,91,96,101,106,111],{"title":67,"path":68,"stem":69,"icon":70},"OAuth & Social Login","\u002Fauth\u002Foauth-and-social-login","3.auth\u002F1.oauth-and-social-login","i-lucide-log-in",{"title":72,"path":73,"stem":74,"icon":75},"Multi-Frontend Support","\u002Fauth\u002Fmulti-frontend","3.auth\u002F10.multi-frontend","i-lucide-layout-grid",{"title":77,"path":78,"stem":79,"icon":80},"Sessions & Audit","\u002Fauth\u002Fsessions-and-audit","3.auth\u002F2.sessions-and-audit","i-lucide-monitor-smartphone",{"title":82,"path":83,"stem":84,"icon":85},"Passwordless & Messaging","\u002Fauth\u002Fpasswordless-and-messaging","3.auth\u002F3.passwordless-and-messaging","i-lucide-mail",{"title":87,"path":88,"stem":89,"icon":90},"JWT Tokens","\u002Fauth\u002Fjwt-tokens","3.auth\u002F4.jwt-tokens","i-lucide-key-round",{"title":92,"path":93,"stem":94,"icon":95},"User Management API","\u002Fauth\u002Fuser-management-api","3.auth\u002F5.user-management-api","i-lucide-users",{"title":97,"path":98,"stem":99,"icon":100},"User Invitations","\u002Fauth\u002Fuser-invitations","3.auth\u002F6.user-invitations","i-lucide-send",{"title":102,"path":103,"stem":104,"icon":105},"Roles & Permissions","\u002Fauth\u002Froles-and-permissions","3.auth\u002F7.roles-and-permissions","i-lucide-shield",{"title":107,"path":108,"stem":109,"icon":110},"ABAC","\u002Fauth\u002Fabac","3.auth\u002F8.abac","i-lucide-filter",{"title":112,"path":113,"stem":114,"icon":115},"User Status","\u002Fauth\u002Fuser-status","3.auth\u002F9.user-status","i-lucide-user-cog",{"title":117,"icon":118,"path":119,"stem":120,"children":121,"page":33},"Enterprise","i-lucide-building-2","\u002Fenterprise","4.enterprise",[122,127,132],{"title":123,"path":124,"stem":125,"icon":126},"Core Authorization Concepts","\u002Fenterprise\u002Fcore-authorization-concepts","4.enterprise\u002F1.core-authorization-concepts","i-lucide-network",{"title":128,"path":129,"stem":130,"icon":131},"Entities","\u002Fenterprise\u002Fentities","4.enterprise\u002F2.entities","i-lucide-folder-tree",{"title":133,"path":134,"stem":135,"icon":136},"Entity Memberships","\u002Fenterprise\u002Fentity-memberships","4.enterprise\u002F3.entity-memberships","i-lucide-user-plus",{"title":138,"icon":139,"path":140,"stem":141,"children":142,"page":33},"Integrations","i-lucide-plug","\u002Fintegrations","5.integrations",[143,148],{"title":144,"path":145,"stem":146,"icon":147},"API Keys","\u002Fintegrations\u002Fapi-keys","5.integrations\u002F1.api-keys","i-lucide-key",{"title":149,"path":150,"stem":151,"icon":152},"OutlabsAuth UI","\u002Fintegrations\u002Foutlabsauth-ui","5.integrations\u002F2.outlabsauth-ui","i-lucide-layout-dashboard",{"title":154,"icon":155,"path":156,"stem":157,"children":158,"page":33},"Reference","i-lucide-book-marked","\u002Freference","6.reference",[159,164,169,174,179,184],{"title":160,"path":161,"stem":162,"icon":163},"Data Models","\u002Freference\u002Fdata-models","6.reference\u002F1.data-models","i-lucide-database",{"title":165,"path":166,"stem":167,"icon":168},"Activity Tracking","\u002Freference\u002Factivity-tracking","6.reference\u002F2.activity-tracking","i-lucide-activity",{"title":170,"path":171,"stem":172,"icon":173},"Testing","\u002Freference\u002Ftesting","6.reference\u002F3.testing","i-lucide-flask-conical",{"title":175,"path":176,"stem":177,"icon":178},"Observability","\u002Freference\u002Fobservability","6.reference\u002F4.observability","i-lucide-eye",{"title":180,"path":181,"stem":182,"icon":183},"Metrics Reference","\u002Freference\u002Fmetrics-reference","6.reference\u002F5.metrics-reference","i-lucide-chart-bar",{"title":185,"path":186,"stem":187,"icon":188},"Log Events Reference","\u002Freference\u002Flog-events-reference","6.reference\u002F6.log-events-reference","i-lucide-scroll-text",{"id":190,"title":149,"body":191,"description":992,"extension":993,"links":994,"meta":1004,"navigation":1005,"path":150,"seo":1006,"stem":151,"__hash__":1007},"docs\u002F5.integrations\u002F2.outlabsauth-ui.md",{"type":192,"value":193,"toc":981},"minimark",[194,207,214,225,230,274,278,285,387,394,404,408,419,422,466,496,517,521,814,827,831,842,852,858,862,865,887,891,894,897,921,925,944,948,977],[195,196,197,198,202,203,206],"p",{},"OutlabsAuth UI is an optional ",[199,200,201],"strong",{},"sidecar admin console"," — a separate Vite\u002FReact\napp you run next to your API. It is ",[199,204,205],{},"not"," part of the Python package, and it\ndoes not ship a second auth stack. It talks to whatever FastAPI host has\nOutlabsAuth mounted, using the same routers your product already exposes.",[195,208,209,210,213],{},"We maintain it ourselves and use it day-to-day: it is the fastest way to\n",[199,211,212],{},"see and operate"," what is going on in an OutlabsAuth-backed system — users,\nroles, entities, keys, sessions, audit, and more — without building that\nconsole from scratch.",[215,216,217],"tip",{"to":42},[195,218,219,220,224],{},"The UI only shows what the backend advertises. Mount the right\n",[221,222,223],"a",{"href":42},"router factories"," first.",[226,227,229],"h2",{"id":228},"why-it-exists","Why it exists",[231,232,233,249,256,262],"card-group",{},[234,235,237],"card",{"icon":139,"title":236},"Sidecar, not a product UI",[195,238,239,240,243,244,248],{},"Point it at ",[199,241,242],{},"any"," instance that mounts OutlabsAuth — local examples,\nstaging, or production. Your customers still get ",[245,246,247],"em",{},"your"," screens; this console\nis for operators and implementers.",[234,250,253],{"icon":251,"title":252},"i-lucide-panels-top-left","Full gamut of features",[195,254,255],{},"When the matching routers are mounted, you get the same surface the library\nexposes: invites, roles, permissions, ABAC, entities, memberships, API keys,\nsessions, audit search, account self-service, passwordless entry flows, and\nOAuth link\u002Funlink where enabled.",[234,257,259],{"icon":178,"title":258},"Visualise the system",[195,260,261],{},"Browse the org tree, inspect memberships, search audit events, check active\nsessions, and watch activity signals on users and entities — useful while\nintegrating and debugging, not only for “admin CRUD.”",[234,263,266],{"icon":264,"title":265},"i-lucide-code-xml","Reference for your own UI",[195,267,268,269,273],{},"The repo is a working example of how to consume ",[270,271,272],"code",{},"\u002Fauth\u002Fconfig",", permission\ngates, and the management APIs. Steal patterns; you do not have to ship this\nSPA to end users.",[226,275,277],{"id":276},"what-you-can-do-in-the-console","What you can do in the console",[195,279,280,281,284],{},"Workspaces appear based on ",[270,282,283],{},"GET {authApiPrefix}\u002Fauth\u002Fconfig"," (preset + feature\nflags). Typical surfaces:",[286,287,288,301],"table",{},[289,290,291],"thead",{},[292,293,294,298],"tr",{},[295,296,297],"th",{},"Workspace",[295,299,300],{},"What it is for",[302,303,304,315,325,335,345,354,364,374],"tbody",{},[292,305,306,312],{},[307,308,309],"td",{},[199,310,311],{},"Dashboard",[307,313,314],{},"Capability snapshot and shortcuts into visible workspaces",[292,316,317,322],{},[307,318,319],{},[199,320,321],{},"Account",[307,323,324],{},"Profile, password, linked social accounts, self-service phone OTP",[292,326,327,332],{},[307,328,329],{},[199,330,331],{},"Users",[307,333,334],{},"Invite \u002F create, status, roles, memberships, orphaned users, history, permission checks",[292,336,337,342],{},[307,338,339],{},[199,340,341],{},"Roles & permissions",[307,343,344],{},"Catalog, role composition, ABAC conditions when enabled",[292,346,347,351],{},[307,348,349],{},[199,350,128],{},[307,352,353],{},"Enterprise org tree — create, move, members, local roles, activity",[292,355,356,361],{},[307,357,358],{},[199,359,360],{},"API keys",[307,362,363],{},"Personal keys (self-service) and system\u002Fintegration keys (admin)",[292,365,366,371],{},[307,367,368],{},[199,369,370],{},"Audit",[307,372,373],{},"Cross-user event search with before\u002Fafter\u002Fmetadata inspection",[292,375,376,381],{},[307,377,378],{},[199,379,380],{},"Settings",[307,382,383,384,386],{},"Runtime capabilities from ",[270,385,272],{}," plus mutable entity types",[195,388,389,390,393],{},"Auth shell flows the console needs to ",[245,391,392],{},"reach"," those workspaces are covered too:\npassword login, forgot\u002Freset, magic link, access code, accept invite, and\ninvite-only Google OAuth when the host mounts them.",[395,396,397],"note",{},[195,398,399,400,403],{},"Self-registration for end customers stays a ",[199,401,402],{},"host"," concern. The console is\ninvite-oriented (plus admin create-user with password). Your product UI can\nstill offer open registration via the library if you want that.",[226,405,407],{"id":406},"how-it-connects","How it connects",[409,410,417],"pre",{"className":411,"code":413,"filename":414,"language":415,"meta":416},[412],"language-text","Your FastAPI app (any host)\n└── OutlabsAuth routers under a stable prefix (\u002Fv1, \u002Fiam, …)\n        ↑\n        │  apiBaseUrl + authApiPrefix\n        │\nOutlabsAuth UI (separate process \u002F deploy)\n","sidecar","text","",[270,418,413],{"__ignoreMap":416},[195,420,421],{},"Configure two values:",[286,423,424,434],{},[289,425,426],{},[292,427,428,431],{},[295,429,430],{},"Field",[295,432,433],{},"Meaning",[302,435,436,446],{},[292,437,438,443],{},[307,439,440],{},[270,441,442],{},"apiBaseUrl",[307,444,445],{},"Origin of the FastAPI app (no trailing slash)",[292,447,448,453],{},[307,449,450],{},[270,451,452],{},"authApiPrefix",[307,454,455,456,458,459,462,463],{},"Parent of ",[270,457,63],{}," — e.g. ",[270,460,461],{},"\u002Fv1"," when you mount ",[270,464,465],{},"\u002Fv1\u002Fauth",[195,467,468,469,472,473,476,477,480,481,476,484,487,488,491,492,495],{},"With ",[270,470,471],{},"authApiPrefix: \"\u002Fv1\"",", the UI calls ",[270,474,475],{},"\u002Fv1\u002Fauth\u002Fconfig",", ",[270,478,479],{},"\u002Fv1\u002Fauth\u002Flogin",",\n",[270,482,483],{},"\u002Fv1\u002Fusers",[270,485,486],{},"\u002Fv1\u002Froles",", and so on. It adapts navigation for ",[199,489,490],{},"SimpleRBAC"," vs\n",[199,493,494],{},"EnterpriseRBAC"," from that config snapshot (entity hierarchy, context-aware\nroles, activity tracking, …).",[497,498,499],"warning",{},[195,500,501,502,505,506,508,509,476,511,513,514,516],{},"If you mount ",[270,503,504],{},"get_auth_router(..., prefix=\"\u002Fv1\u002Fauth\")",", set ",[270,507,452],{}," to\n",[270,510,461],{},[199,512,205],{}," ",[270,515,465],{},".",[226,518,520],{"id":519},"quick-start","Quick start",[522,523,525,530,585,589,732,788,792,807],"steps",{"level":524},"3",[526,527,529],"h3",{"id":528},"clone-and-install","Clone and install",[409,531,536],{"className":532,"code":533,"filename":534,"language":535,"meta":416,"style":416},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git clone https:\u002F\u002Fgithub.com\u002Foutlabsio\u002FOutlabsAuthUI.git\ncd OutlabsAuthUI\nbun install\ncp public\u002Fapp-config.template.json public\u002Fapp-config.json\n","Terminal","bash",[270,537,538,554,564,573],{"__ignoreMap":416},[539,540,543,547,551],"span",{"class":541,"line":542},"line",1,[539,544,546],{"class":545},"sBMFI","git",[539,548,550],{"class":549},"sfazB"," clone",[539,552,553],{"class":549}," https:\u002F\u002Fgithub.com\u002Foutlabsio\u002FOutlabsAuthUI.git\n",[539,555,557,561],{"class":541,"line":556},2,[539,558,560],{"class":559},"s2Zo4","cd",[539,562,563],{"class":549}," OutlabsAuthUI\n",[539,565,567,570],{"class":541,"line":566},3,[539,568,569],{"class":545},"bun",[539,571,572],{"class":549}," install\n",[539,574,576,579,582],{"class":541,"line":575},4,[539,577,578],{"class":545},"cp",[539,580,581],{"class":549}," public\u002Fapp-config.template.json",[539,583,584],{"class":549}," public\u002Fapp-config.json\n",[526,586,588],{"id":587},"point-at-your-api","Point at your API",[409,590,595],{"className":591,"code":592,"filename":593,"language":594,"meta":416,"style":416},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"apiBaseUrl\": \"http:\u002F\u002Flocalhost:8004\",\n  \"authApiPrefix\": \"\u002Fv1\",\n  \"appName\": \"OutlabsAuth UI\",\n  \"appSubtitle\": \"Shared auth admin console\",\n  \"authBrand\": \"OutlabsAuth\",\n  \"signInDescription\": \"Sign in against the configured auth backend to access this console.\"\n}\n","public\u002Fapp-config.json","json",[270,596,597,603,627,645,664,685,706,726],{"__ignoreMap":416},[539,598,599],{"class":541,"line":542},[539,600,602],{"class":601},"sMK4o","{\n",[539,604,605,608,611,614,617,620,623,625],{"class":541,"line":556},[539,606,607],{"class":601},"  \"",[539,609,442],{"class":610},"spNyl",[539,612,613],{"class":601},"\"",[539,615,616],{"class":601},":",[539,618,619],{"class":601}," \"",[539,621,622],{"class":549},"http:\u002F\u002Flocalhost:8004",[539,624,613],{"class":601},[539,626,480],{"class":601},[539,628,629,631,633,635,637,639,641,643],{"class":541,"line":566},[539,630,607],{"class":601},[539,632,452],{"class":610},[539,634,613],{"class":601},[539,636,616],{"class":601},[539,638,619],{"class":601},[539,640,461],{"class":549},[539,642,613],{"class":601},[539,644,480],{"class":601},[539,646,647,649,652,654,656,658,660,662],{"class":541,"line":575},[539,648,607],{"class":601},[539,650,651],{"class":610},"appName",[539,653,613],{"class":601},[539,655,616],{"class":601},[539,657,619],{"class":601},[539,659,149],{"class":549},[539,661,613],{"class":601},[539,663,480],{"class":601},[539,665,667,669,672,674,676,678,681,683],{"class":541,"line":666},5,[539,668,607],{"class":601},[539,670,671],{"class":610},"appSubtitle",[539,673,613],{"class":601},[539,675,616],{"class":601},[539,677,619],{"class":601},[539,679,680],{"class":549},"Shared auth admin console",[539,682,613],{"class":601},[539,684,480],{"class":601},[539,686,688,690,693,695,697,699,702,704],{"class":541,"line":687},6,[539,689,607],{"class":601},[539,691,692],{"class":610},"authBrand",[539,694,613],{"class":601},[539,696,616],{"class":601},[539,698,619],{"class":601},[539,700,701],{"class":549},"OutlabsAuth",[539,703,613],{"class":601},[539,705,480],{"class":601},[539,707,709,711,714,716,718,720,723],{"class":541,"line":708},7,[539,710,607],{"class":601},[539,712,713],{"class":610},"signInDescription",[539,715,613],{"class":601},[539,717,616],{"class":601},[539,719,619],{"class":601},[539,721,722],{"class":549},"Sign in against the configured auth backend to access this console.",[539,724,725],{"class":601},"\"\n",[539,727,729],{"class":541,"line":728},8,[539,730,731],{"class":601},"}\n",[286,733,734,747],{},[289,735,736],{},[292,737,738,741,744],{},[295,739,740],{},"Example host",[295,742,743],{},"API port",[295,745,746],{},"Suggested config",[302,748,749,769],{},[292,750,751,756,761],{},[307,752,753],{},[270,754,755],{},"examples\u002Fsimple_rbac",[307,757,758],{},[270,759,760],{},"8003",[307,762,763,476,766],{},[270,764,765],{},"apiBaseUrl: http:\u002F\u002Flocalhost:8003",[270,767,768],{},"authApiPrefix: \u002Fv1",[292,770,771,776,781],{},[307,772,773],{},[270,774,775],{},"examples\u002Fenterprise_rbac",[307,777,778],{},[270,779,780],{},"8004",[307,782,783,476,786],{},[270,784,785],{},"apiBaseUrl: http:\u002F\u002Flocalhost:8004",[270,787,768],{},[526,789,791],{"id":790},"run-the-ui","Run the UI",[409,793,795],{"className":532,"code":794,"filename":534,"language":535,"meta":416,"style":416},"bun run dev\n",[270,796,797],{"__ignoreMap":416},[539,798,799,801,804],{"class":541,"line":542},[539,800,569],{"class":545},[539,802,803],{"class":549}," run",[539,805,806],{"class":549}," dev\n",[195,808,809,810,813],{},"Default Vite URL is ",[270,811,812],{},"http:\u002F\u002Flocalhost:5173",". Sign in with a bootstrap or seeded\nadmin from the host app.",[195,815,816,817,820,821,516],{},"Config precedence (runtime inject → ",[270,818,819],{},"\u002Fapp-config.json"," → Vite env → localhost\ndefaults) is documented in the UI repo’s\n",[221,822,826],{"href":823,"rel":824},"https:\u002F\u002Fgithub.com\u002Foutlabsio\u002FOutlabsAuthUI\u002Fblob\u002Fmain\u002Fdocs\u002Fruntime-configuration.md",[825],"nofollow","runtime configuration",[226,828,830],{"id":829},"what-to-mount-on-the-backend","What to mount on the backend",[195,832,833,834,837,838,841],{},"Minimum for login: ",[270,835,836],{},"get_auth_router"," (and ",[270,839,840],{},"GET \u002Fauth\u002Fconfig"," comes with it).",[195,843,844,845,848,849,851],{},"For a useful admin console, mount the ",[199,846,847],{},"admin UI–friendly"," sets in\n",[221,850,41],{"href":42}," — users, roles, permissions,\nAPI keys, and (for Enterprise) entities \u002F memberships \u002F audit as needed.",[853,854,855],"caution",{},[195,856,857],{},"If a workspace is missing in the UI, the usual cause is a missing router or a\nfeature flag off on the backend — not a broken SPA.",[226,859,861],{"id":860},"simple-vs-enterprise-behaviour","Simple vs Enterprise behaviour",[195,863,864],{},"The same SPA serves both presets. Invite and membership forms change with the\nbackend:",[866,867,868,878],"ul",{},[869,870,871,873,874,877],"li",{},[199,872,490],{}," — no entity scope on invites; selected ",[270,875,876],{},"role_ids"," become direct\naccount role memberships.",[869,879,880,882,883,886],{},[199,881,494],{}," — entity hierarchy and memberships appear when advertised;\ninvites can attach roles through an entity membership when ",[270,884,885],{},"entity_id"," is\nsupplied.",[226,888,890],{"id":889},"building-your-own-ui-instead","Building your own UI instead",[195,892,893],{},"You do not have to deploy OutlabsAuth UI. Many products keep customer-facing auth\nscreens in-house and only use this console internally.",[195,895,896],{},"If you do build your own:",[898,899,900,907,914],"ol",{},[869,901,902,903,906],{},"Call ",[270,904,905],{},"GET {prefix}\u002Fauth\u002Fconfig"," and drive feature UI from that payload.",[869,908,909,910,913],{},"Reuse the same permission names the library enforces (",[270,911,912],{},"user:read",", …).",[869,915,916,917,920],{},"Treat the OutlabsAuth UI repo as a ",[199,918,919],{},"worked example"," of query keys, forms,\nand workspace boundaries — not as a required dependency.",[226,922,924],{"id":923},"deploy-notes","Deploy notes",[866,926,927,938,941],{},[869,928,929,930,933,934,937],{},"Prefer one generic build; inject ",[270,931,932],{},"app-config.json"," (or\n",[270,935,936],{},"window.__OUTLABS_AUTH_UI_CONFIG__",") per environment.",[869,939,940],{},"Keep CORS on the FastAPI host open to the UI origin in each environment.",[869,942,943],{},"The UI never holds host secrets for OAuth\u002FSMS\u002Femail — those stay on the\nbackend; the console only uses the public auth API.",[226,945,947],{"id":946},"related","Related",[866,949,950,955,960,965,970],{},[869,951,952,954],{},[221,953,41],{"href":42}," — what to mount",[869,956,957,959],{},[221,958,5],{"href":16}," — wire the library first",[869,961,962,964],{},[221,963,77],{"href":78}," — backend contracts the Audit workspace uses",[869,966,967,969],{},[221,968,144],{"href":145}," — personal vs system integration keys",[869,971,972],{},[221,973,976],{"href":974,"rel":975},"https:\u002F\u002Fgithub.com\u002Foutlabsio\u002FOutlabsAuthUI",[825],"OutlabsAuthUI on GitHub",[978,979,980],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":416,"searchDepth":542,"depth":556,"links":982},[983,984,985,986,987,988,989,990,991],{"id":228,"depth":556,"text":229},{"id":276,"depth":556,"text":277},{"id":406,"depth":556,"text":407},{"id":519,"depth":556,"text":520},{"id":829,"depth":556,"text":830},{"id":860,"depth":556,"text":861},{"id":889,"depth":556,"text":890},{"id":923,"depth":556,"text":924},{"id":946,"depth":556,"text":947},"Optional sidecar admin console — point it at any FastAPI host running OutlabsAuth and manage the full surface.","md",[995,1001],{"label":996,"to":974,"icon":997,"target":998,"color":999,"variant":1000},"Repository","i-simple-icons-github","_blank","neutral","subtle",{"label":1002,"to":823,"icon":1003,"target":998,"color":999,"variant":1000},"Runtime config","i-lucide-settings-2",{},{"icon":152},{"title":149,"description":992},"kfXE0i_W6-lWO2yf79rZ2KQ_uJDBSvFHIHPfVek95X0",[1009,1011],{"title":144,"path":145,"stem":146,"description":1010,"icon":147,"children":-1},"Personal and system integration keys for host apps.",{"title":160,"path":161,"stem":162,"description":1012,"icon":163,"children":-1},"Postgres \u002F SQLModel schema reference.",1787472744721]