[{"data":1,"prerenderedAt":394},["ShallowReactive",2],{"navigation":3,"\u002Fgetting-started\u002Fintroduction":189,"\u002Fgetting-started\u002Fintroduction-surround":390},[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":11,"body":191,"description":373,"extension":374,"links":375,"meta":386,"navigation":387,"path":12,"seo":388,"stem":13,"__hash__":389},"docs\u002F1.getting-started\u002F1.introduction.md",{"type":192,"value":193,"toc":364},"minimark",[194,203,210,215,251,255,268,272,283,300,303,342,354,358],[195,196,197,198,202],"p",{},"OutlabsAuth is a ",[199,200,201],"strong",{},"library",", not a hosted login service.",[195,204,205,206,209],{},"You install it into your FastAPI app, point it at ",[199,207,208],{},"your"," PostgreSQL database,\nmount the routers you need, and keep authentication and authorization inside\nyour product — without standing up a separate IdP you do not control.",[211,212,214],"h2",{"id":213},"what-you-get","What you get",[216,217,218,233,239,245],"card-group",{},[219,220,222],"card",{"icon":22,"title":221},"Two presets",[195,223,224,228,229,232],{},[225,226,227],"code",{},"SimpleRBAC"," for flat roles, ",[225,230,231],{},"EnterpriseRBAC"," when you need an org tree.",[219,234,236],{"icon":90,"title":235},"Sign-in surface",[195,237,238],{},"JWTs, API keys, invitations, optional OAuth, magic links, and phone access codes.",[219,240,242],{"icon":152,"title":241,"to":150},"Optional sidecar UI",[195,243,244],{},"Operator console we maintain: full management surface against any mounted host.",[219,246,248],{"icon":105,"title":247},"Permissions that scale",[195,249,250],{},"RBAC first, optional ABAC, entity hierarchy, and tree permissions.",[211,252,254],{"id":253},"what-it-is-not","What it is not",[256,257,258],"note",{},[195,259,260,261,264,265,267],{},"OutlabsAuth is ",[199,262,263],{},"not"," a multi-tenant SaaS IdP you sign up for, and ",[199,266,263],{}," a\nblack-box auth microservice you must deploy separately (unless you choose to\nwrap the library that way). Your product still owns customer-facing screens.",[211,269,271],{"id":270},"mental-model","Mental model",[273,274,281],"pre",{"className":275,"code":277,"filename":278,"language":279,"meta":280},[276],"language-text","Your FastAPI app\n├── OutlabsAuth (library)\n│   ├── Postgres tables (users, roles, …) in your DB \u002F schema\n│   ├── Router factories you choose to mount (\u002Fauth, \u002Fusers, …)\n│   └── deps you use on host routes (authenticated, require_permission, …)\n└── Optional: OutlabsAuth UI → talks to your mounted API\n","your-app","text","",[225,282,277],{"__ignoreMap":280},[195,284,285,286,288,289,288,292,295,296,299],{},"You decide the URL prefix (",[225,287,63],{},", ",[225,290,291],{},"\u002Fv1",[225,293,294],{},"\u002Fiam",", …). The admin UI’s\n",[225,297,298],{},"authApiPrefix"," must match that choice.",[211,301,221],{"id":302},"two-presets",[304,305,306,319],"table",{},[307,308,309],"thead",{},[310,311,312,316],"tr",{},[313,314,315],"th",{},"If you need…",[313,317,318],{},"Use",[320,321,322,333],"tbody",{},[310,323,324,328],{},[325,326,327],"td",{},"Users with global roles (blog, SaaS without org tree)",[325,329,330],{},[331,332,227],"a",{"href":20},[310,334,335,338],{},[325,336,337],{},"Hierarchy, “permissions in this team \u002F office”, tree access",[325,339,340],{},[331,341,231],{"href":20},[343,344,345],"tip",{},[195,346,347,348,350,351,353],{},"Short chooser: ",[331,349,19],{"href":20},". Concepts:\n",[331,352,123],{"href":124},".",[211,355,357],{"id":356},"next-step","Next step",[195,359,360,361,363],{},"Continue with ",[331,362,5],{"href":16}," — install,\nmigrate, mount, and log in.",{"title":280,"searchDepth":365,"depth":366,"links":367},1,2,[368,369,370,371,372],{"id":213,"depth":366,"text":214},{"id":253,"depth":366,"text":254},{"id":270,"depth":366,"text":271},{"id":302,"depth":366,"text":221},{"id":356,"depth":366,"text":357},"What OutlabsAuth is, and what it is not.","md",[376,379],{"label":377,"to":16,"icon":6,"color":378},"Get started","primary",{"label":380,"to":381,"icon":382,"target":383,"variant":384,"color":385},"GitHub","https:\u002F\u002Fgithub.com\u002Foutlabsio\u002FoutlabsAuth","i-simple-icons-github","_blank","subtle","neutral",{},{"icon":14},{"title":11,"description":373},"Gk8udjns2mjdha-4dZwZuoje8YBOLHa67f0ea-IGoUU",[391,392],null,{"title":5,"path":16,"stem":17,"description":393,"icon":6,"children":-1},"Install, migrate, mount routers, and log in.",1787472745731]