[{"data":1,"prerenderedAt":1230},["ShallowReactive",2],{"navigation_docs":3,"-docs-getting-started-examples":493,"-docs-getting-started-examples-surround":1225},[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":31,"body":495,"description":1218,"extension":1219,"links":1220,"meta":1221,"navigation":1222,"path":32,"seo":1223,"stem":33,"__hash__":1224},"docs\u002Fdocs\u002F01.getting-started\u002F05.examples.md",{"type":496,"value":497,"toc":1208},"minimark",[498,530,535,538,543,561,663,667,706,721,725,736,872,876,879,1052,1066,1079,1106,1113,1117,1120,1171,1177,1181,1204],[499,500,501,502,512,513,516,517,521,522,525,526,529],"p",{},"Every example under ",[503,504,508],"a",{"href":505,"rel":506},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples",[507],"nofollow",[509,510,511],"code",{},"examples\u002F"," is a complete,\nrunnable app — clone it, ",[509,514,515],{},"pnpm dev",", and read the source alongside this list. Start at the ",[518,519,520],"strong",{},"learning\nladder"," (L01–L08) for the fundamentals, then the ",[518,523,524],{},"flagship"," to see a real app structured and deployed,\nand reach for a ",[518,527,528],{},"gap example"," when you need something the flagship can't structurally show.",[531,532,534],"h2",{"id":533},"learn-by-building","Learn by building",[499,536,537],{},"Read the ladder in order — every step assumes the concepts introduced before it — then read the flagship\nto see the whole framework composed into one real app, and reach for a gap example when you need to see\nsomething the flagship can't structurally show.",[539,540,542],"h3",{"id":541},"the-learning-ladder","The learning ladder",[499,544,545,546,553,554,556,557,560],{},"A strictly progressive path under ",[503,547,550],{"href":548,"rel":549},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fladder",[507],[509,551,552],{},"examples\u002Fladder\u002F","; each step adds exactly one concept. ",[509,555,515],{}," serves ",[509,558,559],{},"L01",".",[562,563,564,573,584,595,607,623,631,651],"ul",{},[565,566,567,572],"li",{},[503,568,571],{"href":569,"rel":570},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fladder\u002FL01-minimal",[507],"L01 — Minimal"," — The smallest end-to-end app: a root module, a feature module with a constructor-injected repository, a typed controller with two GET routes, and one graph-propagated middleware.",[565,574,575,580,581,560],{},[503,576,579],{"href":577,"rel":578},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fladder\u002FL02-http-validation",[507],"L02 — HTTP + validation"," — Typed routes, a middleware, request-body validation, and framework errors rendered as RFC 9457 ",[509,582,583],{},"problem+json",[565,585,586,591,592,560],{},[503,587,590],{"href":588,"rel":589},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fladder\u002FL03-events",[507],"L03 — Events"," — Decouple modules with events — a shop module publishes order events, a notifications module reacts, and neither imports the other; the only seam is the ",[509,593,594],{},"EventBus",[565,596,597,602,603,606],{},[503,598,601],{"href":599,"rel":600},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fladder\u002FL04-database",[507],"L04 — Database"," — Persistence with the Drizzle libsql\u002FSQLite dialect — a ",[509,604,605],{},"tasks"," table behind a full CRUD API on in-memory libsql.",[565,608,609,614,615,618,619,622],{},[503,610,613],{"href":611,"rel":612},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fladder\u002FL05-cqrs",[507],"L05 — CQRS"," — Split writes from reads: commands on the ",[509,616,617],{},"CommandBus",", queries on the ",[509,620,621],{},"QueryBus",", each message routed to exactly one handler.",[565,624,625,630],{},[503,626,629],{"href":627,"rel":628},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fladder\u002FL06-ddd",[507],"L06 — DDD"," — DDD aggregates over a Drizzle entity repository — branded ids, value-object columns, row↔domain mapping, optimistic concurrency, boot migrations, and a seed task.",[565,632,633,638,639,642,643,646,647,650],{},[503,634,637],{"href":635,"rel":636},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fladder\u002FL07-auth",[507],"L07 — Auth"," — JWT auth with password hashing behind the ",[509,640,641],{},"PasswordHashingAlgorithm"," port, a request-scoped ",[509,644,645],{},"AuthContext",", the shipped ",[509,648,649],{},"JWTAuthMiddleware",", and permission scopes.",[565,652,653,658,659,662],{},[503,654,657],{"href":655,"rel":656},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fladder\u002FL08-queue",[507],"L08 — Queue"," — The integration-events tier on the in-memory queue: a sign-up endpoint emits an event, a handler consumes it off the queue and sends a templated welcome email; the ",[509,660,661],{},"201"," returns first.",[539,664,666],{"id":665},"the-flagship","The flagship",[499,668,669,676,677,680,681,684,685,688,689,688,692,695,696,688,699,688,702,705],{},[503,670,673],{"href":671,"rel":672},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fflagship",[507],[509,674,675],{},"examples\u002Fflagship\u002F"," is an ",[518,678,679],{},"event-ticketing"," workspace: six ",[509,682,683],{},"@ticketing\u002F*"," bounded-context packages (",[509,686,687],{},"shared",", ",[509,690,691],{},"catalog",[509,693,694],{},"orders",",\n",[509,697,698],{},"payments",[509,700,701],{},"notifications",[509,703,704],{},"realtime",") composed by thin per-platform deploy apps — a Node monolith plus\nCloudflare Workers, Cloudflare + MySQL\u002FHyperdrive, AWS Lambda, Vercel, and a notifications split.",[499,707,708,709,712,713,716,717,720],{},"It is the reference for how a real Heximon app is ",[518,710,711],{},"structured"," (bounded contexts behind ports, dual\nSQLite\u002FMySQL dialects), ",[518,714,715],{},"deployed unchanged across hosts",", and ",[518,718,719],{},"tested end-to-end"," — CQRS + DDD, the\ntransactional outbox with cross-service fan-out, a durable saga + a durable workflow, multi-tier caching,\nsecurity hardening, health probes, OpenTelemetry, OpenAPI + MCP, and DO-backed real-time (a seat-hold\nWebSocket + SSE feed).",[539,722,724],{"id":723},"gap-examples","Gap examples",[499,726,727,728,735],{},"Under ",[503,729,732],{"href":730,"rel":731},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap",[507],[509,733,734],{},"examples\u002Fgap\u002F"," — exactly what the flagship structurally can't show, standalone and thematic.",[562,737,738,750,758,766,783,798,809,824,832,844,864],{},[565,739,740,745,746,749],{},[503,741,744],{"href":742,"rel":743},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap\u002Falternate-bundlers",[507],"alternate-bundlers"," — The same app compiled by whichever bundler you run through ",[509,747,748],{},"@heximon\u002Fbuild"," — proving the compile step and generated wiring are bundler-portable.",[565,751,752,757],{},[503,753,756],{"href":754,"rel":755},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap\u002Fcross-service-transports",[507],"cross-service-transports"," — Five cross-service integration-event fan-out legs for producers with no shared broker — a split per-service queue, a Redis Streams broadcast, AWS SNS→SQS, an Upstash QStash push (for freezing serverless subscribers), and the outbox-composed reliable form.",[565,759,760,765],{},[503,761,764],{"href":762,"rel":763},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap\u002Fedge-platforms",[507],"edge-platforms"," — Edge\u002Fserverless deploy targets from one source — Deno Deploy, Netlify (Functions cron + an Async Workloads queue), an OpenTelemetry Node trace, and the Vercel\u002FNetlify mixed-runtime (edge + node) splits.",[565,767,768,773,774,778,779,782],{},[503,769,772],{"href":770,"rel":771},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap\u002Fnitro-presets",[507],"nitro-presets"," — The same Heximon app hosted inside ",[503,775,332],{"href":776,"rel":777},"https:\u002F\u002Fnitro.build",[507]," and built across every Nitro deploy preset (a real ",[509,780,781],{},"nitro build"," per preset — node-server \u002F bun \u002F deno-server \u002F aws-lambda \u002F cloudflare_module \u002F vercel \u002F netlify \u002F netlify-edge \u002F deno-deploy — each output smoked). The flagship uses native strategies, so it can't show the Nitro host or its cross-preset builds.",[565,784,785,789,790,793,794,797],{},[503,786,701],{"href":787,"rel":788},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap\u002Fnotifications",[507]," — One channel-agnostic ",[509,791,792],{},"Notification"," fanned across email\u002FSMS\u002Fpush via the ",[509,795,796],{},"NotificationDispatcher"," — per-channel templating, fanout\u002Ffallback, recipient\u002Fdevice resolution, and bounce suppression.",[565,799,800,805,806,560],{},[503,801,804],{"href":802,"rel":803},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap\u002Fnuxt",[507],"nuxt"," — Heximon modules on the server plus a Vue page on the client, served by one Nitro v3 (Nuxt) server via ",[509,807,808],{},"@heximon\u002Fnuxt",[565,810,811,816,817,820,821,560],{},[503,812,815],{"href":813,"rel":814},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap\u002Fopenapi-mcp",[507],"openapi-mcp"," — One products ",[509,818,819],{},"Contract"," served three ways — the HTTP API, an OpenAPI 3.1 doc + Scalar page, and an MCP server whose tool manifest is generated from the same routes; a Zod v4 schema gives both surfaces real JSON Schema, with a forwarded bearer authorizing a scoped ",[509,822,823],{},"tools\u002Fcall",[565,825,826,831],{},[503,827,830],{"href":828,"rel":829},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap\u002Fsaga-orchestration",[507],"saga-orchestration"," — A durable saga coordinating three bounded contexts with a process-state aggregate and a one-shot durable payment deadline; both timer paths tested.",[565,833,834,839,840,843],{},[503,835,838],{"href":836,"rel":837},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap\u002Fstandalone-runtime",[507],"standalone-runtime"," — One compiled app run as a long-lived server on Node, Bun, and Deno via ",[509,841,842],{},"@heximon\u002Fhttp\u002Fserve"," — no Nitro, no platform wrapper.",[565,845,846,851,852,855,856,859,860,863],{},[503,847,850],{"href":848,"rel":849},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap\u002Fstorage-blob-adapters",[507],"storage-blob-adapters"," — Three port-driven storage features in one app — multipart upload into a ",[509,853,854],{},"BlobStore",", presigned GET\u002FPUT URLs via the ",[509,857,858],{},"SignedUrlBlobStore"," capability token, and an env-driven ",[509,861,862],{},"Storage"," KV adapter (memory \u002F Redis \u002F Upstash) — each driver swapped by binding, not code.",[565,865,866,871],{},[503,867,870],{"href":868,"rel":869},"https:\u002F\u002Fgithub.com\u002Fheximon\u002Fheximon\u002Ftree\u002Fmain\u002Fexamples\u002Fgap\u002Fworkflow-compensation",[507],"workflow-compensation"," — Reactive choreography across Orders\u002FInventory\u002FPayment over the transactional outbox — no central coordinator; happy and compensation paths tested.",[531,873,875],{"id":874},"run-one","Run one",[499,877,878],{},"Every example is a standalone workspace package driven by the same plugin you use in your own app:",[880,881,882,937,976,1014],"code-group",{},[883,884,890],"pre",{"className":885,"code":886,"filename":887,"language":888,"meta":889,"style":889},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cd examples\u002Fladder\u002FL01-minimal\npnpm install\npnpm dev    # compile src\u002F and serve the generated fetch app with hot reload\npnpm test   # run the example's tests\n","pnpm","bash","",[509,891,892,905,914,926],{"__ignoreMap":889},[893,894,897,901],"span",{"class":895,"line":896},"line",1,[893,898,900],{"class":899},"s2Zo4","cd",[893,902,904],{"class":903},"sfazB"," examples\u002Fladder\u002FL01-minimal\n",[893,906,908,911],{"class":895,"line":907},2,[893,909,887],{"class":910},"sBMFI",[893,912,913],{"class":903}," install\n",[893,915,917,919,922],{"class":895,"line":916},3,[893,918,887],{"class":910},[893,920,921],{"class":903}," dev",[893,923,925],{"class":924},"sHwdD","    # compile src\u002F and serve the generated fetch app with hot reload\n",[893,927,929,931,934],{"class":895,"line":928},4,[893,930,887],{"class":910},[893,932,933],{"class":903}," test",[893,935,936],{"class":924},"   # run the example's tests\n",[883,938,941],{"className":885,"code":939,"filename":940,"language":888,"meta":889,"style":889},"cd examples\u002Fladder\u002FL01-minimal\nnpm install\nnpm run dev    # compile src\u002F and serve the generated fetch app with hot reload\nnpm run test   # run the example's tests\n","npm",[509,942,943,949,955,966],{"__ignoreMap":889},[893,944,945,947],{"class":895,"line":896},[893,946,900],{"class":899},[893,948,904],{"class":903},[893,950,951,953],{"class":895,"line":907},[893,952,940],{"class":910},[893,954,913],{"class":903},[893,956,957,959,962,964],{"class":895,"line":916},[893,958,940],{"class":910},[893,960,961],{"class":903}," run",[893,963,921],{"class":903},[893,965,925],{"class":924},[893,967,968,970,972,974],{"class":895,"line":928},[893,969,940],{"class":910},[893,971,961],{"class":903},[893,973,933],{"class":903},[893,975,936],{"class":924},[883,977,980],{"className":885,"code":978,"filename":979,"language":888,"meta":889,"style":889},"cd examples\u002Fladder\u002FL01-minimal\nyarn install\nyarn run dev    # compile src\u002F and serve the generated fetch app with hot reload\nyarn run test   # run the example's tests\n","yarn",[509,981,982,988,994,1004],{"__ignoreMap":889},[893,983,984,986],{"class":895,"line":896},[893,985,900],{"class":899},[893,987,904],{"class":903},[893,989,990,992],{"class":895,"line":907},[893,991,979],{"class":910},[893,993,913],{"class":903},[893,995,996,998,1000,1002],{"class":895,"line":916},[893,997,979],{"class":910},[893,999,961],{"class":903},[893,1001,921],{"class":903},[893,1003,925],{"class":924},[893,1005,1006,1008,1010,1012],{"class":895,"line":928},[893,1007,979],{"class":910},[893,1009,961],{"class":903},[893,1011,933],{"class":903},[893,1013,936],{"class":924},[883,1015,1018],{"className":885,"code":1016,"filename":1017,"language":888,"meta":889,"style":889},"cd examples\u002Fladder\u002FL01-minimal\nbun install\nbun run dev    # compile src\u002F and serve the generated fetch app with hot reload\nbun run test   # run the example's tests\n","bun",[509,1019,1020,1026,1032,1042],{"__ignoreMap":889},[893,1021,1022,1024],{"class":895,"line":896},[893,1023,900],{"class":899},[893,1025,904],{"class":903},[893,1027,1028,1030],{"class":895,"line":907},[893,1029,1017],{"class":910},[893,1031,913],{"class":903},[893,1033,1034,1036,1038,1040],{"class":895,"line":916},[893,1035,1017],{"class":910},[893,1037,961],{"class":903},[893,1039,921],{"class":903},[893,1041,925],{"class":924},[893,1043,1044,1046,1048,1050],{"class":895,"line":928},[893,1045,1017],{"class":910},[893,1047,961],{"class":903},[893,1049,933],{"class":903},[893,1051,936],{"class":924},[499,1053,1054,1055,1058,1059,1065],{},"Each ladder step and most gap examples serve a ",[509,1056,1057],{},"fetch"," app on a free port; the ",[503,1060,1062,1064],{"href":770,"rel":1061},[507],[509,1063,772],{}," gap\nexample"," runs under Nitro instead.",[499,1067,1068,1069,1071,1072,1074,1075,1078],{},"A handful of gap examples — the deploy-target apps under ",[509,1070,764],{}," and the multi-service\n",[509,1073,756],{}," — are exercised in-process via ",[509,1076,1077],{},"createTestApp"," (with platform fakes\u002Fsimulators)\nrather than a plain dev port; their READMEs say so.",[499,1080,1081,1082,1085,1086,1089,1090,1092,1093,1085,1096,1099,1100,1103,1104,560],{},"The flagship's ",[509,1083,1084],{},"cloudflare"," and ",[509,1087,1088],{},"cloudflare-mysql"," apps run their end-to-end suites on real workerd. The\ntyped-client examples inside ",[509,1091,524],{}," drive ",[509,1094,1095],{},"@heximon\u002Fclient\u002Fsse",[509,1097,1098],{},"@heximon\u002Fclient\u002Fws"," against a\nmock transport, so ",[509,1101,1102],{},"pnpm test"," is the entry point there, not ",[509,1105,515],{},[499,1107,1108,1109,1112],{},"Each example's README lists the exact ",[509,1110,1111],{},"curl"," commands to exercise its endpoints.",[531,1114,1116],{"id":1115},"pick-a-path","Pick a path",[499,1118,1119],{},"Just starting out? These four cover the common early goals:",[562,1121,1122,1135,1147,1159],{},[565,1123,1124,1127,1128,1134],{},[518,1125,1126],{},"Your first app?"," ",[503,1129,1131],{"href":569,"rel":1130},[507],[509,1132,1133],{},"L01-minimal"," — a module, a controller, constructor-injected DI.",[565,1136,1137,1127,1140,1146],{},[518,1138,1139],{},"Validating requests?",[503,1141,1143],{"href":577,"rel":1142},[507],[509,1144,1145],{},"L02-http-validation"," — typed routes, middleware, RFC 9457 errors.",[565,1148,1149,1127,1152,1158],{},[518,1150,1151],{},"Persisting data?",[503,1153,1155],{"href":599,"rel":1154},[507],[509,1156,1157],{},"L04-database"," — a Drizzle-backed CRUD API.",[565,1160,1161,1127,1164,1170],{},[518,1162,1163],{},"Adding auth?",[503,1165,1167],{"href":635,"rel":1166},[507],[509,1168,1169],{},"L07-auth"," — JWT verification, scopes, a guard middleware.",[499,1172,1173,1174,560],{},"For every other goal — events, CQRS, background jobs, real-time, caching, deploying somewhere specific,\ncross-service fan-out — see the full goal-to-example map on ",[503,1175,1176],{"href":37},"Next Steps",[531,1178,1180],{"id":1179},"next-steps","Next steps",[562,1182,1183,1188,1193,1198],{},[565,1184,1185,1187],{},[503,1186,21],{"href":22}," — build the three-file app behind example L01 yourself.",[565,1189,1190,1192],{},[503,1191,26],{"href":27}," — modules, providers, and how the wiring fits together.",[565,1194,1195,1197],{},[503,1196,57],{"href":58}," — the two controller modes the examples lean on.",[565,1199,1200,1203],{},[503,1201,1202],{"href":409},"Packages overview"," — the package each example pulls in.",[1205,1206,1207],"style",{},"html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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}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);}",{"title":889,"searchDepth":907,"depth":907,"links":1209},[1210,1215,1216,1217],{"id":533,"depth":907,"text":534,"children":1211},[1212,1213,1214],{"id":541,"depth":916,"text":542},{"id":665,"depth":916,"text":666},{"id":723,"depth":916,"text":724},{"id":874,"depth":907,"text":875},{"id":1115,"depth":907,"text":1116},{"id":1179,"depth":907,"text":1180},"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.","md",null,{},{"icon":34},{"title":31,"description":1218},"YMyPtw7ZWdcka1ifE3N2hlEIQ2zImOckdnS3jBmUWNk",[1226,1228],{"title":26,"path":27,"stem":28,"description":1227,"icon":29,"children":-1},"The six terms a Heximon app is built from — module, provider, constructor injection, controller, the build step, and the config line — each with a link to its dedicated page.",{"title":36,"path":37,"stem":38,"description":1229,"icon":39,"children":-1},"A goal-to-package map for everything past the Quick Start — contracts, databases, auth, background jobs, real-time, and deployment.",1783300759753]