[{"data":1,"prerenderedAt":2773},["ShallowReactive",2],{"navigation_docs":3,"-docs-deploy-nitro":493,"-docs-deploy-nitro-surround":2768},[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":332,"body":495,"description":2761,"extension":2762,"links":2763,"meta":2764,"navigation":2765,"path":333,"seo":2766,"stem":334,"__hash__":2767},"docs\u002Fdocs\u002F06.deploy\u002F08.nitro.md",{"type":496,"value":497,"toc":2749},"minimark",[498,509,514,586,600,604,639,788,876,986,1013,1021,1037,1041,1054,1202,1212,1216,1223,1722,1733,1876,1883,1971,1986,1990,2001,2070,2128,2185,2192,2239,2267,2271,2289,2303,2307,2317,2331,2522,2531,2535,2558,2562,2576,2589,2668,2680,2702,2706,2745],[499,500,501,502,508],"p",{},"Host the same Heximon modules inside ",[503,504,332],"a",{"href":505,"rel":506},"https:\u002F\u002Fnitro.build\u002F",[507],"nofollow"," and you can deploy them to Node, Cloudflare\nWorkers, Deno, Bun, or AWS Lambda by changing one preset — nothing in your app code changes. Nitro owns the\nplatform (route rules, caching, headers, the live server); Heximon owns the app (the DI graph, validation, error\nfilters). You wire the two together with a single config entry and never write a compile step.",[510,511,513],"h2",{"id":512},"install-the-package","Install the package",[515,516,517,543,558,572],"code-group",{},[518,519,525],"pre",{"className":520,"code":521,"filename":522,"language":523,"meta":524,"style":524},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add @heximon\u002Fnitro\n","pnpm","bash","",[526,527,528],"code",{"__ignoreMap":524},[529,530,533,536,540],"span",{"class":531,"line":532},"line",1,[529,534,522],{"class":535},"sBMFI",[529,537,539],{"class":538},"sfazB"," add",[529,541,542],{"class":538}," @heximon\u002Fnitro\n",[518,544,547],{"className":520,"code":545,"filename":546,"language":523,"meta":524,"style":524},"npm install @heximon\u002Fnitro\n","npm",[526,548,549],{"__ignoreMap":524},[529,550,551,553,556],{"class":531,"line":532},[529,552,546],{"class":535},[529,554,555],{"class":538}," install",[529,557,542],{"class":538},[518,559,562],{"className":520,"code":560,"filename":561,"language":523,"meta":524,"style":524},"yarn add @heximon\u002Fnitro\n","yarn",[526,563,564],{"__ignoreMap":524},[529,565,566,568,570],{"class":531,"line":532},[529,567,561],{"class":535},[529,569,539],{"class":538},[529,571,542],{"class":538},[518,573,576],{"className":520,"code":574,"filename":575,"language":523,"meta":524,"style":524},"bun add @heximon\u002Fnitro\n","bun",[526,577,578],{"__ignoreMap":524},[529,579,580,582,584],{"class":531,"line":532},[529,581,575],{"class":535},[529,583,539],{"class":538},[529,585,542],{"class":538},[499,587,588,591,592,595,596,599],{},[526,589,590],{},"nitro"," is an optional peer dependency — you install it as part of your Nitro app, not through Heximon (the\nworkspace pins ",[526,593,594],{},"nitro@3.0.260603-beta","). The Heximon package only pulls Nitro in when you actually build against\nit, so importing the runtime client or the compiler plugin elsewhere costs you nothing. The dev loop below needs\none more dev dependency, ",[526,597,598],{},"vite-plus"," — the same Vite-based toolchain the Vite host uses.",[510,601,603],{"id":602},"register-the-host-module-and-its-dev-loop","Register the host module and its dev loop",[499,605,606,607,611,612,615,616,619,620,623,624,627,628,631,632,635,636,638],{},"List the ",[608,609,610],"strong",{},"bare"," ",[526,613,614],{},"heximonNitroModule"," in Nitro's ",[526,617,618],{},"modules",". It takes no options — there is nothing to pass,\nbecause Heximon config lives entirely in ",[526,621,622],{},"heximon.config.ts"," at the project root, the single\nsource of truth every host reads identically. Add ",[526,625,626],{},"heximonNitroVitePlugin()"," in a ",[526,629,630],{},"vite.config.ts"," next to it,\nand ",[526,633,634],{},"nitro dev"," gains the same dev experience the Vite host gives — a build-error page, a JSON-preview page,\nrecompile on every source change, and browser auto-reload. All three files are the recommended setup from day\none: a bare ",[526,637,634],{}," (module only, no Vite plugin) still serves your app, but without the plugin there is no\ndev loop — no recompile-on-change, no build-error page, no auto-reload on a source edit:",[518,640,645],{"className":641,"code":642,"filename":643,"language":644,"meta":524,"style":524},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineNitroConfig } from \"nitro\u002Fconfig\";\nimport { heximonNitroModule } from \"@heximon\u002Fnitro\u002Fmodule\";\n\nexport default defineNitroConfig({\n  compatibilityDate: \"2025-07-04\",\n  serverDir: \"server\",\n  modules: [heximonNitroModule],\n});\n","nitro.config.ts","ts",[526,646,647,679,702,709,727,747,764,777],{"__ignoreMap":524},[529,648,649,653,657,661,664,667,670,673,676],{"class":531,"line":532},[529,650,652],{"class":651},"s7zQu","import",[529,654,656],{"class":655},"sMK4o"," {",[529,658,660],{"class":659},"sTEyZ"," defineNitroConfig",[529,662,663],{"class":655}," }",[529,665,666],{"class":651}," from",[529,668,669],{"class":655}," \"",[529,671,672],{"class":538},"nitro\u002Fconfig",[529,674,675],{"class":655},"\"",[529,677,678],{"class":655},";\n",[529,680,682,684,686,689,691,693,695,698,700],{"class":531,"line":681},2,[529,683,652],{"class":651},[529,685,656],{"class":655},[529,687,688],{"class":659}," heximonNitroModule",[529,690,663],{"class":655},[529,692,666],{"class":651},[529,694,669],{"class":655},[529,696,697],{"class":538},"@heximon\u002Fnitro\u002Fmodule",[529,699,675],{"class":655},[529,701,678],{"class":655},[529,703,705],{"class":531,"line":704},3,[529,706,708],{"emptyLinePlaceholder":707},true,"\n",[529,710,712,715,718,721,724],{"class":531,"line":711},4,[529,713,714],{"class":651},"export",[529,716,717],{"class":651}," default",[529,719,660],{"class":720},"s2Zo4",[529,722,723],{"class":659},"(",[529,725,726],{"class":655},"{\n",[529,728,730,734,737,739,742,744],{"class":531,"line":729},5,[529,731,733],{"class":732},"swJcz","  compatibilityDate",[529,735,736],{"class":655},":",[529,738,669],{"class":655},[529,740,741],{"class":538},"2025-07-04",[529,743,675],{"class":655},[529,745,746],{"class":655},",\n",[529,748,750,753,755,757,760,762],{"class":531,"line":749},6,[529,751,752],{"class":732},"  serverDir",[529,754,736],{"class":655},[529,756,669],{"class":655},[529,758,759],{"class":538},"server",[529,761,675],{"class":655},[529,763,746],{"class":655},[529,765,767,770,772,775],{"class":531,"line":766},7,[529,768,769],{"class":732},"  modules",[529,771,736],{"class":655},[529,773,774],{"class":659}," [heximonNitroModule]",[529,776,746],{"class":655},[529,778,780,783,786],{"class":531,"line":779},8,[529,781,782],{"class":655},"}",[529,784,785],{"class":659},")",[529,787,678],{"class":655},[518,789,791],{"className":641,"code":790,"filename":622,"language":644,"meta":524,"style":524},"import { defineHeximonConfig } from \"@heximon\u002Fbuild\";\nimport { HttpPlugin } from \"@heximon\u002Fhttp\u002Fcompiler\";\n\nexport default defineHeximonConfig({ plugins: [new HttpPlugin()] });\n",[526,792,793,815,837,841],{"__ignoreMap":524},[529,794,795,797,799,802,804,806,808,811,813],{"class":531,"line":532},[529,796,652],{"class":651},[529,798,656],{"class":655},[529,800,801],{"class":659}," defineHeximonConfig",[529,803,663],{"class":655},[529,805,666],{"class":651},[529,807,669],{"class":655},[529,809,810],{"class":538},"@heximon\u002Fbuild",[529,812,675],{"class":655},[529,814,678],{"class":655},[529,816,817,819,821,824,826,828,830,833,835],{"class":531,"line":681},[529,818,652],{"class":651},[529,820,656],{"class":655},[529,822,823],{"class":659}," HttpPlugin",[529,825,663],{"class":655},[529,827,666],{"class":651},[529,829,669],{"class":655},[529,831,832],{"class":538},"@heximon\u002Fhttp\u002Fcompiler",[529,834,675],{"class":655},[529,836,678],{"class":655},[529,838,839],{"class":531,"line":704},[529,840,708],{"emptyLinePlaceholder":707},[529,842,843,845,847,849,851,854,857,859,862,865,867,870,872,874],{"class":531,"line":711},[529,844,714],{"class":651},[529,846,717],{"class":651},[529,848,801],{"class":720},[529,850,723],{"class":659},[529,852,853],{"class":655},"{",[529,855,856],{"class":732}," plugins",[529,858,736],{"class":655},[529,860,861],{"class":659}," [",[529,863,864],{"class":655},"new",[529,866,823],{"class":720},[529,868,869],{"class":659},"()] ",[529,871,782],{"class":655},[529,873,785],{"class":659},[529,875,678],{"class":655},[518,877,879],{"className":641,"code":878,"filename":630,"language":644,"meta":524,"style":524},"import { heximonNitroVitePlugin } from \"@heximon\u002Fnitro\u002Fvite\";\nimport { nitro } from \"nitro\u002Fvite\";\nimport { defineConfig } from \"vite-plus\";\n\nexport default defineConfig({ plugins: [nitro(), heximonNitroVitePlugin()] });\n",[526,880,881,903,925,946,950],{"__ignoreMap":524},[529,882,883,885,887,890,892,894,896,899,901],{"class":531,"line":532},[529,884,652],{"class":651},[529,886,656],{"class":655},[529,888,889],{"class":659}," heximonNitroVitePlugin",[529,891,663],{"class":655},[529,893,666],{"class":651},[529,895,669],{"class":655},[529,897,898],{"class":538},"@heximon\u002Fnitro\u002Fvite",[529,900,675],{"class":655},[529,902,678],{"class":655},[529,904,905,907,909,912,914,916,918,921,923],{"class":531,"line":681},[529,906,652],{"class":651},[529,908,656],{"class":655},[529,910,911],{"class":659}," nitro",[529,913,663],{"class":655},[529,915,666],{"class":651},[529,917,669],{"class":655},[529,919,920],{"class":538},"nitro\u002Fvite",[529,922,675],{"class":655},[529,924,678],{"class":655},[529,926,927,929,931,934,936,938,940,942,944],{"class":531,"line":704},[529,928,652],{"class":651},[529,930,656],{"class":655},[529,932,933],{"class":659}," defineConfig",[529,935,663],{"class":655},[529,937,666],{"class":651},[529,939,669],{"class":655},[529,941,598],{"class":538},[529,943,675],{"class":655},[529,945,678],{"class":655},[529,947,948],{"class":531,"line":711},[529,949,708],{"emptyLinePlaceholder":707},[529,951,952,954,956,958,960,962,964,966,968,970,973,976,978,980,982,984],{"class":531,"line":729},[529,953,714],{"class":651},[529,955,717],{"class":651},[529,957,933],{"class":720},[529,959,723],{"class":659},[529,961,853],{"class":655},[529,963,856],{"class":732},[529,965,736],{"class":655},[529,967,861],{"class":659},[529,969,590],{"class":720},[529,971,972],{"class":659},"()",[529,974,975],{"class":655},",",[529,977,889],{"class":720},[529,979,869],{"class":659},[529,981,782],{"class":655},[529,983,785],{"class":659},[529,985,678],{"class":655},[499,987,988,989,992,993,995,996,999,1000,1002,1003,1005,1006,1009,1010,1012],{},"That is the ",[608,990,991],{},"whole"," integration. When you run ",[526,994,634],{}," or ",[526,997,998],{},"nitro build",", ",[526,1001,614],{}," loads\n",[526,1004,622],{},", runs Heximon's compiler over whatever ",[526,1007,1008],{},"serverDir"," Nitro is configured with, and mounts the generated\nroutes onto Nitro's server at startup — that part runs with or without the Vite plugin, so a bare ",[526,1011,634],{},"\nstill serves your app. What the plugin adds is the loop on top: without it, a broken compile serves a stale\nresponse instead of the diagnostic page, and a source change needs a manual restart to pick up. You never run\na compiler yourself, and there is no entry file or alias to maintain either way.",[1014,1015,1017,1018,1020],"callout",{"type":1016},"info","Two dev-only gaps versus the Vite host, because Nitro owns its own request runner and upgrade socket: no\nserve-last-good (a broken build shows the error page, not the previous good response), and Heximon-declared\nWebSocket routes aren't served in this dev path. A production ",[526,1019,998],{}," is unaffected by either.",[499,1022,1023,1025,1026,1029,1030,1033,1034,1036],{},[526,1024,622],{}," is deliberately the ",[608,1027,1028],{},"same file"," every host reads — so moving a project from the dev server\nto a Nitro deployment is a config swap, not a rewrite. The one difference is the scan root: under Nitro there is\nno ",[526,1031,1032],{},"src\u002F"," default, because Nitro already owns the ",[526,1035,1008],{}," convention. Your Heximon code lives wherever Nitro\nlooks for server code.",[510,1038,1040],{"id":1039},"plug-in-the-tiers-you-use","Plug in the tiers you use",[499,1042,1043,1045,1046,1049,1050,1053],{},[526,1044,622],{},"'s ",[526,1047,1048],{},"plugins"," array is the compiler plugin set, identical to the one every other host reads. The\nexample above is HTTP-only, so it lists just ",[526,1051,1052],{},"new HttpPlugin()",". Add a plugin per tier you want compiled under\nNitro.",[518,1055,1057],{"className":641,"code":1056,"filename":622,"language":644,"meta":524,"style":524},"import { CqrsPlugin } from \"@heximon\u002Fcqrs\u002Fcompiler\";\nimport { EventEmitterPlugin } from \"@heximon\u002Fevents\u002Fcompiler\";\nimport { HttpPlugin } from \"@heximon\u002Fhttp\u002Fcompiler\";\nimport { defineHeximonConfig } from \"@heximon\u002Fbuild\";\n\nexport default defineHeximonConfig({\n  plugins: [new HttpPlugin(), new EventEmitterPlugin(), new CqrsPlugin()],\n});\n",[526,1058,1059,1081,1103,1123,1143,1147,1159,1194],{"__ignoreMap":524},[529,1060,1061,1063,1065,1068,1070,1072,1074,1077,1079],{"class":531,"line":532},[529,1062,652],{"class":651},[529,1064,656],{"class":655},[529,1066,1067],{"class":659}," CqrsPlugin",[529,1069,663],{"class":655},[529,1071,666],{"class":651},[529,1073,669],{"class":655},[529,1075,1076],{"class":538},"@heximon\u002Fcqrs\u002Fcompiler",[529,1078,675],{"class":655},[529,1080,678],{"class":655},[529,1082,1083,1085,1087,1090,1092,1094,1096,1099,1101],{"class":531,"line":681},[529,1084,652],{"class":651},[529,1086,656],{"class":655},[529,1088,1089],{"class":659}," EventEmitterPlugin",[529,1091,663],{"class":655},[529,1093,666],{"class":651},[529,1095,669],{"class":655},[529,1097,1098],{"class":538},"@heximon\u002Fevents\u002Fcompiler",[529,1100,675],{"class":655},[529,1102,678],{"class":655},[529,1104,1105,1107,1109,1111,1113,1115,1117,1119,1121],{"class":531,"line":704},[529,1106,652],{"class":651},[529,1108,656],{"class":655},[529,1110,823],{"class":659},[529,1112,663],{"class":655},[529,1114,666],{"class":651},[529,1116,669],{"class":655},[529,1118,832],{"class":538},[529,1120,675],{"class":655},[529,1122,678],{"class":655},[529,1124,1125,1127,1129,1131,1133,1135,1137,1139,1141],{"class":531,"line":711},[529,1126,652],{"class":651},[529,1128,656],{"class":655},[529,1130,801],{"class":659},[529,1132,663],{"class":655},[529,1134,666],{"class":651},[529,1136,669],{"class":655},[529,1138,810],{"class":538},[529,1140,675],{"class":655},[529,1142,678],{"class":655},[529,1144,1145],{"class":531,"line":729},[529,1146,708],{"emptyLinePlaceholder":707},[529,1148,1149,1151,1153,1155,1157],{"class":531,"line":749},[529,1150,714],{"class":651},[529,1152,717],{"class":651},[529,1154,801],{"class":720},[529,1156,723],{"class":659},[529,1158,726],{"class":655},[529,1160,1161,1164,1166,1168,1170,1172,1174,1176,1179,1181,1183,1185,1187,1189,1192],{"class":531,"line":766},[529,1162,1163],{"class":732},"  plugins",[529,1165,736],{"class":655},[529,1167,861],{"class":659},[529,1169,864],{"class":655},[529,1171,823],{"class":720},[529,1173,972],{"class":659},[529,1175,975],{"class":655},[529,1177,1178],{"class":655}," new",[529,1180,1089],{"class":720},[529,1182,972],{"class":659},[529,1184,975],{"class":655},[529,1186,1178],{"class":655},[529,1188,1067],{"class":720},[529,1190,1191],{"class":659},"()]",[529,1193,746],{"class":655},[529,1195,1196,1198,1200],{"class":531,"line":779},[529,1197,782],{"class":655},[529,1199,785],{"class":659},[529,1201,678],{"class":655},[499,1203,1204,1205,1207,1208,1211],{},"You never list a Nitro plugin yourself — ",[526,1206,614],{}," requires HTTP and adds itself, so a user-listed\n",[526,1209,1210],{},"HttpPlugin"," collapses with the one Nitro pulls in. List only the extra tiers your app uses; the auto-compile\nhonors the whole set.",[510,1213,1215],{"id":1214},"write-a-host-agnostic-controller","Write a host-agnostic controller",[499,1217,1218,1219,1222],{},"Nothing in your app code knows it's running under Nitro. Routes are declared by each handler's action parameter\ntype, and ",[526,1220,1221],{},"CounterService"," is injected from the constructor signature — the same controller runs unchanged under\nthe Vite dev server or inside Nitro's request pipeline.",[518,1224,1227],{"className":641,"code":1225,"filename":1226,"language":644,"meta":524,"style":524},"import type { Controller, Get, Post } from \"@heximon\u002Fhttp\";\nimport { CounterService } from \".\u002Fcounter.service\";\n\nexport class CounterController implements Controller\u003C\"\u002F\"> {\n  constructor(private readonly counter: CounterService) {}\n\n  public async index(_action: Get\u003C\"\u002F\">): Promise\u003C{ message: string; hints: string[] }> {\n    return {\n      message: \"Heximon is running inside Nitro.\",\n      hints: ['POST \u002Ftrack with {\"page\": \"\u002Fhome\"}', \"GET \u002Fstats\"],\n    };\n  }\n\n  public async track(action: Post\u003C\"\u002Ftrack\">): Promise\u003C{ page: string; views: number }> {\n    const { page } = (await action.request.json()) as { page: string };\n    return { page, views: this.counter.increment(page) };\n  }\n\n  public async stats(_action: Get\u003C\"\u002Fstats\">): Promise\u003CRecord\u003Cstring, number>> {\n    return this.counter.snapshot();\n  }\n}\n","server\u002Fcounter\u002Fcounter.controller.ts",[526,1228,1229,1264,1286,1290,1322,1348,1352,1415,1422,1439,1471,1477,1483,1488,1544,1596,1633,1638,1643,1693,1711,1716],{"__ignoreMap":524},[529,1230,1231,1233,1236,1238,1241,1243,1246,1248,1251,1253,1255,1257,1260,1262],{"class":531,"line":532},[529,1232,652],{"class":651},[529,1234,1235],{"class":651}," type",[529,1237,656],{"class":655},[529,1239,1240],{"class":659}," Controller",[529,1242,975],{"class":655},[529,1244,1245],{"class":659}," Get",[529,1247,975],{"class":655},[529,1249,1250],{"class":659}," Post",[529,1252,663],{"class":655},[529,1254,666],{"class":651},[529,1256,669],{"class":655},[529,1258,1259],{"class":538},"@heximon\u002Fhttp",[529,1261,675],{"class":655},[529,1263,678],{"class":655},[529,1265,1266,1268,1270,1273,1275,1277,1279,1282,1284],{"class":531,"line":681},[529,1267,652],{"class":651},[529,1269,656],{"class":655},[529,1271,1272],{"class":659}," CounterService",[529,1274,663],{"class":655},[529,1276,666],{"class":651},[529,1278,669],{"class":655},[529,1280,1281],{"class":538},".\u002Fcounter.service",[529,1283,675],{"class":655},[529,1285,678],{"class":655},[529,1287,1288],{"class":531,"line":704},[529,1289,708],{"emptyLinePlaceholder":707},[529,1291,1292,1294,1298,1301,1304,1306,1309,1311,1314,1316,1319],{"class":531,"line":711},[529,1293,714],{"class":651},[529,1295,1297],{"class":1296},"spNyl"," class",[529,1299,1300],{"class":535}," CounterController",[529,1302,1303],{"class":1296}," implements",[529,1305,1240],{"class":535},[529,1307,1308],{"class":655},"\u003C",[529,1310,675],{"class":655},[529,1312,1313],{"class":538},"\u002F",[529,1315,675],{"class":655},[529,1317,1318],{"class":655},">",[529,1320,1321],{"class":655}," {\n",[529,1323,1324,1327,1329,1332,1335,1339,1341,1343,1345],{"class":531,"line":729},[529,1325,1326],{"class":1296},"  constructor",[529,1328,723],{"class":655},[529,1330,1331],{"class":1296},"private",[529,1333,1334],{"class":1296}," readonly",[529,1336,1338],{"class":1337},"sHdIc"," counter",[529,1340,736],{"class":655},[529,1342,1272],{"class":535},[529,1344,785],{"class":655},[529,1346,1347],{"class":655}," {}\n",[529,1349,1350],{"class":531,"line":749},[529,1351,708],{"emptyLinePlaceholder":707},[529,1353,1354,1357,1360,1363,1365,1368,1370,1372,1374,1376,1378,1380,1383,1386,1389,1392,1394,1397,1400,1403,1405,1407,1410,1413],{"class":531,"line":766},[529,1355,1356],{"class":1296},"  public",[529,1358,1359],{"class":1296}," async",[529,1361,1362],{"class":732}," index",[529,1364,723],{"class":655},[529,1366,1367],{"class":1337},"_action",[529,1369,736],{"class":655},[529,1371,1245],{"class":535},[529,1373,1308],{"class":655},[529,1375,675],{"class":655},[529,1377,1313],{"class":538},[529,1379,675],{"class":655},[529,1381,1382],{"class":655},">):",[529,1384,1385],{"class":535}," Promise",[529,1387,1388],{"class":655},"\u003C{",[529,1390,1391],{"class":732}," message",[529,1393,736],{"class":655},[529,1395,1396],{"class":535}," string",[529,1398,1399],{"class":655},";",[529,1401,1402],{"class":732}," hints",[529,1404,736],{"class":655},[529,1406,1396],{"class":535},[529,1408,1409],{"class":659},"[] ",[529,1411,1412],{"class":655},"}>",[529,1414,1321],{"class":655},[529,1416,1417,1420],{"class":531,"line":779},[529,1418,1419],{"class":651},"    return",[529,1421,1321],{"class":655},[529,1423,1425,1428,1430,1432,1435,1437],{"class":531,"line":1424},9,[529,1426,1427],{"class":732},"      message",[529,1429,736],{"class":655},[529,1431,669],{"class":655},[529,1433,1434],{"class":538},"Heximon is running inside Nitro.",[529,1436,675],{"class":655},[529,1438,746],{"class":655},[529,1440,1442,1445,1447,1449,1452,1455,1457,1459,1461,1464,1466,1469],{"class":531,"line":1441},10,[529,1443,1444],{"class":732},"      hints",[529,1446,736],{"class":655},[529,1448,861],{"class":732},[529,1450,1451],{"class":655},"'",[529,1453,1454],{"class":538},"POST \u002Ftrack with {\"page\": \"\u002Fhome\"}",[529,1456,1451],{"class":655},[529,1458,975],{"class":655},[529,1460,669],{"class":655},[529,1462,1463],{"class":538},"GET \u002Fstats",[529,1465,675],{"class":655},[529,1467,1468],{"class":732},"]",[529,1470,746],{"class":655},[529,1472,1474],{"class":531,"line":1473},11,[529,1475,1476],{"class":655},"    };\n",[529,1478,1480],{"class":531,"line":1479},12,[529,1481,1482],{"class":655},"  }\n",[529,1484,1486],{"class":531,"line":1485},13,[529,1487,708],{"emptyLinePlaceholder":707},[529,1489,1491,1493,1495,1498,1500,1503,1505,1507,1509,1511,1514,1516,1518,1520,1522,1525,1527,1529,1531,1534,1536,1539,1542],{"class":531,"line":1490},14,[529,1492,1356],{"class":1296},[529,1494,1359],{"class":1296},[529,1496,1497],{"class":732}," track",[529,1499,723],{"class":655},[529,1501,1502],{"class":1337},"action",[529,1504,736],{"class":655},[529,1506,1250],{"class":535},[529,1508,1308],{"class":655},[529,1510,675],{"class":655},[529,1512,1513],{"class":538},"\u002Ftrack",[529,1515,675],{"class":655},[529,1517,1382],{"class":655},[529,1519,1385],{"class":535},[529,1521,1388],{"class":655},[529,1523,1524],{"class":732}," page",[529,1526,736],{"class":655},[529,1528,1396],{"class":535},[529,1530,1399],{"class":655},[529,1532,1533],{"class":732}," views",[529,1535,736],{"class":655},[529,1537,1538],{"class":535}," number",[529,1540,1541],{"class":655}," }>",[529,1543,1321],{"class":655},[529,1545,1547,1550,1552,1554,1556,1559,1562,1565,1568,1571,1574,1576,1579,1582,1585,1587,1589,1591,1593],{"class":531,"line":1546},15,[529,1548,1549],{"class":1296},"    const",[529,1551,656],{"class":655},[529,1553,1524],{"class":659},[529,1555,663],{"class":655},[529,1557,1558],{"class":655}," =",[529,1560,1561],{"class":732}," (",[529,1563,1564],{"class":651},"await",[529,1566,1567],{"class":659}," action",[529,1569,1570],{"class":655},".",[529,1572,1573],{"class":659},"request",[529,1575,1570],{"class":655},[529,1577,1578],{"class":720},"json",[529,1580,1581],{"class":732},"()) ",[529,1583,1584],{"class":651},"as",[529,1586,656],{"class":655},[529,1588,1524],{"class":732},[529,1590,736],{"class":655},[529,1592,1396],{"class":535},[529,1594,1595],{"class":655}," };\n",[529,1597,1599,1601,1603,1605,1607,1609,1611,1614,1617,1619,1622,1624,1627,1630],{"class":531,"line":1598},16,[529,1600,1419],{"class":651},[529,1602,656],{"class":655},[529,1604,1524],{"class":659},[529,1606,975],{"class":655},[529,1608,1533],{"class":732},[529,1610,736],{"class":655},[529,1612,1613],{"class":655}," this.",[529,1615,1616],{"class":659},"counter",[529,1618,1570],{"class":655},[529,1620,1621],{"class":720},"increment",[529,1623,723],{"class":732},[529,1625,1626],{"class":659},"page",[529,1628,1629],{"class":732},") ",[529,1631,1632],{"class":655},"};\n",[529,1634,1636],{"class":531,"line":1635},17,[529,1637,1482],{"class":655},[529,1639,1641],{"class":531,"line":1640},18,[529,1642,708],{"emptyLinePlaceholder":707},[529,1644,1646,1648,1650,1653,1655,1657,1659,1661,1663,1665,1668,1670,1672,1674,1676,1679,1681,1684,1686,1688,1691],{"class":531,"line":1645},19,[529,1647,1356],{"class":1296},[529,1649,1359],{"class":1296},[529,1651,1652],{"class":732}," stats",[529,1654,723],{"class":655},[529,1656,1367],{"class":1337},[529,1658,736],{"class":655},[529,1660,1245],{"class":535},[529,1662,1308],{"class":655},[529,1664,675],{"class":655},[529,1666,1667],{"class":538},"\u002Fstats",[529,1669,675],{"class":655},[529,1671,1382],{"class":655},[529,1673,1385],{"class":535},[529,1675,1308],{"class":655},[529,1677,1678],{"class":535},"Record",[529,1680,1308],{"class":655},[529,1682,1683],{"class":535},"string",[529,1685,975],{"class":655},[529,1687,1538],{"class":535},[529,1689,1690],{"class":655},">>",[529,1692,1321],{"class":655},[529,1694,1696,1698,1700,1702,1704,1707,1709],{"class":531,"line":1695},20,[529,1697,1419],{"class":651},[529,1699,1613],{"class":655},[529,1701,1616],{"class":659},[529,1703,1570],{"class":655},[529,1705,1706],{"class":720},"snapshot",[529,1708,972],{"class":732},[529,1710,678],{"class":655},[529,1712,1714],{"class":531,"line":1713},21,[529,1715,1482],{"class":655},[529,1717,1719],{"class":531,"line":1718},22,[529,1720,1721],{"class":655},"}\n",[499,1723,1724,1725,1728,1729,1732],{},"The module declares the controller under the ",[526,1726,1727],{},"http"," namespace and the service in ",[526,1730,1731],{},"providers"," — exactly as it\nwould for any Heximon host. There is no host-specific registration:",[518,1734,1737],{"className":641,"code":1735,"filename":1736,"language":644,"meta":524,"style":524},"import { Module } from \"@heximon\u002Fruntime\";\nimport { CounterController } from \".\u002Fcounter.controller\";\nimport { CounterService } from \".\u002Fcounter.service\";\n\nexport class CounterModule extends Module({\n  providers: [CounterService],\n  http: { controllers: [CounterController] },\n  exports: [CounterService],\n}) {}\n","server\u002Fcounter\u002Fcounter.module.ts",[526,1738,1739,1761,1782,1802,1806,1824,1836,1856,1867],{"__ignoreMap":524},[529,1740,1741,1743,1745,1748,1750,1752,1754,1757,1759],{"class":531,"line":532},[529,1742,652],{"class":651},[529,1744,656],{"class":655},[529,1746,1747],{"class":659}," Module",[529,1749,663],{"class":655},[529,1751,666],{"class":651},[529,1753,669],{"class":655},[529,1755,1756],{"class":538},"@heximon\u002Fruntime",[529,1758,675],{"class":655},[529,1760,678],{"class":655},[529,1762,1763,1765,1767,1769,1771,1773,1775,1778,1780],{"class":531,"line":681},[529,1764,652],{"class":651},[529,1766,656],{"class":655},[529,1768,1300],{"class":659},[529,1770,663],{"class":655},[529,1772,666],{"class":651},[529,1774,669],{"class":655},[529,1776,1777],{"class":538},".\u002Fcounter.controller",[529,1779,675],{"class":655},[529,1781,678],{"class":655},[529,1783,1784,1786,1788,1790,1792,1794,1796,1798,1800],{"class":531,"line":704},[529,1785,652],{"class":651},[529,1787,656],{"class":655},[529,1789,1272],{"class":659},[529,1791,663],{"class":655},[529,1793,666],{"class":651},[529,1795,669],{"class":655},[529,1797,1281],{"class":538},[529,1799,675],{"class":655},[529,1801,678],{"class":655},[529,1803,1804],{"class":531,"line":711},[529,1805,708],{"emptyLinePlaceholder":707},[529,1807,1808,1810,1812,1815,1818,1820,1822],{"class":531,"line":729},[529,1809,714],{"class":651},[529,1811,1297],{"class":1296},[529,1813,1814],{"class":535}," CounterModule",[529,1816,1817],{"class":1296}," extends",[529,1819,1747],{"class":720},[529,1821,723],{"class":659},[529,1823,726],{"class":655},[529,1825,1826,1829,1831,1834],{"class":531,"line":749},[529,1827,1828],{"class":732},"  providers",[529,1830,736],{"class":655},[529,1832,1833],{"class":659}," [CounterService]",[529,1835,746],{"class":655},[529,1837,1838,1841,1843,1845,1848,1850,1853],{"class":531,"line":766},[529,1839,1840],{"class":732},"  http",[529,1842,736],{"class":655},[529,1844,656],{"class":655},[529,1846,1847],{"class":732}," controllers",[529,1849,736],{"class":655},[529,1851,1852],{"class":659}," [CounterController] ",[529,1854,1855],{"class":655},"},\n",[529,1857,1858,1861,1863,1865],{"class":531,"line":779},[529,1859,1860],{"class":732},"  exports",[529,1862,736],{"class":655},[529,1864,1833],{"class":659},[529,1866,746],{"class":655},[529,1868,1869,1871,1873],{"class":531,"line":1424},[529,1870,782],{"class":655},[529,1872,1629],{"class":659},[529,1874,1875],{"class":655},"{}\n",[499,1877,1878,1879,1882],{},"The root module composes feature modules with ",[526,1880,1881],{},"imports",", and Nitro compiles that graph as its build step:",[518,1884,1887],{"className":641,"code":1885,"filename":1886,"language":644,"meta":524,"style":524},"import { Module } from \"@heximon\u002Fruntime\";\nimport { CounterModule } from \".\u002Fcounter\u002Fcounter.module\";\n\nexport class AppModule extends Module({\n  imports: [CounterModule],\n}) {}\n","server\u002Fapp.module.ts",[526,1888,1889,1909,1930,1934,1951,1963],{"__ignoreMap":524},[529,1890,1891,1893,1895,1897,1899,1901,1903,1905,1907],{"class":531,"line":532},[529,1892,652],{"class":651},[529,1894,656],{"class":655},[529,1896,1747],{"class":659},[529,1898,663],{"class":655},[529,1900,666],{"class":651},[529,1902,669],{"class":655},[529,1904,1756],{"class":538},[529,1906,675],{"class":655},[529,1908,678],{"class":655},[529,1910,1911,1913,1915,1917,1919,1921,1923,1926,1928],{"class":531,"line":681},[529,1912,652],{"class":651},[529,1914,656],{"class":655},[529,1916,1814],{"class":659},[529,1918,663],{"class":655},[529,1920,666],{"class":651},[529,1922,669],{"class":655},[529,1924,1925],{"class":538},".\u002Fcounter\u002Fcounter.module",[529,1927,675],{"class":655},[529,1929,678],{"class":655},[529,1931,1932],{"class":531,"line":704},[529,1933,708],{"emptyLinePlaceholder":707},[529,1935,1936,1938,1940,1943,1945,1947,1949],{"class":531,"line":711},[529,1937,714],{"class":651},[529,1939,1297],{"class":1296},[529,1941,1942],{"class":535}," AppModule",[529,1944,1817],{"class":1296},[529,1946,1747],{"class":720},[529,1948,723],{"class":659},[529,1950,726],{"class":655},[529,1952,1953,1956,1958,1961],{"class":531,"line":729},[529,1954,1955],{"class":732},"  imports",[529,1957,736],{"class":655},[529,1959,1960],{"class":659}," [CounterModule]",[529,1962,746],{"class":655},[529,1964,1965,1967,1969],{"class":531,"line":749},[529,1966,782],{"class":655},[529,1968,1629],{"class":659},[529,1970,1875],{"class":655},[499,1972,1973,1974,1977,1978,1981,1982,1985],{},"The base path is owned by your app code, not the host. A ",[526,1975,1976],{},"Controller\u003C\"\u002F\">"," serves at the root; a\n",[526,1979,1980],{},"Controller\u003C\"\u002Fapi\">"," mounts every route under ",[526,1983,1984],{},"\u002Fapi",". There is no Nitro mount prefix to configure — routes land\nat exactly the paths your controllers declare, so Nitro's per-route rules and OpenAPI scan see each one.",[510,1987,1989],{"id":1988},"deploy-anywhere-nitro-deploys","Deploy anywhere Nitro deploys",[499,1991,1992,1993,1996,1997,2000],{},"The same ",[526,1994,1995],{},"server\u002F"," directory targets every Nitro runtime; you pick the runtime by switching the preset at build\ntime. The compiler emits one ",[526,1998,1999],{},"createApp"," plus a route table, and Nitro bundles that for whichever target you\nchoose.",[2002,2003,2004,2018],"table",{},[2005,2006,2007],"thead",{},[2008,2009,2010,2015],"tr",{},[2011,2012,2014],"th",{"align":2013},"left","Preset",[2011,2016,2017],{"align":2013},"Runtime",[2019,2020,2021,2032,2042,2052,2061],"tbody",{},[2008,2022,2023,2029],{},[2024,2025,2026],"td",{"align":2013},[526,2027,2028],{},"node-server",[2024,2030,2031],{"align":2013},"Long-running Node.js process",[2008,2033,2034,2039],{},[2024,2035,2036],{"align":2013},[526,2037,2038],{},"cloudflare_module",[2024,2040,2041],{"align":2013},"Cloudflare Workers \u002F Pages",[2008,2043,2044,2049],{},[2024,2045,2046],{"align":2013},[526,2047,2048],{},"deno-server",[2024,2050,2051],{"align":2013},"Deno",[2008,2053,2054,2058],{},[2024,2055,2056],{"align":2013},[526,2057,575],{},[2024,2059,2060],{"align":2013},"Bun",[2008,2062,2063,2068],{},[2024,2064,2065],{"align":2013},[526,2066,2067],{},"aws-lambda",[2024,2069,322],{"align":2013},[499,2071,2072,2073,2076,2077,2080,2081,2084,2085,2088,2089,999,2091,2094,2095,1313,2098,999,2101,2094,2104,1313,2107,746,2110,2094,2113,2116,2117,999,2119,999,2121,2123,2124,2127],{},"A vendor preset pulls its Heximon platform package ",[608,2074,2075],{},"on demand"," — they are optional peer dependencies, so you\ninstall only the one matching your target: ",[526,2078,2079],{},"@heximon\u002Fcloudflare"," for a ",[526,2082,2083],{},"cloudflare*"," preset, ",[526,2086,2087],{},"@heximon\u002Faws"," for\n",[526,2090,2067],{},[526,2092,2093],{},"@heximon\u002Fvercel"," for ",[526,2096,2097],{},"vercel",[526,2099,2100],{},"vercel-edge",[526,2102,2103],{},"@heximon\u002Fnetlify",[526,2105,2106],{},"netlify",[526,2108,2109],{},"netlify-edge",[526,2111,2112],{},"@heximon\u002Fdeno",[526,2114,2115],{},"deno-deploy",". A plain Node-class preset (",[526,2118,2028],{},[526,2120,575],{},[526,2122,2048],{},", a generic\n",[526,2125,2126],{},"*-edge",") needs none. Build against a vendor preset without its package installed and the build fails loud with\nan install hint, rather than dragging every vendor's toolchain into a single-target app.",[499,2129,2130,2131,2133,2134,2137,2138,2141,2142,2147,2148,2150,2151,2150,2153,2155,2156,999,2159,2161,2162,2166,2167,2171,2172,2175,2176,2181,2182,2184],{},"CI smoke-tests a real ",[526,2132,998],{}," + boot for ",[608,2135,2136],{},"every"," preset above (the ",[526,2139,2140],{},"nitro-preset-smoke"," job builds\n",[503,2143,2146],{"href":2144,"rel":2145},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap\u002Fnitro-presets",[507],"the nitro-presets gap example"," under each and asserts it\nserves): ",[526,2149,2028],{}," \u002F ",[526,2152,575],{},[526,2154,2048],{}," boot and answer ",[526,2157,2158],{},"GET \u002F",[526,2160,2067],{},"'s handler is invoked with a\nsynthetic event, and ",[608,2163,2164],{},[526,2165,2038],{}," runs the emitted Worker on real workerd (miniflare). For a\nCloudflare deployment you can also use ",[503,2168,2169],{"href":404},[526,2170,2079],{}," (host-independent\n",[526,2173,2174],{},"wrangler.json"," emit, ",[503,2177,2180],{"href":2178,"rel":2179},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fflagship\u002Fapps\u002Fcloudflare",[507],"the flagship Cloudflare app",")\nwith a ",[526,2183,810],{}," bundle.",[499,2186,2187,2188,2191],{},"Because the wiring is compiled to plain JavaScript with no ",[526,2189,2190],{},"eval"," and no JIT, the same build runs on the edge\nruntimes that reject reflection-based frameworks — Heximon never needs to inspect a decorator at boot.",[499,2193,2194,2195,2198,2199,999,2202,999,2204,2206,2207,2210,2211,999,2213,999,2215,999,2217,999,2219,999,2221,2223,2224,2227,2228,2231,2232,2235,2236,2238],{},"The module also reads your preset to set the compiler's ",[608,2196,2197],{},"build target",", so target-aware codegen matches the\nruntime you deploy to. A V8-isolate \u002F fetch-only preset (",[526,2200,2201],{},"cloudflare-*",[526,2203,2126],{},[526,2205,2115],{},") compiles for\n",[526,2208,2209],{},"edge","; every long-lived-process preset (",[526,2212,2028],{},[526,2214,2067],{},[526,2216,2097],{},[526,2218,2106],{},[526,2220,575],{},[526,2222,2048],{},",\n…) compiles for ",[526,2225,2226],{},"node",". The most visible effect is OpenTelemetry: on an edge preset ",[526,2229,2230],{},"@heximon\u002Fotel"," bakes its\nlean Workers tracer leg with a per-request ",[526,2233,2234],{},"ctx.waitUntil"," flush instead of the heavier Node SDK — no config\nchange, just the preset you already pick. The same mapping applies in ",[526,2237,634],{},", so the dev compile matches the\ndeploy runtime.",[499,2240,2241,2242,2244,2245,2248,2249,2251,2252,2255,2256,2259,2260,2150,2263,2266],{},"The Nitro module maps Vercel's and Netlify's presets to the corresponding Heximon strategies automatically: the\n",[526,2243,2097],{}," preset resolves to ",[526,2246,2247],{},"VercelFunctionsStrategy",", and the ",[526,2250,2106],{}," preset resolves to\n",[526,2253,2254],{},"NetlifyFunctionsStrategy",". See ",[503,2257,2258],{"href":299},"Deploy overview"," for the\nstandalone build path (skipping Nitro) that writes the complete ",[526,2261,2262],{},"vercel deploy --prebuilt",[526,2264,2265],{},"netlify deploy","\noutput tree directly.",[510,2268,2270],{"id":2269},"call-your-own-routes-in-process","Call your own routes in-process",[499,2272,2273,2274,2277,2278,2281,2282,2285,2286,2288],{},"When a provider injects ",[526,2275,2276],{},"InternalClient",", the Nitro host resolves it to a ",[526,2279,2280],{},"NitroFetchClient"," that wraps Nitro's\nown ",[526,2283,2284],{},"fetch"," — so a service calling another module's endpoint dispatches in-process, with no network hop out and\nback. You never wire it: the host supplies it through ",[526,2287,1999],{}," automatically.",[499,2290,2291,2292,2295,2296,2299,2300,2302],{},"This works for one reason that runs through all of Heximon: ",[608,2293,2294],{},"class identity is the only DI token",". Because\n",[526,2297,2298],{},"NitroFetchClient extends H3FetchClient extends InternalClient",", any constructor that asks for ",[526,2301,2276],{},"\ngets the host's in-process dispatch — no token, no registration, no adapter.",[510,2304,2306],{"id":2305},"race-free-mount-and-readiness","Race-free mount and readiness",[499,2308,2309,2310,2313,2314,2316],{},"The Nitro module solves a cold-start problem common in async frameworks: routes are bound to h3\n",[608,2311,2312],{},"synchronously"," at plugin startup — before ",[526,2315,1999],{}," resolves — so a request that arrives while the app is\nstill booting waits for the boot promise rather than falling through to Nitro's 404. The app is constructed\nexactly once, regardless of how many requests race in before it resolves.",[499,2318,2319,2320,2323,2324,2326,2327,2330],{},"The boot promise is exposed through ",[526,2321,2322],{},"heximonBootPromise"," from ",[526,2325,697],{},", which returns the\nsingle retained ",[526,2328,2329],{},"Promise\u003CAppHandle>"," for a running Nitro app. A health route can gate on it to guarantee the\napp is ready before reporting healthy:",[518,2332,2335],{"className":641,"code":2333,"filename":2334,"language":644,"meta":524,"style":524},"import type { Controller, Get } from \"@heximon\u002Fhttp\";\nimport { heximonBootPromise } from \"@heximon\u002Fnitro\u002Fmodule\";\nimport { useNitroApp } from \"nitro\u002Fapp\";\n\nexport class HealthController implements Controller\u003C\"\u002F\"> {\n  public async health(_action: Get\u003C\"\u002F_health\">): Promise\u003C{ status: string }> {\n    await heximonBootPromise(useNitroApp());\n    return { status: \"ok\" };\n  }\n}\n","server\u002Fhealth\u002Fhealth.controller.ts",[526,2336,2337,2363,2384,2406,2410,2435,2478,2495,2514,2518],{"__ignoreMap":524},[529,2338,2339,2341,2343,2345,2347,2349,2351,2353,2355,2357,2359,2361],{"class":531,"line":532},[529,2340,652],{"class":651},[529,2342,1235],{"class":651},[529,2344,656],{"class":655},[529,2346,1240],{"class":659},[529,2348,975],{"class":655},[529,2350,1245],{"class":659},[529,2352,663],{"class":655},[529,2354,666],{"class":651},[529,2356,669],{"class":655},[529,2358,1259],{"class":538},[529,2360,675],{"class":655},[529,2362,678],{"class":655},[529,2364,2365,2367,2369,2372,2374,2376,2378,2380,2382],{"class":531,"line":681},[529,2366,652],{"class":651},[529,2368,656],{"class":655},[529,2370,2371],{"class":659}," heximonBootPromise",[529,2373,663],{"class":655},[529,2375,666],{"class":651},[529,2377,669],{"class":655},[529,2379,697],{"class":538},[529,2381,675],{"class":655},[529,2383,678],{"class":655},[529,2385,2386,2388,2390,2393,2395,2397,2399,2402,2404],{"class":531,"line":704},[529,2387,652],{"class":651},[529,2389,656],{"class":655},[529,2391,2392],{"class":659}," useNitroApp",[529,2394,663],{"class":655},[529,2396,666],{"class":651},[529,2398,669],{"class":655},[529,2400,2401],{"class":538},"nitro\u002Fapp",[529,2403,675],{"class":655},[529,2405,678],{"class":655},[529,2407,2408],{"class":531,"line":711},[529,2409,708],{"emptyLinePlaceholder":707},[529,2411,2412,2414,2416,2419,2421,2423,2425,2427,2429,2431,2433],{"class":531,"line":729},[529,2413,714],{"class":651},[529,2415,1297],{"class":1296},[529,2417,2418],{"class":535}," HealthController",[529,2420,1303],{"class":1296},[529,2422,1240],{"class":535},[529,2424,1308],{"class":655},[529,2426,675],{"class":655},[529,2428,1313],{"class":538},[529,2430,675],{"class":655},[529,2432,1318],{"class":655},[529,2434,1321],{"class":655},[529,2436,2437,2439,2441,2444,2446,2448,2450,2452,2454,2456,2459,2461,2463,2465,2467,2470,2472,2474,2476],{"class":531,"line":749},[529,2438,1356],{"class":1296},[529,2440,1359],{"class":1296},[529,2442,2443],{"class":732}," health",[529,2445,723],{"class":655},[529,2447,1367],{"class":1337},[529,2449,736],{"class":655},[529,2451,1245],{"class":535},[529,2453,1308],{"class":655},[529,2455,675],{"class":655},[529,2457,2458],{"class":538},"\u002F_health",[529,2460,675],{"class":655},[529,2462,1382],{"class":655},[529,2464,1385],{"class":535},[529,2466,1388],{"class":655},[529,2468,2469],{"class":732}," status",[529,2471,736],{"class":655},[529,2473,1396],{"class":535},[529,2475,1541],{"class":655},[529,2477,1321],{"class":655},[529,2479,2480,2483,2485,2487,2490,2493],{"class":531,"line":766},[529,2481,2482],{"class":651},"    await",[529,2484,2371],{"class":720},[529,2486,723],{"class":732},[529,2488,2489],{"class":720},"useNitroApp",[529,2491,2492],{"class":732},"())",[529,2494,678],{"class":655},[529,2496,2497,2499,2501,2503,2505,2507,2510,2512],{"class":531,"line":779},[529,2498,1419],{"class":651},[529,2500,656],{"class":655},[529,2502,2469],{"class":732},[529,2504,736],{"class":655},[529,2506,669],{"class":655},[529,2508,2509],{"class":538},"ok",[529,2511,675],{"class":655},[529,2513,1595],{"class":655},[529,2515,2516],{"class":531,"line":1424},[529,2517,1482],{"class":655},[529,2519,2520],{"class":531,"line":1441},[529,2521,1721],{"class":655},[499,2523,2524,2526,2527,2530],{},[526,2525,2322],{}," returns ",[526,2528,2529],{},"undefined"," when heximon was never mounted onto the app (no module installed), so a\nhealth probe can distinguish a healthy Heximon app from one that never started.",[510,2532,2534],{"id":2533},"graceful-shutdown","Graceful shutdown",[499,2536,2537,2538,2541,2542,2545,2546,2549,2550,2553,2554,2557],{},"When Nitro receives a shutdown signal (SIGTERM, ",[526,2539,2540],{},"nitro.close()","), the module runs Heximon's fault-tolerant\n",[526,2543,2544],{},"app.shutdown()"," via Nitro's ",[526,2547,2548],{},"close"," runtime hook. Shutdown drains in-flight requests and tears down constructed\ninstances in reverse construction order — a pool's ",[526,2551,2552],{},"end()",", a queue's drain, and so on. The shutdown is\n",[526,2555,2556],{},"AggregateError","-collecting: a single teardown failure surfaces as a rejection without leaving the rest of the\ngraph half-torn. No configuration is needed; the hook is registered by the module automatically.",[510,2559,2561],{"id":2560},"run-it","Run it",[499,2563,2564,2565,2568,2569,2572,2573,2575],{},"Nitro's own ",[526,2566,2567],{},"dev"," command drives everything — ",[526,2570,2571],{},"heximonNitroModule.setup"," compiles your ",[526,2574,1995],{}," directory before\nNitro serves it:",[518,2577,2580],{"className":520,"code":2578,"filename":2579,"language":523,"meta":524,"style":524},"nitro dev\n","terminal",[526,2581,2582],{"__ignoreMap":524},[529,2583,2584,2586],{"class":531,"line":532},[529,2585,590],{"class":535},[529,2587,2588],{"class":538}," dev\n",[518,2590,2592],{"className":520,"code":2591,"filename":2579,"language":523,"meta":524,"style":524},"curl http:\u002F\u002Flocalhost:3000\u002F\n# → { \"message\": \"Heximon is running inside Nitro.\", \"hints\": [...] }\n\ncurl -X POST http:\u002F\u002Flocalhost:3000\u002Ftrack -H \"content-type: application\u002Fjson\" -d '{\"page\":\"\u002Fhome\"}'\n# → { \"page\": \"\u002Fhome\", \"views\": 1 }\n\ncurl http:\u002F\u002Flocalhost:3000\u002Fstats\n# → { \"\u002Fhome\": 1 }\n",[526,2593,2594,2602,2608,2612,2647,2652,2656,2663],{"__ignoreMap":524},[529,2595,2596,2599],{"class":531,"line":532},[529,2597,2598],{"class":535},"curl",[529,2600,2601],{"class":538}," http:\u002F\u002Flocalhost:3000\u002F\n",[529,2603,2604],{"class":531,"line":681},[529,2605,2607],{"class":2606},"sHwdD","# → { \"message\": \"Heximon is running inside Nitro.\", \"hints\": [...] }\n",[529,2609,2610],{"class":531,"line":704},[529,2611,708],{"emptyLinePlaceholder":707},[529,2613,2614,2616,2619,2622,2625,2628,2630,2633,2635,2638,2641,2644],{"class":531,"line":711},[529,2615,2598],{"class":535},[529,2617,2618],{"class":538}," -X",[529,2620,2621],{"class":538}," POST",[529,2623,2624],{"class":538}," http:\u002F\u002Flocalhost:3000\u002Ftrack",[529,2626,2627],{"class":538}," -H",[529,2629,669],{"class":655},[529,2631,2632],{"class":538},"content-type: application\u002Fjson",[529,2634,675],{"class":655},[529,2636,2637],{"class":538}," -d",[529,2639,2640],{"class":655}," '",[529,2642,2643],{"class":538},"{\"page\":\"\u002Fhome\"}",[529,2645,2646],{"class":655},"'\n",[529,2648,2649],{"class":531,"line":729},[529,2650,2651],{"class":2606},"# → { \"page\": \"\u002Fhome\", \"views\": 1 }\n",[529,2653,2654],{"class":531,"line":749},[529,2655,708],{"emptyLinePlaceholder":707},[529,2657,2658,2660],{"class":531,"line":766},[529,2659,2598],{"class":535},[529,2661,2662],{"class":538}," http:\u002F\u002Flocalhost:3000\u002Fstats\n",[529,2664,2665],{"class":531,"line":779},[529,2666,2667],{"class":2606},"# → { \"\u002Fhome\": 1 }\n",[499,2669,2670,2671,2673,2674,2094,2677,2679],{},"A production build is ",[526,2672,998],{}," against your chosen preset, then run the bundled output the way that preset\nexpects (",[526,2675,2676],{},"node .output\u002Fserver\u002Findex.mjs",[526,2678,2028],{},"). Same source, same routes — only the bundle target\ndiffers.",[499,2681,2682,2683,2685,2686,2688,2689,2691,2692,2694,2695,2698,2699,2701],{},"Because ",[526,2684,630],{}," registered ",[526,2687,626],{}," back when you set up the host, that same\n",[526,2690,634],{}," already carries the dev loop: edit anything under ",[526,2693,1995],{}," and the recompiled routes reload on\ntheir own, a broken compile shows the diagnostic codeframe in the browser (and a plain ",[526,2696,2697],{},"500"," to ",[526,2700,2598],{},"\u002Fa JSON\nclient) instead of a stale response, and a browser navigation to a JSON route renders the syntax-highlighted\npreview page.",[510,2703,2705],{"id":2704},"see-also","See also",[2707,2708,2709,2715,2720,2725,2733],"ul",{},[2710,2711,2712,2714],"li",{},[503,2713,337],{"href":338}," — serve the same Heximon routes alongside Vue pages on one Nitro server, with SSR\ncookie forwarding.",[2710,2716,2717,2719],{},[503,2718,57],{"href":58}," — the two controller modes, middleware, and typed responses the Nitro\nhost serves unchanged.",[2710,2721,2722,2724],{},[503,2723,289],{"href":290}," — run Cloudflare stateful actors under compile-time DI once\nNitro is your host.",[2710,2726,2727,2729,2730,2732],{},[503,2728,267],{"href":268}," — layer a real-time transport onto the Nitro host's ",[526,2731,2284],{}," server.",[2710,2734,2735,2741,2742,2744],{},[503,2736,2738],{"href":2144,"rel":2737},[507],[608,2739,2740],{},"The nitro-presets gap example"," — the\nfull integration end to end: a bare ",[526,2743,614],{},", a host-agnostic counter app, and a test that drives\nthe auto-compile and serves real requests through Nitro's server.",[2746,2747,2748],"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 .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 .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":524,"searchDepth":681,"depth":681,"links":2750},[2751,2752,2753,2754,2755,2756,2757,2758,2759,2760],{"id":512,"depth":681,"text":513},{"id":602,"depth":681,"text":603},{"id":1039,"depth":681,"text":1040},{"id":1214,"depth":681,"text":1215},{"id":1988,"depth":681,"text":1989},{"id":2269,"depth":681,"text":2270},{"id":2305,"depth":681,"text":2306},{"id":2533,"depth":681,"text":2534},{"id":2560,"depth":681,"text":2561},{"id":2704,"depth":681,"text":2705},"Run a Heximon app inside Nitro v3 with heximonNitroModule, heximonNitroVitePlugin for the dev loop, heximon.config.ts, NitroFetchClient, and one server directory that deploys to Node, Cloudflare Workers, Deno, Bun, and AWS Lambda.","md",null,{},{"icon":335},{"title":332,"description":2761},"cg3IoCw0FNjjQcuNat7QTe7tVYnzN705WyD0rrh07kQ",[2769,2771],{"title":327,"path":328,"stem":329,"description":2770,"icon":330,"children":-1},"DenoDeployStrategy, dist\u002Fdeno-worker.js, Deno.cron registrations, deployctl deploy, platform limits.",{"title":337,"path":338,"stem":339,"description":2772,"icon":340,"children":-1},"Run a Heximon API inside a Nuxt 5 app on one Nitro server, with SSR cookie forwarding, a typed Contract client with TanStack Vue Query bindings, heximon.config.ts, HttpPlugin, and a server\u002F controller.",1783300759753]