[{"data":1,"prerenderedAt":1300},["ShallowReactive",2],{"navigation_docs":3,"-docs-getting-started-where-next":493,"-docs-getting-started-where-next-surround":1295},[4,46,135,218,257,292,355,377,420],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":45},"Getting Started","i-lucide-rocket","\u002Fdocs\u002Fgetting-started","docs\u002F01.getting-started",[10,15,20,25,30,35,40],{"title":11,"path":12,"stem":13,"icon":14},"What is Heximon?","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F01.getting-started\u002F01.introduction","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F01.getting-started\u002F02.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Quick Start","\u002Fdocs\u002Fgetting-started\u002Fquick-start","docs\u002F01.getting-started\u002F03.quick-start","i-lucide-zap",{"title":26,"path":27,"stem":28,"icon":29},"Core Concepts","\u002Fdocs\u002Fgetting-started\u002Fcore-concepts","docs\u002F01.getting-started\u002F04.core-concepts","i-lucide-shapes",{"title":31,"path":32,"stem":33,"icon":34},"Examples","\u002Fdocs\u002Fgetting-started\u002Fexamples","docs\u002F01.getting-started\u002F05.examples","i-lucide-library",{"title":36,"path":37,"stem":38,"icon":39},"Where Next?","\u002Fdocs\u002Fgetting-started\u002Fwhere-next","docs\u002F01.getting-started\u002F06.where-next","i-lucide-signpost",{"title":41,"path":42,"stem":43,"icon":44},"Troubleshooting","\u002Fdocs\u002Fgetting-started\u002Ftroubleshooting","docs\u002F01.getting-started\u002F07.troubleshooting","i-lucide-life-buoy",false,{"title":47,"icon":48,"path":49,"stem":50,"children":51,"page":45},"Essentials","i-lucide-boxes","\u002Fdocs\u002Fessentials","docs\u002F02.essentials",[52,56,61,66,71,76,81,86,91,96,101,105,110,115,120,125,130],{"title":53,"path":54,"stem":55,"icon":48},"Modules & DI","\u002Fdocs\u002Fessentials\u002Fmodules-and-di","docs\u002F02.essentials\u002F01.modules-and-di",{"title":57,"path":58,"stem":59,"icon":60},"Controllers","\u002Fdocs\u002Fessentials\u002Fcontrollers","docs\u002F02.essentials\u002F02.controllers","i-lucide-route",{"title":62,"path":63,"stem":64,"icon":65},"Validation & DTOs","\u002Fdocs\u002Fessentials\u002Fvalidation","docs\u002F02.essentials\u002F03.validation","i-lucide-shield-check",{"title":67,"path":68,"stem":69,"icon":70},"Contracts","\u002Fdocs\u002Fessentials\u002Fcontracts","docs\u002F02.essentials\u002F04.contracts","i-lucide-file-signature",{"title":72,"path":73,"stem":74,"icon":75},"REST Client","\u002Fdocs\u002Fessentials\u002Fclient","docs\u002F02.essentials\u002F05.client","i-lucide-plug",{"title":77,"path":78,"stem":79,"icon":80},"Database","\u002Fdocs\u002Fessentials\u002Fdatabase","docs\u002F02.essentials\u002F06.database","i-lucide-database",{"title":82,"path":83,"stem":84,"icon":85},"Drizzle ORM","\u002Fdocs\u002Fessentials\u002Fdrizzle","docs\u002F02.essentials\u002F07.drizzle","i-lucide-database-zap",{"title":87,"path":88,"stem":89,"icon":90},"Persistence & Transactions","\u002Fdocs\u002Fessentials\u002Fpersistence","docs\u002F02.essentials\u002F08.persistence","i-lucide-database-backup",{"title":92,"path":93,"stem":94,"icon":95},"Migrations","\u002Fdocs\u002Fessentials\u002Fmigrations","docs\u002F02.essentials\u002F09.migrations","i-lucide-git-branch",{"title":97,"path":98,"stem":99,"icon":100},"Authentication","\u002Fdocs\u002Fessentials\u002Fauthentication","docs\u002F02.essentials\u002F10.authentication","i-lucide-key-round",{"title":102,"path":103,"stem":104,"icon":65},"Permissions & scopes","\u002Fdocs\u002Fessentials\u002Fpermissions","docs\u002F02.essentials\u002F11.permissions",{"title":106,"path":107,"stem":108,"icon":109},"Error Handling","\u002Fdocs\u002Fessentials\u002Ferrors","docs\u002F02.essentials\u002F12.errors","i-lucide-triangle-alert",{"title":111,"path":112,"stem":113,"icon":114},"Testing a Heximon App","\u002Fdocs\u002Fessentials\u002Ftesting","docs\u002F02.essentials\u002F13.testing","i-lucide-flask-conical",{"title":116,"path":117,"stem":118,"icon":119},"Test app harness","\u002Fdocs\u002Fessentials\u002Fcreatetestapp","docs\u002F02.essentials\u002F14.createtestapp","i-lucide-test-tube",{"title":121,"path":122,"stem":123,"icon":124},"Logging & Observability","\u002Fdocs\u002Fessentials\u002Flogging","docs\u002F02.essentials\u002F17.logging","i-lucide-scroll-text",{"title":126,"path":127,"stem":128,"icon":129},"Context & Lifecycle","\u002Fdocs\u002Fessentials\u002Fcontext-and-lifecycle","docs\u002F02.essentials\u002F18.context-and-lifecycle","i-lucide-radio",{"title":131,"path":132,"stem":133,"icon":134},"Project Structure","\u002Fdocs\u002Fessentials\u002Fproject-structure","docs\u002F02.essentials\u002F19.project-structure","i-lucide-folder-tree",{"title":136,"icon":137,"path":138,"stem":139,"children":140,"page":45},"Capabilities","i-lucide-sparkles","\u002Fdocs\u002Fcapabilities","docs\u002F03.capabilities",[141,145,150,155,160,164,169,174,179,184,188,193,198,203,208,213],{"title":142,"path":143,"stem":144,"icon":137},"Overview","\u002Fdocs\u002Fcapabilities\u002Foverview","docs\u002F03.capabilities\u002F01.overview",{"title":146,"path":147,"stem":148,"icon":149},"Events","\u002Fdocs\u002Fcapabilities\u002Fevents","docs\u002F03.capabilities\u002F02.events","i-lucide-radio-tower",{"title":151,"path":152,"stem":153,"icon":154},"Queue","\u002Fdocs\u002Fcapabilities\u002Fbackground-jobs","docs\u002F03.capabilities\u002F03.background-jobs","i-lucide-list-ordered",{"title":156,"path":157,"stem":158,"icon":159},"Scheduled Work","\u002Fdocs\u002Fcapabilities\u002Fscheduled-jobs","docs\u002F03.capabilities\u002F04.scheduled-jobs","i-lucide-clock",{"title":161,"path":162,"stem":163,"icon":85},"Caching","\u002Fdocs\u002Fcapabilities\u002Fcaching","docs\u002F03.capabilities\u002F05.caching",{"title":165,"path":166,"stem":167,"icon":168},"Key\u002FValue Storage","\u002Fdocs\u002Fcapabilities\u002Fkey-value","docs\u002F03.capabilities\u002F06.key-value","i-lucide-hard-drive",{"title":170,"path":171,"stem":172,"icon":173},"Blob Storage","\u002Fdocs\u002Fcapabilities\u002Fblob","docs\u002F03.capabilities\u002F07.blob","i-lucide-folder-open",{"title":175,"path":176,"stem":177,"icon":178},"Health & Readiness","\u002Fdocs\u002Fcapabilities\u002Fhealth","docs\u002F03.capabilities\u002F08.health","i-lucide-heart-pulse",{"title":180,"path":181,"stem":182,"icon":183},"Notifications","\u002Fdocs\u002Fcapabilities\u002Fnotifications","docs\u002F03.capabilities\u002F09.notifications","i-lucide-mail",{"title":185,"path":186,"stem":187,"icon":65},"Idempotency","\u002Fdocs\u002Fcapabilities\u002Fidempotency","docs\u002F03.capabilities\u002F10.idempotency",{"title":189,"path":190,"stem":191,"icon":192},"Security Hardening","\u002Fdocs\u002Fcapabilities\u002Fsecurity","docs\u002F03.capabilities\u002F11.security","i-lucide-shield",{"title":194,"path":195,"stem":196,"icon":197},"Observability & Tracing","\u002Fdocs\u002Fcapabilities\u002Fobservability","docs\u002F03.capabilities\u002F12.observability","i-lucide-activity",{"title":199,"path":200,"stem":201,"icon":202},"OpenAPI","\u002Fdocs\u002Fcapabilities\u002Fopenapi","docs\u002F03.capabilities\u002F13.openapi","i-lucide-book-marked",{"title":204,"path":205,"stem":206,"icon":207},"MCP Server","\u002Fdocs\u002Fcapabilities\u002Fmcp","docs\u002F03.capabilities\u002F14.mcp","i-lucide-bot",{"title":209,"path":210,"stem":211,"icon":212},"Schema DTOs","\u002Fdocs\u002Fcapabilities\u002Fschema","docs\u002F03.capabilities\u002F15.schema","i-lucide-file-json",{"title":214,"path":215,"stem":216,"icon":217},"Branded IDs","\u002Fdocs\u002Fcapabilities\u002Fbranded-ids","docs\u002F03.capabilities\u002F16.branded-ids","i-lucide-tag",{"title":219,"icon":220,"path":221,"stem":222,"children":223,"page":45},"Architecture","i-lucide-building","\u002Fdocs\u002Farchitecture","docs\u002F04.architecture",[224,227,232,237,242,247,252],{"title":142,"path":225,"stem":226,"icon":220},"\u002Fdocs\u002Farchitecture\u002Foverview","docs\u002F04.architecture\u002F01.overview",{"title":228,"path":229,"stem":230,"icon":231},"Domain-Driven Design","\u002Fdocs\u002Farchitecture\u002Fddd","docs\u002F04.architecture\u002F02.ddd","i-lucide-hexagon",{"title":233,"path":234,"stem":235,"icon":236},"CQRS","\u002Fdocs\u002Farchitecture\u002Fcqrs","docs\u002F04.architecture\u002F03.cqrs","i-lucide-split",{"title":238,"path":239,"stem":240,"icon":241},"Repository Pattern","\u002Fdocs\u002Farchitecture\u002Frepository-pattern","docs\u002F04.architecture\u002F04.repository-pattern","i-lucide-archive",{"title":243,"path":244,"stem":245,"icon":246},"Integration Events","\u002Fdocs\u002Farchitecture\u002Fintegration-events","docs\u002F04.architecture\u002F05.integration-events","i-lucide-send-horizontal",{"title":248,"path":249,"stem":250,"icon":251},"Saga Orchestration","\u002Fdocs\u002Farchitecture\u002Fsagas","docs\u002F04.architecture\u002F06.sagas","i-lucide-hourglass",{"title":253,"path":254,"stem":255,"icon":256},"Durable Workflows","\u002Fdocs\u002Farchitecture\u002Fworkflows","docs\u002F04.architecture\u002F07.workflows","i-lucide-workflow",{"title":258,"icon":259,"path":260,"stem":261,"children":262,"page":45},"Realtime","i-lucide-cable","\u002Fdocs\u002Frealtime","docs\u002F05.realtime",[263,266,270,274,279,284,288],{"title":142,"path":264,"stem":265,"icon":259},"\u002Fdocs\u002Frealtime\u002Foverview","docs\u002F05.realtime\u002F01.overview",{"title":267,"path":268,"stem":269,"icon":129},"WebSockets","\u002Fdocs\u002Frealtime\u002Fwebsockets","docs\u002F05.realtime\u002F02.websockets",{"title":271,"path":272,"stem":273,"icon":70},"WebSocket Contracts","\u002Fdocs\u002Frealtime\u002Fwebsocket-contracts","docs\u002F05.realtime\u002F03.websocket-contracts",{"title":275,"path":276,"stem":277,"icon":278},"Server-Sent Events","\u002Fdocs\u002Frealtime\u002Fserver-sent-events","docs\u002F05.realtime\u002F04.server-sent-events","i-lucide-rss",{"title":280,"path":281,"stem":282,"icon":283},"Typed Clients","\u002Fdocs\u002Frealtime\u002Ftyped-clients","docs\u002F05.realtime\u002F05.typed-clients","i-lucide-plug-zap",{"title":285,"path":286,"stem":287,"icon":259},"AsyncAPI","\u002Fdocs\u002Frealtime\u002Fasyncapi","docs\u002F05.realtime\u002F06.asyncapi",{"title":289,"path":290,"stem":291,"icon":80},"Durable Objects","\u002Fdocs\u002Frealtime\u002Fdurable-objects","docs\u002F05.realtime\u002F07.durable-objects",{"title":293,"icon":294,"path":295,"stem":296,"children":297,"page":45},"Deploy","i-lucide-cloud-upload","\u002Fdocs\u002Fdeploy","docs\u002F06.deploy",[298,301,306,311,316,321,326,331,336,341,345,350],{"title":142,"path":299,"stem":300,"icon":6},"\u002Fdocs\u002Fdeploy\u002Foverview","docs\u002F06.deploy\u002F01.overview",{"title":302,"path":303,"stem":304,"icon":305},"Node","\u002Fdocs\u002Fdeploy\u002Fnode","docs\u002F06.deploy\u002F02.node","la:node-js",{"title":307,"path":308,"stem":309,"icon":310},"Cloudflare","\u002Fdocs\u002Fdeploy\u002Fcloudflare","docs\u002F06.deploy\u002F03.cloudflare","simple-icons:cloudflare",{"title":312,"path":313,"stem":314,"icon":315},"Vercel","\u002Fdocs\u002Fdeploy\u002Fvercel","docs\u002F06.deploy\u002F04.vercel","ri:vercel-fill",{"title":317,"path":318,"stem":319,"icon":320},"Netlify","\u002Fdocs\u002Fdeploy\u002Fnetlify","docs\u002F06.deploy\u002F05.netlify","i-simple-icons-netlify",{"title":322,"path":323,"stem":324,"icon":325},"AWS Lambda","\u002Fdocs\u002Fdeploy\u002Faws-lambda","docs\u002F06.deploy\u002F06.aws-lambda","hugeicons:aws-lambda",{"title":327,"path":328,"stem":329,"icon":330},"Deno Deploy","\u002Fdocs\u002Fdeploy\u002Fdeno-deploy","docs\u002F06.deploy\u002F07.deno-deploy","simple-icons:denodeploy",{"title":332,"path":333,"stem":334,"icon":335},"Nitro","\u002Fdocs\u002Fdeploy\u002Fnitro","docs\u002F06.deploy\u002F08.nitro","i-unjs-nitro",{"title":337,"path":338,"stem":339,"icon":340},"Nuxt","\u002Fdocs\u002Fdeploy\u002Fnuxt","docs\u002F06.deploy\u002F09.nuxt","i-devicon-nuxt",{"title":342,"path":343,"stem":344,"icon":236},"Mixed-runtime split","\u002Fdocs\u002Fdeploy\u002Fmixed-runtime-split","docs\u002F06.deploy\u002F10.mixed-runtime-split",{"title":346,"path":347,"stem":348,"icon":349},"Hosts","\u002Fdocs\u002Fdeploy\u002Fhosts","docs\u002F06.deploy\u002F11.hosts","i-lucide-map",{"title":351,"path":352,"stem":353,"icon":354},"Cross-service events","\u002Fdocs\u002Fdeploy\u002Fcross-service-events","docs\u002F06.deploy\u002F12.cross-service-events","i-lucide-network",{"title":356,"icon":357,"path":358,"stem":359,"children":360,"page":45},"CLI","i-lucide-terminal","\u002Fdocs\u002Fcli","docs\u002F07.cli",[361,365,369,373],{"title":362,"path":363,"stem":364,"icon":357},"The heximon CLI","\u002Fdocs\u002Fcli\u002Foverview","docs\u002F07.cli\u002F01.overview",{"title":366,"path":367,"stem":368,"icon":137},"Create a New App","\u002Fdocs\u002Fcli\u002Fcreate","docs\u002F07.cli\u002F02.create",{"title":370,"path":371,"stem":372,"icon":95},"Migrations from the CLI","\u002Fdocs\u002Fcli\u002Fmigrations","docs\u002F07.cli\u002F03.migrations",{"title":374,"path":375,"stem":376,"icon":6},"Deploying a Heximon app","\u002Fdocs\u002Fcli\u002Fdeploy","docs\u002F07.cli\u002F04.deploy",{"title":378,"icon":379,"path":380,"stem":381,"children":382,"page":45},"Under the Hood","i-lucide-wrench","\u002Fdocs\u002Funder-the-hood","docs\u002F08.under-the-hood",[383,388,393,397,402,407,411,415],{"title":384,"path":385,"stem":386,"icon":387},"How the Compiler Works","\u002Fdocs\u002Funder-the-hood\u002Fhow-the-compiler-works","docs\u002F08.under-the-hood\u002F01.how-the-compiler-works","i-lucide-cog",{"title":389,"path":390,"stem":391,"icon":392},"Compiler","\u002Fdocs\u002Funder-the-hood\u002Fextending-the-compiler","docs\u002F08.under-the-hood\u002F02.extending-the-compiler","i-lucide-cpu",{"title":394,"path":395,"stem":396,"icon":357},"Compiler Diagnostics","\u002Fdocs\u002Funder-the-hood\u002Fcompiler-diagnostics","docs\u002F08.under-the-hood\u002F03.compiler-diagnostics",{"title":398,"path":399,"stem":400,"icon":401},"Library Mode","\u002Fdocs\u002Funder-the-hood\u002Flibrary-mode","docs\u002F08.under-the-hood\u002F04.library-mode","i-lucide-package",{"title":403,"path":404,"stem":405,"icon":406},"Other bundlers","\u002Fdocs\u002Funder-the-hood\u002Falternate-bundlers","docs\u002F08.under-the-hood\u002F05.alternate-bundlers","i-lucide-blocks",{"title":408,"path":409,"stem":410,"icon":401},"Packages","\u002Fdocs\u002Funder-the-hood\u002Fpackages","docs\u002F08.under-the-hood\u002F06.packages",{"title":412,"path":413,"stem":414,"icon":207},"AI Skills","\u002Fdocs\u002Funder-the-hood\u002Fai-and-agents","docs\u002F08.under-the-hood\u002F07.ai-and-agents",{"title":416,"path":417,"stem":418,"icon":419},"Advanced DI","\u002Fdocs\u002Funder-the-hood\u002Fadvanced-di","docs\u002F08.under-the-hood\u002F08.advanced-di","i-lucide-git-fork",{"title":421,"icon":422,"path":423,"stem":424,"children":425,"page":45},"Recipes","i-lucide-book-open-check","\u002Fdocs\u002Frecipes","docs\u002F09.recipes",[426,431,436,440,444,448,452,456,460,465,469,474,479,484,488],{"title":427,"path":428,"stem":429,"icon":430},"Send an Email","\u002Fdocs\u002Frecipes\u002Fsend-an-email","docs\u002F09.recipes\u002F01.send-an-email","i-lucide-send",{"title":432,"path":433,"stem":434,"icon":435},"Upload a File","\u002Fdocs\u002Frecipes\u002Fupload-a-file","docs\u002F09.recipes\u002F02.upload-a-file","i-lucide-upload",{"title":437,"path":438,"stem":439,"icon":24},"Cache an Expensive Call","\u002Fdocs\u002Frecipes\u002Fcache-an-expensive-call","docs\u002F09.recipes\u002F03.cache-an-expensive-call",{"title":441,"path":442,"stem":443,"icon":154},"Paginate a List","\u002Fdocs\u002Frecipes\u002Fpaginate-a-list","docs\u002F09.recipes\u002F04.paginate-a-list",{"title":445,"path":446,"stem":447,"icon":65},"Protect Admin Routes","\u002Fdocs\u002Frecipes\u002Fprotect-admin-routes","docs\u002F09.recipes\u002F05.protect-admin-routes",{"title":449,"path":450,"stem":451,"icon":178},"Health Probes and a Nightly Job","\u002Fdocs\u002Frecipes\u002Fhealth-probes-and-a-nightly-job","docs\u002F09.recipes\u002F06.health-probes-and-a-nightly-job",{"title":453,"path":454,"stem":455,"icon":80},"Build a CRUD API","\u002Fdocs\u002Frecipes\u002Fcrud-api","docs\u002F09.recipes\u002F07.crud-api",{"title":457,"path":458,"stem":459,"icon":100},"Add Authentication","\u002Fdocs\u002Frecipes\u002Fadd-authentication","docs\u002F09.recipes\u002F08.add-authentication",{"title":461,"path":462,"stem":463,"icon":464},"Background Jobs","\u002Fdocs\u002Frecipes\u002Fbackground-jobs","docs\u002F09.recipes\u002F09.background-jobs","i-lucide-timer",{"title":466,"path":467,"stem":468,"icon":149},"Decouple Features with Events","\u002Fdocs\u002Frecipes\u002Fevent-driven-module","docs\u002F09.recipes\u002F10.event-driven-module",{"title":470,"path":471,"stem":472,"icon":473},"Build a DDD Aggregate","\u002Fdocs\u002Frecipes\u002Fddd-aggregate","docs\u002F09.recipes\u002F11.ddd-aggregate","i-lucide-box",{"title":475,"path":476,"stem":477,"icon":478},"Publish a Feature Package","\u002Fdocs\u002Frecipes\u002Ffeature-package","docs\u002F09.recipes\u002F12.feature-package","i-lucide-package-open",{"title":480,"path":481,"stem":482,"icon":483},"Reliable Integration Events","\u002Fdocs\u002Frecipes\u002Freliable-integration-events","docs\u002F09.recipes\u002F13.reliable-integration-events","i-lucide-inbox",{"title":485,"path":486,"stem":487,"icon":95},"Reactive Choreography","\u002Fdocs\u002Frecipes\u002Freactive-choreography","docs\u002F09.recipes\u002F14.reactive-choreography",{"title":489,"path":490,"stem":491,"icon":492},"Build a Production CRUD API","\u002Fdocs\u002Frecipes\u002Fproduction-crud-api","docs\u002F09.recipes\u002F15.production-crud-api","i-lucide-layers",{"id":494,"title":36,"body":495,"description":1288,"extension":1289,"links":1290,"meta":1291,"navigation":1292,"path":37,"seo":1293,"stem":38,"__hash__":1294},"docs\u002Fdocs\u002F01.getting-started\u002F06.where-next.md",{"type":496,"value":497,"toc":1280},"minimark",[498,502,507,510,729,733,736,931,935,940,1086,1090,1093,1270],[499,500,501],"p",{},"You have a running app: a module, a provider, a controller. Everything past this point is the same move — add a package, add one namespace key to your module config, and write a plain class the compiler wires for you. This page is the map: find the goal you have next, and it points you at the package, the guide, and a runnable example that proves it.",[503,504,506],"h2",{"id":505},"real-product","Real product",[499,508,509],{},"The things almost every API needs, in roughly the order you'll reach for them.",[511,512,513,533],"table",{},[514,515,516],"thead",{},[517,518,519,524,527,530],"tr",{},[520,521,523],"th",{"align":522},"left","I want to…",[520,525,526],{"align":522},"Package(s)",[520,528,529],{"align":522},"Guide",[520,531,532],{"align":522},"Proven by",[534,535,536,564,587,619,643,666,688,708],"tbody",{},[517,537,538,542,548,554],{},[539,540,541],"td",{"align":522},"Split a feature behind its own module",[539,543,544],{"align":522},[545,546,547],"code",{},"runtime",[539,549,550],{"align":522},[551,552,553],"a",{"href":54},"Modules",[539,555,556],{"align":522},[551,557,561],{"href":558,"rel":559},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fladder\u002FL01-minimal",[560],"nofollow",[545,562,563],{},"L01-minimal",[517,565,566,569,574,578],{},[539,567,568],{"align":522},"Validate a request body",[539,570,571],{"align":522},[545,572,573],{},"schema",[539,575,576],{"align":522},[551,577,62],{"href":63},[539,579,580],{"align":522},[551,581,584],{"href":582,"rel":583},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fladder\u002FL02-http-validation",[560],[545,585,586],{},"L02-http-validation",[517,588,589,597,606,610],{},[539,590,591,592,596],{"align":522},"Define an API once for server ",[593,594,595],"strong",{},"and"," client",[539,598,599,602,603],{"align":522},[545,600,601],{},"contract"," + ",[545,604,605],{},"client",[539,607,608],{"align":522},[551,609,67],{"href":68},[539,611,612],{"align":522},[551,613,616],{"href":614,"rel":615},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap\u002Fopenapi-mcp",[560],[545,617,618],{},"openapi-mcp",[517,620,621,624,629,634],{},[539,622,623],{"align":522},"Persist real data",[539,625,626],{"align":522},[545,627,628],{},"drizzle",[539,630,631],{"align":522},[551,632,633],{"href":83},"Drizzle",[539,635,636],{"align":522},[551,637,640],{"href":638,"rel":639},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fladder\u002FL04-database",[560],[545,641,642],{},"L04-database",[517,644,645,648,653,657],{},[539,646,647],{"align":522},"Protect endpoints",[539,649,650],{"align":522},[545,651,652],{},"auth",[539,654,655],{"align":522},[551,656,97],{"href":98},[539,658,659],{"align":522},[551,660,663],{"href":661,"rel":662},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fladder\u002FL07-auth",[560],[545,664,665],{},"L07-auth",[517,667,668,671,676,681],{},[539,669,670],{"align":522},"Test a module end-to-end",[539,672,673],{"align":522},[545,674,675],{},"testing",[539,677,678],{"align":522},[551,679,680],{"href":112},"Testing Guide",[539,682,683],{"align":522},[551,684,686],{"href":558,"rel":685},[560],[545,687,563],{},[517,689,690,693,697,701],{},[539,691,692],{"align":522},"Turn framework failures into consistent JSON errors",[539,694,695],{"align":522},[545,696,547],{},[539,698,699],{"align":522},[551,700,106],{"href":107},[539,702,703],{"align":522},[551,704,706],{"href":582,"rel":705},[560],[545,707,586],{},[517,709,710,713,718,722],{},[539,711,712],{"align":522},"Structure logs and trace a request",[539,714,715],{"align":522},[545,716,717],{},"logging",[539,719,720],{"align":522},[551,721,121],{"href":122},[539,723,724],{"align":522},[551,725,727],{"href":558,"rel":726},[560],[545,728,563],{},[503,730,732],{"id":731},"production-concerns","Production concerns",[499,734,735],{},"Operational needs — nothing here changes your architecture, it just makes the app production-grade.",[511,737,738,750],{},[514,739,740],{},[517,741,742,744,746,748],{},[520,743,523],{"align":522},[520,745,526],{"align":522},[520,747,529],{"align":522},[520,749,532],{"align":522},[534,751,752,775,799,822,843,873,892,909],{},[517,753,754,757,762,766],{},[539,755,756],{"align":522},"Decouple modules with events",[539,758,759],{"align":522},[545,760,761],{},"events",[539,763,764],{"align":522},[551,765,146],{"href":147},[539,767,768],{"align":522},[551,769,772],{"href":770,"rel":771},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fladder\u002FL03-events",[560],[545,773,774],{},"L03-events",[517,776,777,780,785,790],{},[539,778,779],{"align":522},"Run work off the request path",[539,781,782],{"align":522},[545,783,784],{},"queue",[539,786,787],{"align":522},[551,788,789],{"href":152},"Queue & Messaging",[539,791,792],{"align":522},[551,793,796],{"href":794,"rel":795},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fladder\u002FL08-queue",[560],[545,797,798],{},"L08-queue",[517,800,801,804,809,813],{},[539,802,803],{"align":522},"Run work on a schedule",[539,805,806],{"align":522},[545,807,808],{},"schedule",[539,810,811],{"align":522},[551,812,156],{"href":157},[539,814,815],{"align":522},[551,816,819],{"href":817,"rel":818},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap\u002Fedge-platforms",[560],[545,820,821],{},"edge-platforms",[517,823,824,827,832,836],{},[539,825,826],{"align":522},"Cache reads",[539,828,829],{"align":522},[545,830,831],{},"cache",[539,833,834],{"align":522},[551,835,161],{"href":162},[539,837,838],{"align":522},[551,839,842],{"href":840,"rel":841},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fflagship",[560],"flagship",[517,844,845,848,857,864],{},[539,846,847],{"align":522},"Store simple key\u002Fvalue data or files",[539,849,850,853,854],{"align":522},[545,851,852],{},"kv"," · ",[545,855,856],{},"blob",[539,858,859,861,862],{"align":522},[551,860,165],{"href":166},", ",[551,863,170],{"href":171},[539,865,866],{"align":522},[551,867,870],{"href":868,"rel":869},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap\u002Fstorage-blob-adapters",[560],[545,871,872],{},"storage-blob-adapters",[517,874,875,878,883,887],{},[539,876,877],{"align":522},"Expose health and readiness probes",[539,879,880],{"align":522},[545,881,882],{},"health",[539,884,885],{"align":522},[551,886,175],{"href":176},[539,888,889],{"align":522},[551,890,842],{"href":840,"rel":891},[560],[517,893,894,897,900,904],{},[539,895,896],{"align":522},"Make a retried write or event safe to run twice",[539,898,899],{"align":522},"(idempotency subpaths)",[539,901,902],{"align":522},[551,903,185],{"href":186},[539,905,906],{"align":522},[551,907,842],{"href":840,"rel":908},[560],[517,910,911,914,919,923],{},[539,912,913],{"align":522},"Send email, SMS, or push notifications",[539,915,916],{"align":522},[545,917,918],{},"notifications",[539,920,921],{"align":522},[551,922,180],{"href":181},[539,924,925],{"align":522},[551,926,929],{"href":927,"rel":928},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap\u002Fnotifications",[560],[545,930,918],{},[503,932,934],{"id":933},"architecture-at-scale","Architecture at scale",[936,937,939],"callout",{"type":938},"info","Opt-in — reach for these when your domain earns it, not by default. A CRUD API with a few routes doesn't need any of this.",[511,941,942,954],{},[514,943,944],{},[517,945,946,948,950,952],{},[520,947,523],{"align":522},[520,949,526],{"align":522},[520,951,529],{"align":522},[520,953,532],{"align":522},[534,955,956,979,1002,1021,1044,1063],{},[517,957,958,961,966,970],{},[539,959,960],{"align":522},"Split writes from reads",[539,962,963],{"align":522},[545,964,965],{},"cqrs",[539,967,968],{"align":522},[551,969,233],{"href":234},[539,971,972],{"align":522},[551,973,976],{"href":974,"rel":975},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fladder\u002FL05-cqrs",[560],[545,977,978],{},"L05-cqrs",[517,980,981,984,989,993],{},[539,982,983],{"align":522},"Model a domain with invariants",[539,985,986],{"align":522},[545,987,988],{},"domain",[539,990,991],{"align":522},[551,992,228],{"href":229},[539,994,995],{"align":522},[551,996,999],{"href":997,"rel":998},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fladder\u002FL06-ddd",[560],[545,1000,1001],{},"L06-ddd",[517,1003,1004,1007,1012,1016],{},[539,1005,1006],{"align":522},"Publish events reliably across services",[539,1008,1009],{"align":522},[545,1010,1011],{},"integration",[539,1013,1014],{"align":522},[551,1015,243],{"href":244},[539,1017,1018],{"align":522},[551,1019,842],{"href":840,"rel":1020},[560],[517,1022,1023,1026,1031,1035],{},[539,1024,1025],{"align":522},"Coordinate a multi-step process with a deadline",[539,1027,1028],{"align":522},[545,1029,1030],{},"saga",[539,1032,1033],{"align":522},[551,1034,248],{"href":249},[539,1036,1037],{"align":522},[551,1038,1041],{"href":1039,"rel":1040},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap\u002Fsaga-orchestration",[560],[545,1042,1043],{},"saga-orchestration",[517,1045,1046,1049,1054,1058],{},[539,1047,1048],{"align":522},"Write a durable, resumable procedure",[539,1050,1051],{"align":522},[545,1052,1053],{},"workflow",[539,1055,1056],{"align":522},[551,1057,253],{"href":254},[539,1059,1060],{"align":522},[551,1061,842],{"href":840,"rel":1062},[560],[517,1064,1065,1068,1073,1077],{},[539,1066,1067],{"align":522},"Fan one event out to several independent services",[539,1069,1070,1072],{"align":522},[545,1071,784],{}," (cross-service transports)",[539,1074,1075],{"align":522},[551,1076,243],{"href":244},[539,1078,1079],{"align":522},[551,1080,1083],{"href":1081,"rel":1082},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap\u002Fcross-service-transports",[560],[545,1084,1085],{},"cross-service-transports",[503,1087,1089],{"id":1088},"platform-superpowers","Platform superpowers",[499,1091,1092],{},"Real-time transports, tracing, and per-platform deploys — the same modules, running unchanged.",[511,1094,1095,1107],{},[514,1096,1097],{},[517,1098,1099,1101,1103,1105],{},[520,1100,523],{"align":522},[520,1102,526],{"align":522},[520,1104,529],{"align":522},[520,1106,532],{"align":522},[534,1108,1109,1138,1159,1181,1202,1244],{},[517,1110,1111,1114,1122,1128],{},[539,1112,1113],{"align":522},"Push updates to a connected client",[539,1115,1116,853,1119],{"align":522},[545,1117,1118],{},"websocket",[545,1120,1121],{},"sse",[539,1123,1124,861,1126],{"align":522},[551,1125,267],{"href":268},[551,1127,275],{"href":276},[539,1129,1130],{"align":522},[551,1131,1134,1135],{"href":1132,"rel":1133},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fflagship\u002Fapps\u002Fcloudflare",[560],"flagship's ",[545,1136,1137],{},"apps\u002Fcloudflare",[517,1139,1140,1143,1148,1152],{},[539,1141,1142],{"align":522},"Hold state across messages on the edge",[539,1144,1145],{"align":522},[545,1146,1147],{},"durable",[539,1149,1150],{"align":522},[551,1151,289],{"href":290},[539,1153,1154],{"align":522},[551,1155,1134,1157],{"href":1132,"rel":1156},[560],[545,1158,1137],{},[517,1160,1161,1164,1168,1172],{},[539,1162,1163],{"align":522},"Get typed clients for WebSockets and SSE",[539,1165,1166],{"align":522},[545,1167,605],{},[539,1169,1170],{"align":522},[551,1171,280],{"href":281},[539,1173,1174],{"align":522},[551,1175,1134,1178],{"href":1176,"rel":1177},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fflagship\u002Fpackages\u002Frealtime",[560],[545,1179,1180],{},"packages\u002Frealtime",[517,1182,1183,1186,1191,1195],{},[539,1184,1185],{"align":522},"Trace requests with OpenTelemetry",[539,1187,1188],{"align":522},[545,1189,1190],{},"otel",[539,1192,1193],{"align":522},[551,1194,194],{"href":195},[539,1196,1197],{"align":522},[551,1198,1200],{"href":817,"rel":1199},[560],[545,1201,821],{},[517,1203,1204,1207,1230,1235],{},[539,1205,1206],{"align":522},"Deploy to Cloudflare, Vercel, Netlify, AWS, or Deno",[539,1208,1209,853,1212,853,1215,853,1218,853,1221,853,1224,853,1227],{"align":522},[545,1210,1211],{},"nitro",[545,1213,1214],{},"node",[545,1216,1217],{},"cloudflare",[545,1219,1220],{},"vercel",[545,1222,1223],{},"netlify",[545,1225,1226],{},"aws",[545,1228,1229],{},"deno",[539,1231,1232],{"align":522},[551,1233,1234],{"href":299},"Deploy targets",[539,1236,1237],{"align":522},[551,1238,1241],{"href":1239,"rel":1240},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap\u002Fnitro-presets",[560],[545,1242,1243],{},"nitro-presets",[517,1245,1246,1249,1257,1263],{},[539,1247,1248],{"align":522},"Ship an OpenAPI doc or an MCP tool surface from a contract",[539,1250,1251,853,1254],{"align":522},[545,1252,1253],{},"openapi",[545,1255,1256],{},"mcp",[539,1258,1259,861,1261],{"align":522},[551,1260,199],{"href":200},[551,1262,204],{"href":205},[539,1264,1265],{"align":522},[551,1266,1268],{"href":614,"rel":1267},[560],[545,1269,618],{},[499,1271,1272,1273,1275,1276,1279],{},"The full runnable catalog — every ladder step, the flagship monorepo, and every gap example — lives on the ",[551,1274,31],{"href":32}," page. Clone one, run ",[545,1277,1278],{},"pnpm dev",", and read the source alongside whichever guide you picked above.",{"title":1281,"searchDepth":1282,"depth":1282,"links":1283},"",2,[1284,1285,1286,1287],{"id":505,"depth":1282,"text":506},{"id":731,"depth":1282,"text":732},{"id":933,"depth":1282,"text":934},{"id":1088,"depth":1282,"text":1089},"A goal-to-package map for everything past the Quick Start — contracts, databases, auth, background jobs, real-time, and deployment.","md",null,{},{"icon":39},{"title":36,"description":1288},"bEThrWYmQVrzEMAY-RbyscHRjy_E-TaFLAZ4W_pmKo4",[1296,1298],{"title":31,"path":32,"stem":33,"description":1297,"icon":34,"children":-1},"Runnable examples in three tiers — a progressive learning ladder (L01–L08), the event-ticketing flagship monorepo, and thematic gap examples for platform and feature one-offs.",{"title":41,"path":42,"stem":43,"description":1299,"icon":44,"children":-1},"Fixes for the common first-run issues — missing routes, unresolved dependencies, validation 400s, a hanging middleware, a failed build after an edit — plus deeper diagnostics for contracts, scopes, and context.",1783300761903]