[{"data":1,"prerenderedAt":1197},["ShallowReactive",2],{"navigation_docs":3,"-docs-getting-started-introduction":493,"-docs-getting-started-introduction-surround":1194},[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":11,"body":495,"description":1187,"extension":1188,"links":1189,"meta":1190,"navigation":1191,"path":12,"seo":1192,"stem":13,"__hash__":1193},"docs\u002Fdocs\u002F01.getting-started\u002F01.introduction.md",{"type":496,"value":497,"toc":1177},"minimark",[498,502,887,894,899,902,905,911,914,918,921,956,960,994,998,1017,1021,1024,1038,1041,1052,1056,1135,1142,1146,1152,1156,1173],[499,500,501],"p",{},"Heximon is a TypeScript backend framework for building APIs, SaaS backends, and internal services. You\nwrite plain classes — a controller, a repository, a module that lists them — and the compiler wires them\ntogether before your app ever runs.",[503,504,510],"pre",{"className":505,"code":506,"filename":507,"language":508,"meta":509,"style":509},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type { Controller, Get } from \"@heximon\u002Fhttp\";\nimport { type User, UsersRepository } from \".\u002Fusers.repository\";\n\nexport class UsersController implements Controller\u003C\"\u002Fusers\"> {\n  constructor(private readonly users: UsersRepository) {}\n\n  public async list(_action: Get\u003C\"\u002F\">): Promise\u003CUser[]> {\n    return this.users.list();\n  }\n\n  public async get(action: Get\u003C\"\u002F:id\">): Promise\u003CUser | { error: string }> {\n    const user = await this.users.findById(action.request.pathParams.id);\n    return user ?? { error: \"User not found\" };\n  }\n}\n","src\u002Fusers\u002Fusers.controller.ts","ts","",[511,512,513,558,588,595,630,660,665,714,738,744,749,803,850,876,881],"code",{"__ignoreMap":509},[514,515,518,522,525,529,533,536,539,542,545,548,552,555],"span",{"class":516,"line":517},"line",1,[514,519,521],{"class":520},"s7zQu","import",[514,523,524],{"class":520}," type",[514,526,528],{"class":527},"sMK4o"," {",[514,530,532],{"class":531},"sTEyZ"," Controller",[514,534,535],{"class":527},",",[514,537,538],{"class":531}," Get",[514,540,541],{"class":527}," }",[514,543,544],{"class":520}," from",[514,546,547],{"class":527}," \"",[514,549,551],{"class":550},"sfazB","@heximon\u002Fhttp",[514,553,554],{"class":527},"\"",[514,556,557],{"class":527},";\n",[514,559,561,563,565,567,570,572,575,577,579,581,584,586],{"class":516,"line":560},2,[514,562,521],{"class":520},[514,564,528],{"class":527},[514,566,524],{"class":520},[514,568,569],{"class":531}," User",[514,571,535],{"class":527},[514,573,574],{"class":531}," UsersRepository",[514,576,541],{"class":527},[514,578,544],{"class":520},[514,580,547],{"class":527},[514,582,583],{"class":550},".\u002Fusers.repository",[514,585,554],{"class":527},[514,587,557],{"class":527},[514,589,591],{"class":516,"line":590},3,[514,592,594],{"emptyLinePlaceholder":593},true,"\n",[514,596,598,601,605,609,612,614,617,619,622,624,627],{"class":516,"line":597},4,[514,599,600],{"class":520},"export",[514,602,604],{"class":603},"spNyl"," class",[514,606,608],{"class":607},"sBMFI"," UsersController",[514,610,611],{"class":603}," implements",[514,613,532],{"class":607},[514,615,616],{"class":527},"\u003C",[514,618,554],{"class":527},[514,620,621],{"class":550},"\u002Fusers",[514,623,554],{"class":527},[514,625,626],{"class":527},">",[514,628,629],{"class":527}," {\n",[514,631,633,636,639,642,645,649,652,654,657],{"class":516,"line":632},5,[514,634,635],{"class":603},"  constructor",[514,637,638],{"class":527},"(",[514,640,641],{"class":603},"private",[514,643,644],{"class":603}," readonly",[514,646,648],{"class":647},"sHdIc"," users",[514,650,651],{"class":527},":",[514,653,574],{"class":607},[514,655,656],{"class":527},")",[514,658,659],{"class":527}," {}\n",[514,661,663],{"class":516,"line":662},6,[514,664,594],{"emptyLinePlaceholder":593},[514,666,668,671,674,678,680,683,685,687,689,691,694,696,699,702,704,707,710,712],{"class":516,"line":667},7,[514,669,670],{"class":603},"  public",[514,672,673],{"class":603}," async",[514,675,677],{"class":676},"swJcz"," list",[514,679,638],{"class":527},[514,681,682],{"class":647},"_action",[514,684,651],{"class":527},[514,686,538],{"class":607},[514,688,616],{"class":527},[514,690,554],{"class":527},[514,692,693],{"class":550},"\u002F",[514,695,554],{"class":527},[514,697,698],{"class":527},">):",[514,700,701],{"class":607}," Promise",[514,703,616],{"class":527},[514,705,706],{"class":607},"User",[514,708,709],{"class":531},"[]",[514,711,626],{"class":527},[514,713,629],{"class":527},[514,715,717,720,723,726,729,733,736],{"class":516,"line":716},8,[514,718,719],{"class":520},"    return",[514,721,722],{"class":527}," this.",[514,724,725],{"class":531},"users",[514,727,728],{"class":527},".",[514,730,732],{"class":731},"s2Zo4","list",[514,734,735],{"class":676},"()",[514,737,557],{"class":527},[514,739,741],{"class":516,"line":740},9,[514,742,743],{"class":527},"  }\n",[514,745,747],{"class":516,"line":746},10,[514,748,594],{"emptyLinePlaceholder":593},[514,750,752,754,756,759,761,764,766,768,770,772,775,777,779,781,783,785,788,790,793,795,798,801],{"class":516,"line":751},11,[514,753,670],{"class":603},[514,755,673],{"class":603},[514,757,758],{"class":676}," get",[514,760,638],{"class":527},[514,762,763],{"class":647},"action",[514,765,651],{"class":527},[514,767,538],{"class":607},[514,769,616],{"class":527},[514,771,554],{"class":527},[514,773,774],{"class":550},"\u002F:id",[514,776,554],{"class":527},[514,778,698],{"class":527},[514,780,701],{"class":607},[514,782,616],{"class":527},[514,784,706],{"class":607},[514,786,787],{"class":527}," |",[514,789,528],{"class":527},[514,791,792],{"class":676}," error",[514,794,651],{"class":527},[514,796,797],{"class":607}," string",[514,799,800],{"class":527}," }>",[514,802,629],{"class":527},[514,804,806,809,812,815,818,820,822,824,827,829,831,833,836,838,841,843,846,848],{"class":516,"line":805},12,[514,807,808],{"class":603},"    const",[514,810,811],{"class":531}," user",[514,813,814],{"class":527}," =",[514,816,817],{"class":520}," await",[514,819,722],{"class":527},[514,821,725],{"class":531},[514,823,728],{"class":527},[514,825,826],{"class":731},"findById",[514,828,638],{"class":676},[514,830,763],{"class":531},[514,832,728],{"class":527},[514,834,835],{"class":531},"request",[514,837,728],{"class":527},[514,839,840],{"class":531},"pathParams",[514,842,728],{"class":527},[514,844,845],{"class":531},"id",[514,847,656],{"class":676},[514,849,557],{"class":527},[514,851,853,855,857,860,862,864,866,868,871,873],{"class":516,"line":852},13,[514,854,719],{"class":520},[514,856,811],{"class":531},[514,858,859],{"class":527}," ??",[514,861,528],{"class":527},[514,863,792],{"class":676},[514,865,651],{"class":527},[514,867,547],{"class":527},[514,869,870],{"class":550},"User not found",[514,872,554],{"class":527},[514,874,875],{"class":527}," };\n",[514,877,879],{"class":516,"line":878},14,[514,880,743],{"class":527},[514,882,884],{"class":516,"line":883},15,[514,885,886],{"class":527},"}\n",[499,888,889,890,893],{},"There's no decorator to add. ",[511,891,892],{},"UsersRepository"," is a constructor parameter; the compiler reads that\nsignature, the module it's listed in, and generates the code that constructs both.",[895,896,898],"h2",{"id":897},"why-heximon","Why Heximon",[499,900,901],{},"The pain of a hand-wired backend isn't day one — it's day ninety. Registration lists drift from the\nclasses they list. A client hand-copies the shape of a response and quietly falls out of sync with the\nhandler that returns it. A DI container that resolves dependencies at runtime turns a typo into a 2 a.m.\nstack trace instead of a compile error.",[499,903,904],{},"Heximon's bet is that this is the same problem Vite solved for frontends: resolve the structure ahead of\ntime instead of re-deriving it on every boot. A compiler reads your module's config and your classes'\nconstructor signatures, and emits the plain JavaScript that builds your object graph — so the mistakes\nthat used to surface at 2 a.m. now surface in your editor, on the exact line that's wrong: a missing\nprovider, a broken import, an unmet dependency between modules.",[499,906,907,908,728],{},"And if you declare a capability whose compiler plugin isn't installed, the build fails with the fix\nnamed, not a runtime ",[511,909,910],{},"undefined",[499,912,913],{},"Most apps use three concepts — a module, a controller, a provider. The other 40+ packages are opt-in,\none config line each.",[895,915,917],{"id":916},"what-it-costs","What it costs",[499,919,920],{},"Being direct about the trade so you can decide with real information:",[922,923,924,932,942],"ul",{},[925,926,927,931],"li",{},[928,929,930],"strong",{},"A Vite build step."," If you already run Vite, Vitest, or a Vite-powered framework, this is one more\nplugin in a config you already own. If you don't, it's a build step to add — small, but real.",[925,933,934,937,938,941],{},[928,935,936],{},"ESM-only, strict TypeScript."," No CommonJS, no loose ",[511,939,940],{},"tsconfig",". If your codebase is still on\nCommonJS, this is a migration, not a config flag.",[925,943,944,951,952,955],{},[928,945,946,947,950],{},"A generated ",[511,948,949],{},".heximon\u002F"," directory."," The compiler's output — you ",[511,953,954],{},".gitignore"," it (the starter already\ndoes); the first compile adds the generated-directory include entry to your tsconfig.json for you, so\nits compile verdicts surface back in your editor.",[895,957,959],{"id":958},"what-it-doesnt-cost","What it doesn't cost",[922,961,962,968,978,988],{},[925,963,964,967],{},[928,965,966],{},"No runtime container."," There's nothing resolving dependencies while your app is handling requests —\ndispatch is plain generated JavaScript you can open and read, the same code you'd have written by hand.",[925,969,970,973,974,977],{},[928,971,972],{},"The contract package is frontend-safe."," ",[511,975,976],{},"@heximon\u002Fcontract"," has near-zero dependencies and no server\nimport, so a typed API client can ship in a browser bundle.",[925,979,980,983,984,987],{},[928,981,982],{},"Drizzle schemas are stock Drizzle."," Nothing about your database schema is Heximon-specific — it's\nthe same ",[511,985,986],{},"drizzle-kit"," you already know.",[925,989,990,993],{},[928,991,992],{},"Leaving is cheap."," Your classes are plain TypeScript with constructor parameters. Strip the module\nconfig and the framework imports, and what's left is code that still makes sense.",[895,995,997],{"id":996},"isnt-a-compiler-exotic","Isn't a compiler exotic?",[499,999,1000,1001,1004,1005,1008,1009,1012,1013,1016],{},"Look at what it actually reads: a handful of source files — a provider, a controller, a module, a schema,\na contract — and one ",[511,1002,1003],{},"heximon.config.ts"," line. The output is a ",[511,1006,1007],{},"fetch"," handler built from ",[511,1010,1011],{},"new UsersController(new UsersRepository())"," — code you could have written yourself. The\n",[1014,1015,21],"a",{"href":22}," walks all five files it takes to get there; nothing about\nthe generated output is hidden from you.",[895,1018,1020],{"id":1019},"when-to-use-it-and-when-not-to","When to use it — and when not to",[499,1022,1023],{},"Reach for Heximon when:",[922,1025,1026,1029,1032,1035],{},[925,1027,1028],{},"You're building an API that's going to live long enough to grow past its first shape.",[925,1030,1031],{},"You want end-to-end types between server and client without hand-maintaining a second copy.",[925,1033,1034],{},"You want structure — modules, boundaries, a DI graph — without a container doing work at runtime.",[925,1036,1037],{},"You're deploying somewhere reflection can't follow you, like an edge runtime.",[499,1039,1040],{},"Skip it when:",[922,1042,1043,1046,1049],{},[925,1044,1045],{},"You're writing a one-file script — the module\u002Fcontroller split is overhead you don't need yet.",[925,1047,1048],{},"You can't move to ESM — Heximon doesn't support CommonJS.",[925,1050,1051],{},"You can't add a build step to your workflow — a lightweight router with hand-wired classes (Hono and\nyour own composition root, for instance) is a legitimate, simpler choice here.",[895,1053,1055],{"id":1054},"find-your-next-page","Find your next page",[1057,1058,1059,1073],"table",{},[1060,1061,1062],"thead",{},[1063,1064,1065,1070],"tr",{},[1066,1067,1069],"th",{"align":1068},"left","Building",[1066,1071,1072],{"align":1068},"Go to",[1074,1075,1076,1086,1095,1104,1113,1125],"tbody",{},[1063,1077,1078,1082],{},[1079,1080,1081],"td",{"align":1068},"A REST API",[1079,1083,1084],{"align":1068},[1014,1085,67],{"href":68},[1063,1087,1088,1091],{},[1079,1089,1090],{"align":1068},"A database-backed feature",[1079,1092,1093],{"align":1068},[1014,1094,77],{"href":78},[1063,1096,1097,1100],{},[1079,1098,1099],{"align":1068},"Login and permissions",[1079,1101,1102],{"align":1068},[1014,1103,97],{"href":98},[1063,1105,1106,1109],{},[1079,1107,1108],{"align":1068},"Background work",[1079,1110,1111],{"align":1068},[1014,1112,151],{"href":152},[1063,1114,1115,1118],{},[1079,1116,1117],{"align":1068},"Realtime updates",[1079,1119,1120,1122,1123],{"align":1068},[1014,1121,267],{"href":268}," \u002F ",[1014,1124,275],{"href":276},[1063,1126,1127,1130],{},[1079,1128,1129],{"align":1068},"A production deploy",[1079,1131,1132],{"align":1068},[1014,1133,1134],{"href":299},"Deploy overview",[499,1136,1137,1138,1141],{},"See ",[1014,1139,1140],{"href":37},"Where to go next"," for the full map.",[895,1143,1145],{"id":1144},"how-it-works","How it works",[499,1147,1148,1149,1151],{},"At build time, the compiler reads each module's config and the constructor signatures of the classes it\ndeclares, then emits plain JavaScript wiring that constructs everything directly — no reflection, no\ncontainer resolving anything while your app runs. See ",[1014,1150,389],{"href":390}," for how the graph\nis built.",[895,1153,1155],{"id":1154},"next-steps","Next steps",[922,1157,1158,1163,1168],{},[925,1159,1160,1162],{},[1014,1161,21],{"href":22}," — build a three-file HTTP app and serve it in minutes.",[925,1164,1165,1167],{},[1014,1166,16],{"href":17}," — add Heximon to a project by hand, or scaffold one.",[925,1169,1170,1172],{},[1014,1171,31],{"href":32}," — the tiered example set: a progressive learning ladder, the\nevent-ticketing flagship, and thematic gap apps.",[1174,1175,1176],"style",{},"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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":509,"searchDepth":560,"depth":560,"links":1178},[1179,1180,1181,1182,1183,1184,1185,1186],{"id":897,"depth":560,"text":898},{"id":916,"depth":560,"text":917},{"id":958,"depth":560,"text":959},{"id":996,"depth":560,"text":997},{"id":1019,"depth":560,"text":1020},{"id":1054,"depth":560,"text":1055},{"id":1144,"depth":560,"text":1145},{"id":1154,"depth":560,"text":1155},"A TypeScript backend framework for APIs, SaaS backends, and internal services — plain classes wired at build time, no decorators, no runtime container.","md",null,{},{"icon":14},{"title":11,"description":1187},"L6sWUsvcPt6VAcHxHRwqBd5_6SUu-5qoVnZFJYD4yTE",[1189,1195],{"title":16,"path":17,"stem":18,"description":1196,"icon":19,"children":-1},"Install @heximon\u002Fruntime, @heximon\u002Fhttp, and @heximon\u002Fbuild; register the heximon() Vite plugin and the HttpPlugin in heximon.config.ts; set strict ESM tsconfig options; and add the vp dev, check, and pack scripts.",1783300761903]