[{"data":1,"prerenderedAt":1235},["ShallowReactive",2],{"navigation_docs":3,"-introduction-quick-start":195,"-introduction-quick-start-surround":1230},[4,27,61,75,100,126,147,177],{"title":5,"icon":6,"redirect":7,"path":8,"stem":9,"children":10,"page":26},"Introduction","icon-park-outline:home","\u002Fintroduction\u002Fabout-mion","\u002Fintroduction","1.introduction",[11,14,18,22],{"title":12,"path":7,"stem":13},"About mion","1.introduction\u002F1.about-mion",{"title":15,"path":16,"stem":17},"Quick Start","\u002Fintroduction\u002Fquick-start","1.introduction\u002F2.quick-start",{"title":19,"path":20,"stem":21},"Manual Install","\u002Fintroduction\u002Fmanual-install","1.introduction\u002F3.manual-install",{"title":23,"path":24,"stem":25},"What's Next","\u002Fintroduction\u002Fwhat-is-next","1.introduction\u002F4.what-is-next",false,{"title":28,"icon":29,"path":30,"stem":31,"children":32,"page":26},"Server","icon-park-outline:server","\u002Fserver","20.server",[33,37,41,45,49,53,57],{"title":34,"path":35,"stem":36},"Router Overview","\u002Fserver\u002Foverview","20.server\u002F0.overview",{"title":38,"path":39,"stem":40},"Routes","\u002Fserver\u002Froutes","20.server\u002F1.routes",{"title":42,"path":43,"stem":44},"Middleware","\u002Fserver\u002Fmiddle-fns","20.server\u002F2.middle-fns",{"title":46,"path":47,"stem":48},"Request & Response","\u002Fserver\u002Frequest-and-response","20.server\u002F5.request-and-response",{"title":50,"path":51,"stem":52},"Error Handling","\u002Fserver\u002Ferror-handling","20.server\u002F6.error-handling",{"title":54,"path":55,"stem":56},"Validation","\u002Fserver\u002Fvalidation","20.server\u002F7.validation",{"title":58,"path":59,"stem":60},"Serialization","\u002Fserver\u002Fserialization","20.server\u002F8.serialization",{"title":62,"icon":63,"path":64,"stem":65,"children":66,"page":26},"Drizzle ORM","i-lineicons-drizzle","\u002Fdrizzle-orm","21.drizzle-orm",[67,71],{"title":68,"path":69,"stem":70},"Drizzle Overview","\u002Fdrizzle-orm\u002Fdrizzle-overview","21.drizzle-orm\u002F0.drizzle-overview",{"title":72,"path":73,"stem":74},"Column Mapping","\u002Fdrizzle-orm\u002Fcolumn-mapping","21.drizzle-orm\u002F1.column-mapping",{"title":76,"icon":77,"path":78,"stem":79,"children":80,"page":26},"Client","icon-park-outline:computer","\u002Fclient","3.client",[81,85,88,92,96],{"title":82,"path":83,"stem":84},"Client Overview","\u002Fclient\u002Fclient-overview","3.client\u002F0.client-overview",{"title":50,"path":86,"stem":87},"\u002Fclient\u002Ferror-handling","3.client\u002F1.error-handling",{"title":89,"path":90,"stem":91},"Validation Errors","\u002Fclient\u002Fvalidation-errors","3.client\u002F2.validation-errors",{"title":93,"path":94,"stem":95},"Routes Flow","\u002Fclient\u002Fclient-flow","3.client\u002F3.client-flow",{"title":97,"path":98,"stem":99},"Cancellation & Timeouts","\u002Fclient\u002Fcancellation-timeouts","3.client\u002F4.cancellation-timeouts",{"title":101,"icon":102,"redirect":103,"path":104,"stem":105,"children":106,"page":26},"RunTypes","i-lucide-scan-text","\u002Frun-types\u002Foverview","\u002Frun-types","4.run-types",[107,110,114,118,122],{"title":108,"path":103,"stem":109},"RunTypes Overview","4.run-types\u002F0.overview",{"title":111,"path":112,"stem":113},"Supported Types","\u002Frun-types\u002Ffeatures","4.run-types\u002F1.features",{"title":115,"path":116,"stem":117},"Type Formats","\u002Frun-types\u002Ftype-formats","4.run-types\u002F2.type-formats",{"title":119,"path":120,"stem":121},"Built-in Formats","\u002Frun-types\u002Fbuilt-in-formats","4.run-types\u002F3.built-in-formats",{"title":123,"path":124,"stem":125},"Caveats","\u002Frun-types\u002Fcaveats","4.run-types\u002F4.caveats",{"title":127,"path":128,"stem":129,"children":130,"page":26},"Devtools","\u002Fdevtools","5.devtools",[131,135,139,143],{"title":132,"path":133,"stem":134},"AOT Compilation","\u002Fdevtools\u002Faot-compilation","5.devtools\u002F0.aot-compilation",{"title":136,"path":137,"stem":138},"Pure Functions","\u002Fdevtools\u002Fpure-functions","5.devtools\u002F1.pure-functions",{"title":140,"path":141,"stem":142},"ESLint Rules","\u002Fdevtools\u002Feslint-rules","5.devtools\u002F2.eslint-rules",{"title":144,"path":145,"stem":146},"Vite Configuration","\u002Fdevtools\u002Fvite-config","5.devtools\u002F3.vite-config",{"title":148,"redirect":149,"icon":150,"path":151,"stem":152,"children":153,"page":26},"Platforms","\u002Fplatforms\u002Fnode-js","icon-park-outline:play","\u002Fplatforms","6.platforms",[154,157,161,165,169,173],{"title":155,"path":149,"stem":156},"Node.js","6.platforms\u002F1.node-js",{"title":158,"path":159,"stem":160},"Bun","\u002Fplatforms\u002Fbun","6.platforms\u002F2.bun",{"title":162,"path":163,"stem":164},"AWS Lambda","\u002Fplatforms\u002Faws-lambda","6.platforms\u002F3.aws-lambda",{"title":166,"path":167,"stem":168},"Google Cloud Functions","\u002Fplatforms\u002Fgoogle-cloud-functions","6.platforms\u002F4.google-cloud-functions",{"title":170,"path":171,"stem":172},"Cloudflare Workers","\u002Fplatforms\u002Fcloudflare","6.platforms\u002F5.cloudflare",{"title":174,"path":175,"stem":176},"Vercel","\u002Fplatforms\u002Fvercel","6.platforms\u002F6.vercel",{"title":178,"icon":179,"redirect":180,"path":181,"stem":182,"children":183,"page":26},"Benchmarks","icon-park-outline:chart-line","\u002Fbenchmarks\u002Fhello-world","\u002Fbenchmarks","7.benchmarks",[184,187,191],{"title":185,"path":180,"stem":186},"Hello World","7.benchmarks\u002F1.hello-world",{"title":188,"path":189,"stem":190},"Light Validation","\u002Fbenchmarks\u002Flight-validation","7.benchmarks\u002F2.light-validation",{"title":192,"path":193,"stem":194},"Heavy Validation","\u002Fbenchmarks\u002Fheavy-validation","7.benchmarks\u002F3.heavy-validation",{"id":196,"title":15,"body":197,"description":1223,"extension":1224,"links":1225,"meta":1226,"navigation":1227,"path":16,"seo":1228,"stem":17,"__hash__":1229},"docs\u002F1.introduction\u002F2.quick-start.md",{"type":198,"value":199},"minimark",[200,209,216,282,285,289,306,320,323,369,372,619,621,624,632,646,648,681,683,884,886,889,897,911,913,963,965,1209,1219],[201,202,203,204,208],"p",{},"mion offers 3 starter projects that scaffold a fully typed frontend + backend setup in one step. Each starter keeps the mion API as an independent package under ",[205,206,207],"code",{},"api\u002F"," so it can be deployed to any serverless platform (Node, Bun, Vercel, Cloudflare) while the frontend ships as a separate app.",[201,210,211,212,215],{},"Pick a starter and run the corresponding ",[205,213,214],{},"npm create"," command:",[217,218,219,248,265],"code-group",{},[220,221,227],"pre",{"className":222,"code":223,"filename":224,"language":225,"meta":226,"style":226},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm create @mionjs\u002Fstarter-vue my-app\n","Vue","bash","",[205,228,229],{"__ignoreMap":226},[230,231,234,238,242,245],"span",{"class":232,"line":233},"line",1,[230,235,237],{"class":236},"sBMFI","npm",[230,239,241],{"class":240},"sfazB"," create",[230,243,244],{"class":240}," @mionjs\u002Fstarter-vue",[230,246,247],{"class":240}," my-app\n",[220,249,252],{"className":222,"code":250,"filename":251,"language":225,"meta":226,"style":226},"npm create @mionjs\u002Fstarter-nuxt my-app\n","Nuxt",[205,253,254],{"__ignoreMap":226},[230,255,256,258,260,263],{"class":232,"line":233},[230,257,237],{"class":236},[230,259,241],{"class":240},[230,261,262],{"class":240}," @mionjs\u002Fstarter-nuxt",[230,264,247],{"class":240},[220,266,269],{"className":222,"code":267,"filename":268,"language":225,"meta":226,"style":226},"npm create @mionjs\u002Fstarter-nextjs my-app\n","Next.js",[205,270,271],{"__ignoreMap":226},[230,272,273,275,277,280],{"class":232,"line":233},[230,274,237],{"class":236},[230,276,241],{"class":240},[230,278,279],{"class":240}," @mionjs\u002Fstarter-nextjs",[230,281,247],{"class":240},[283,284],"spacer",{},[286,287,224],"h2",{"id":288},"vue",[201,290,291,292,299,300,305],{},"A ",[293,294,298],"a",{"href":295,"rel":296},"https:\u002F\u002Fvuejs.org",[297],"nofollow","Vue 3"," SPA + ",[293,301,304],{"href":302,"rel":303},"https:\u002F\u002Fvitejs.dev",[297],"Vite"," starter with a standalone mion API.",[220,307,308],{"className":222,"code":223,"language":225,"meta":226,"style":226},[205,309,310],{"__ignoreMap":226},[230,311,312,314,316,318],{"class":232,"line":233},[230,313,237],{"class":236},[230,315,241],{"class":240},[230,317,244],{"class":240},[230,319,247],{"class":240},[201,321,322],{},"What's included:",[324,325,326,330,335,342,352,366],"ul",{},[327,328,329],"li",{},"Vue 3 SPA with Vue Router",[327,331,332,334],{},[205,333,207],{}," package with build targets for Node, Bun, Vercel and Cloudflare Workers",[327,336,337,338,341],{},"Fully typed ",[205,339,340],{},"@mionjs\u002Fclient"," wired to the local API",[327,343,344,347,348,351],{},[205,345,346],{},"tsconfig.json"," with ",[205,349,350],{},"reflection: true"," for runtime type metadata",[327,353,354,347,358,361,362],{},[293,355,357],{"href":356},"..\u002Fdevtools\u002Fvite-config","mion Vite plugin",[205,359,360],{},"aotCaches: true"," for ",[293,363,365],{"href":364},"..\u002Fdevtools\u002Faot-compilation","AOT compilation",[327,367,368],{},"Vitest + Playwright e2e tests preconfigured",[201,370,371],{},"Directory structure:",[220,373,375],{"className":222,"code":374,"language":225,"meta":226,"style":226},"my-app\u002F\n├── app\u002F                      # Vue 3 SPA source\n│   ├── pages\u002F                # Route views\n│   ├── composables\u002F          # Shared Vue composables\n│   ├── mion-client.ts        # Typed mion client wired to the API\n│   ├── router.ts             # Vue Router setup\n│   └── main.ts               # SPA entry\n├── api\u002F                      # Standalone mion API package\n│   ├── src\u002F\n│   │   ├── api.ts            # Route registry + initApi()\n│   │   ├── models.ts         # Shared API models\n│   │   ├── features\u002F         # Feature modules (handlers, models, repos)\n│   │   ├── server.node.ts    # Node.js entry\n│   │   ├── server.bun.ts     # Bun entry\n│   │   ├── vercel-serverless.ts\n│   │   └── cloudflare-worker.ts\n│   └── vite.config.ts        # mion Vite plugin + multi-target build\n├── e2e\u002F                      # Playwright tests\n└── vite.config.ts            # Frontend Vite config (loads mion plugin)\n",[205,376,377,382,395,410,423,436,449,463,474,484,500,515,530,545,560,572,584,597,608],{"__ignoreMap":226},[230,378,379],{"class":232,"line":233},[230,380,381],{"class":236},"my-app\u002F\n",[230,383,385,388,391],{"class":232,"line":384},2,[230,386,387],{"class":236},"├──",[230,389,390],{"class":240}," app\u002F",[230,392,394],{"class":393},"sHwdD","                      # Vue 3 SPA source\n",[230,396,398,401,404,407],{"class":232,"line":397},3,[230,399,400],{"class":236},"│",[230,402,403],{"class":240},"   ├──",[230,405,406],{"class":240}," pages\u002F",[230,408,409],{"class":393},"                # Route views\n",[230,411,413,415,417,420],{"class":232,"line":412},4,[230,414,400],{"class":236},[230,416,403],{"class":240},[230,418,419],{"class":240}," composables\u002F",[230,421,422],{"class":393},"          # Shared Vue composables\n",[230,424,426,428,430,433],{"class":232,"line":425},5,[230,427,400],{"class":236},[230,429,403],{"class":240},[230,431,432],{"class":240}," mion-client.ts",[230,434,435],{"class":393},"        # Typed mion client wired to the API\n",[230,437,439,441,443,446],{"class":232,"line":438},6,[230,440,400],{"class":236},[230,442,403],{"class":240},[230,444,445],{"class":240}," router.ts",[230,447,448],{"class":393},"             # Vue Router setup\n",[230,450,452,454,457,460],{"class":232,"line":451},7,[230,453,400],{"class":236},[230,455,456],{"class":240},"   └──",[230,458,459],{"class":240}," main.ts",[230,461,462],{"class":393},"               # SPA entry\n",[230,464,466,468,471],{"class":232,"line":465},8,[230,467,387],{"class":236},[230,469,470],{"class":240}," api\u002F",[230,472,473],{"class":393},"                      # Standalone mion API package\n",[230,475,477,479,481],{"class":232,"line":476},9,[230,478,400],{"class":236},[230,480,403],{"class":240},[230,482,483],{"class":240}," src\u002F\n",[230,485,487,489,492,494,497],{"class":232,"line":486},10,[230,488,400],{"class":236},[230,490,491],{"class":240},"   │",[230,493,403],{"class":240},[230,495,496],{"class":240}," api.ts",[230,498,499],{"class":393},"            # Route registry + initApi()\n",[230,501,503,505,507,509,512],{"class":232,"line":502},11,[230,504,400],{"class":236},[230,506,491],{"class":240},[230,508,403],{"class":240},[230,510,511],{"class":240}," models.ts",[230,513,514],{"class":393},"         # Shared API models\n",[230,516,518,520,522,524,527],{"class":232,"line":517},12,[230,519,400],{"class":236},[230,521,491],{"class":240},[230,523,403],{"class":240},[230,525,526],{"class":240}," features\u002F",[230,528,529],{"class":393},"         # Feature modules (handlers, models, repos)\n",[230,531,533,535,537,539,542],{"class":232,"line":532},13,[230,534,400],{"class":236},[230,536,491],{"class":240},[230,538,403],{"class":240},[230,540,541],{"class":240}," server.node.ts",[230,543,544],{"class":393},"    # Node.js entry\n",[230,546,548,550,552,554,557],{"class":232,"line":547},14,[230,549,400],{"class":236},[230,551,491],{"class":240},[230,553,403],{"class":240},[230,555,556],{"class":240}," server.bun.ts",[230,558,559],{"class":393},"     # Bun entry\n",[230,561,563,565,567,569],{"class":232,"line":562},15,[230,564,400],{"class":236},[230,566,491],{"class":240},[230,568,403],{"class":240},[230,570,571],{"class":240}," vercel-serverless.ts\n",[230,573,575,577,579,581],{"class":232,"line":574},16,[230,576,400],{"class":236},[230,578,491],{"class":240},[230,580,456],{"class":240},[230,582,583],{"class":240}," cloudflare-worker.ts\n",[230,585,587,589,591,594],{"class":232,"line":586},17,[230,588,400],{"class":236},[230,590,456],{"class":240},[230,592,593],{"class":240}," vite.config.ts",[230,595,596],{"class":393},"        # mion Vite plugin + multi-target build\n",[230,598,600,602,605],{"class":232,"line":599},18,[230,601,387],{"class":236},[230,603,604],{"class":240}," e2e\u002F",[230,606,607],{"class":393},"                      # Playwright tests\n",[230,609,611,614,616],{"class":232,"line":610},19,[230,612,613],{"class":236},"└──",[230,615,593],{"class":240},[230,617,618],{"class":393},"            # Frontend Vite config (loads mion plugin)\n",[283,620],{},[286,622,251],{"id":623},"nuxt",[201,625,291,626,631],{},[293,627,630],{"href":628,"rel":629},"https:\u002F\u002Fnuxt.com",[297],"Nuxt 4"," starter with SSR enabled and mion served as a standalone API alongside the Nuxt app.",[220,633,634],{"className":222,"code":250,"language":225,"meta":226,"style":226},[205,635,636],{"__ignoreMap":226},[230,637,638,640,642,644],{"class":232,"line":233},[230,639,237],{"class":236},[230,641,241],{"class":240},[230,643,262],{"class":240},[230,645,247],{"class":240},[201,647,322],{},[324,649,650,657,661,666,672,678],{},[327,651,652,653,656],{},"Nuxt 4 with SSR enabled (use ",[205,654,655],{},"nuxt generate"," for static output)",[327,658,659,334],{},[205,660,207],{},[327,662,337,663,665],{},[205,664,340],{}," available in pages, components, and composables",[327,667,668,347,670,351],{},[205,669,346],{},[205,671,350],{},[327,673,674,675,677],{},"mion Vite plugin wired through Nuxt's Vite config with ",[205,676,360],{}," for AOT compilation",[327,679,680],{},"Playwright e2e tests preconfigured",[201,682,371],{},[220,684,686],{"className":222,"code":685,"language":225,"meta":226,"style":226},"my-app\u002F\n├── app\u002F                      # Nuxt app source\n│   ├── pages\u002F                # File-based routes\n│   ├── composables\u002F          # Composables (includes mion client)\n│   ├── plugins\u002F              # Nuxt plugins\n│   └── app.vue               # Root component\n├── api\u002F                      # Standalone mion API package\n│   ├── src\u002F\n│   │   ├── api.ts            # Route registry + initApi()\n│   │   ├── models.ts         # Shared API models\n│   │   ├── features\u002F         # Feature modules (handlers, models, repos)\n│   │   ├── server.node.ts    # Node.js entry\n│   │   ├── server.bun.ts     # Bun entry\n│   │   ├── vercel-serverless.ts\n│   │   └── cloudflare-worker.ts\n│   ├── mion-plugin.ts        # Shared mion Vite plugin factory\n│   └── vite.config.ts        # Standalone API build\n├── e2e\u002F                      # Playwright tests\n└── nuxt.config.ts            # Nuxt config (loads the mion plugin via Vite)\n",[205,687,688,692,701,712,723,735,747,755,763,775,787,799,811,823,833,843,855,866,874],{"__ignoreMap":226},[230,689,690],{"class":232,"line":233},[230,691,381],{"class":236},[230,693,694,696,698],{"class":232,"line":384},[230,695,387],{"class":236},[230,697,390],{"class":240},[230,699,700],{"class":393},"                      # Nuxt app source\n",[230,702,703,705,707,709],{"class":232,"line":397},[230,704,400],{"class":236},[230,706,403],{"class":240},[230,708,406],{"class":240},[230,710,711],{"class":393},"                # File-based routes\n",[230,713,714,716,718,720],{"class":232,"line":412},[230,715,400],{"class":236},[230,717,403],{"class":240},[230,719,419],{"class":240},[230,721,722],{"class":393},"          # Composables (includes mion client)\n",[230,724,725,727,729,732],{"class":232,"line":425},[230,726,400],{"class":236},[230,728,403],{"class":240},[230,730,731],{"class":240}," plugins\u002F",[230,733,734],{"class":393},"              # Nuxt plugins\n",[230,736,737,739,741,744],{"class":232,"line":438},[230,738,400],{"class":236},[230,740,456],{"class":240},[230,742,743],{"class":240}," app.vue",[230,745,746],{"class":393},"               # Root component\n",[230,748,749,751,753],{"class":232,"line":451},[230,750,387],{"class":236},[230,752,470],{"class":240},[230,754,473],{"class":393},[230,756,757,759,761],{"class":232,"line":465},[230,758,400],{"class":236},[230,760,403],{"class":240},[230,762,483],{"class":240},[230,764,765,767,769,771,773],{"class":232,"line":476},[230,766,400],{"class":236},[230,768,491],{"class":240},[230,770,403],{"class":240},[230,772,496],{"class":240},[230,774,499],{"class":393},[230,776,777,779,781,783,785],{"class":232,"line":486},[230,778,400],{"class":236},[230,780,491],{"class":240},[230,782,403],{"class":240},[230,784,511],{"class":240},[230,786,514],{"class":393},[230,788,789,791,793,795,797],{"class":232,"line":502},[230,790,400],{"class":236},[230,792,491],{"class":240},[230,794,403],{"class":240},[230,796,526],{"class":240},[230,798,529],{"class":393},[230,800,801,803,805,807,809],{"class":232,"line":517},[230,802,400],{"class":236},[230,804,491],{"class":240},[230,806,403],{"class":240},[230,808,541],{"class":240},[230,810,544],{"class":393},[230,812,813,815,817,819,821],{"class":232,"line":532},[230,814,400],{"class":236},[230,816,491],{"class":240},[230,818,403],{"class":240},[230,820,556],{"class":240},[230,822,559],{"class":393},[230,824,825,827,829,831],{"class":232,"line":547},[230,826,400],{"class":236},[230,828,491],{"class":240},[230,830,403],{"class":240},[230,832,571],{"class":240},[230,834,835,837,839,841],{"class":232,"line":562},[230,836,400],{"class":236},[230,838,491],{"class":240},[230,840,456],{"class":240},[230,842,583],{"class":240},[230,844,845,847,849,852],{"class":232,"line":574},[230,846,400],{"class":236},[230,848,403],{"class":240},[230,850,851],{"class":240}," mion-plugin.ts",[230,853,854],{"class":393},"        # Shared mion Vite plugin factory\n",[230,856,857,859,861,863],{"class":232,"line":586},[230,858,400],{"class":236},[230,860,456],{"class":240},[230,862,593],{"class":240},[230,864,865],{"class":393},"        # Standalone API build\n",[230,867,868,870,872],{"class":232,"line":599},[230,869,387],{"class":236},[230,871,604],{"class":240},[230,873,607],{"class":393},[230,875,876,878,881],{"class":232,"line":610},[230,877,613],{"class":236},[230,879,880],{"class":240}," nuxt.config.ts",[230,882,883],{"class":393},"            # Nuxt config (loads the mion plugin via Vite)\n",[283,885],{},[286,887,268],{"id":888},"nextjs",[201,890,291,891,896],{},[293,892,895],{"href":893,"rel":894},"https:\u002F\u002Fnextjs.org",[297],"Next.js 16"," + React 19 starter where the mion API runs alongside the Next app.",[220,898,899],{"className":222,"code":267,"language":225,"meta":226,"style":226},[205,900,901],{"__ignoreMap":226},[230,902,903,905,907,909],{"class":232,"line":233},[230,904,237],{"class":236},[230,906,241],{"class":240},[230,908,279],{"class":240},[230,910,247],{"class":240},[201,912,322],{},[324,914,915,918,923,934,941,946,952,957],{},[327,916,917],{},"Next.js 16 + React 19 app with Tailwind CSS 4",[327,919,920,922],{},[205,921,207],{}," package with build targets for Node, Bun and Vercel",[327,924,925,926,929,930,933],{},"In dev, the mion API runs as a standalone ",[205,927,928],{},"vite-node"," server on port 3001 and Next proxies ",[205,931,932],{},"\u002Fapi\u002Fmion\u002F*"," to it",[327,935,936,937,940],{},"In production, a catch-all route handler at ",[205,938,939],{},"app\u002Fapi\u002F[...mion]\u002Froute.ts"," serves the API",[327,942,337,943,945],{},[205,944,340],{}," usable from server and client components",[327,947,948,347,950,351],{},[205,949,346],{},[205,951,350],{},[327,953,954,955,677],{},"mion Vite plugin with ",[205,956,360],{},[327,958,959,962],{},[205,960,961],{},"@mionjs\u002Fdrizzle"," integration and Playwright e2e tests preconfigured",[201,964,371],{},[220,966,968],{"className":222,"code":967,"language":225,"meta":226,"style":226},"my-app\u002F\n├── app\u002F                      # Next.js app router\n│   ├── page.tsx              # Home page\n│   ├── layout.tsx            # Root layout\n│   ├── mion-orders\u002F          # Example feature page\n│   ├── api\u002F\n│   │   └── [...mion]\u002F        # Catch-all route handler for prod\n│   └── globals.css\n├── api\u002F                      # Standalone mion API package\n│   ├── src\u002F\n│   │   ├── api.ts            # Route registry + initApi()\n│   │   ├── models.ts         # Shared API models\n│   │   ├── features\u002F         # Feature modules (handlers, models, repos)\n│   │   ├── db\u002F               # Drizzle schema and client\n│   │   ├── dev-server.ts     # vite-node dev server (proxied by Next)\n│   │   ├── server.node.ts    # Node.js entry\n│   │   ├── server.bun.ts     # Bun entry\n│   │   └── vercel-serverless.ts\n│   ├── drizzle.config.ts     # Drizzle migrations config\n│   └── vite.config.ts        # mion Vite plugin + multi-target build\n├── e2e\u002F                      # Playwright tests\n└── next.config.ts            # Next config (dev proxy + Turbopack aliases)\n",[205,969,970,974,983,995,1007,1019,1028,1043,1052,1060,1068,1080,1092,1104,1118,1132,1144,1156,1166,1178,1189,1198],{"__ignoreMap":226},[230,971,972],{"class":232,"line":233},[230,973,381],{"class":236},[230,975,976,978,980],{"class":232,"line":384},[230,977,387],{"class":236},[230,979,390],{"class":240},[230,981,982],{"class":393},"                      # Next.js app router\n",[230,984,985,987,989,992],{"class":232,"line":397},[230,986,400],{"class":236},[230,988,403],{"class":240},[230,990,991],{"class":240}," page.tsx",[230,993,994],{"class":393},"              # Home page\n",[230,996,997,999,1001,1004],{"class":232,"line":412},[230,998,400],{"class":236},[230,1000,403],{"class":240},[230,1002,1003],{"class":240}," layout.tsx",[230,1005,1006],{"class":393},"            # Root layout\n",[230,1008,1009,1011,1013,1016],{"class":232,"line":425},[230,1010,400],{"class":236},[230,1012,403],{"class":240},[230,1014,1015],{"class":240}," mion-orders\u002F",[230,1017,1018],{"class":393},"          # Example feature page\n",[230,1020,1021,1023,1025],{"class":232,"line":438},[230,1022,400],{"class":236},[230,1024,403],{"class":240},[230,1026,1027],{"class":240}," api\u002F\n",[230,1029,1030,1032,1034,1036,1040],{"class":232,"line":451},[230,1031,400],{"class":236},[230,1033,491],{"class":240},[230,1035,456],{"class":240},[230,1037,1039],{"class":1038},"sTEyZ"," [...mion]\u002F        ",[230,1041,1042],{"class":393},"# Catch-all route handler for prod\n",[230,1044,1045,1047,1049],{"class":232,"line":465},[230,1046,400],{"class":236},[230,1048,456],{"class":240},[230,1050,1051],{"class":240}," globals.css\n",[230,1053,1054,1056,1058],{"class":232,"line":476},[230,1055,387],{"class":236},[230,1057,470],{"class":240},[230,1059,473],{"class":393},[230,1061,1062,1064,1066],{"class":232,"line":486},[230,1063,400],{"class":236},[230,1065,403],{"class":240},[230,1067,483],{"class":240},[230,1069,1070,1072,1074,1076,1078],{"class":232,"line":502},[230,1071,400],{"class":236},[230,1073,491],{"class":240},[230,1075,403],{"class":240},[230,1077,496],{"class":240},[230,1079,499],{"class":393},[230,1081,1082,1084,1086,1088,1090],{"class":232,"line":517},[230,1083,400],{"class":236},[230,1085,491],{"class":240},[230,1087,403],{"class":240},[230,1089,511],{"class":240},[230,1091,514],{"class":393},[230,1093,1094,1096,1098,1100,1102],{"class":232,"line":532},[230,1095,400],{"class":236},[230,1097,491],{"class":240},[230,1099,403],{"class":240},[230,1101,526],{"class":240},[230,1103,529],{"class":393},[230,1105,1106,1108,1110,1112,1115],{"class":232,"line":547},[230,1107,400],{"class":236},[230,1109,491],{"class":240},[230,1111,403],{"class":240},[230,1113,1114],{"class":240}," db\u002F",[230,1116,1117],{"class":393},"               # Drizzle schema and client\n",[230,1119,1120,1122,1124,1126,1129],{"class":232,"line":562},[230,1121,400],{"class":236},[230,1123,491],{"class":240},[230,1125,403],{"class":240},[230,1127,1128],{"class":240}," dev-server.ts",[230,1130,1131],{"class":393},"     # vite-node dev server (proxied by Next)\n",[230,1133,1134,1136,1138,1140,1142],{"class":232,"line":574},[230,1135,400],{"class":236},[230,1137,491],{"class":240},[230,1139,403],{"class":240},[230,1141,541],{"class":240},[230,1143,544],{"class":393},[230,1145,1146,1148,1150,1152,1154],{"class":232,"line":586},[230,1147,400],{"class":236},[230,1149,491],{"class":240},[230,1151,403],{"class":240},[230,1153,556],{"class":240},[230,1155,559],{"class":393},[230,1157,1158,1160,1162,1164],{"class":232,"line":599},[230,1159,400],{"class":236},[230,1161,491],{"class":240},[230,1163,456],{"class":240},[230,1165,571],{"class":240},[230,1167,1168,1170,1172,1175],{"class":232,"line":610},[230,1169,400],{"class":236},[230,1171,403],{"class":240},[230,1173,1174],{"class":240}," drizzle.config.ts",[230,1176,1177],{"class":393},"     # Drizzle migrations config\n",[230,1179,1181,1183,1185,1187],{"class":232,"line":1180},20,[230,1182,400],{"class":236},[230,1184,456],{"class":240},[230,1186,593],{"class":240},[230,1188,596],{"class":393},[230,1190,1192,1194,1196],{"class":232,"line":1191},21,[230,1193,387],{"class":236},[230,1195,604],{"class":240},[230,1197,607],{"class":393},[230,1199,1201,1203,1206],{"class":232,"line":1200},22,[230,1202,613],{"class":236},[230,1204,1205],{"class":240}," next.config.ts",[230,1207,1208],{"class":393},"            # Next config (dev proxy + Turbopack aliases)\n",[1210,1211,1212,1213,1215,1216,1218],"note",{},"All starters enable ",[293,1214,365],{"href":364}," (",[205,1217,360],{},") so validation and serialization functions are precompiled at build time — enabling deployment to locked-down environments and faster cold starts.",[1220,1221,1222],"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 .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 pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}","How to get started with mion full stack APIs.","md",null,{"toc":26},true,{"title":15,"description":1223},"LrZNe3ysgFUIdyfW7Nyk1evKA_PujQ0KfzIc0F8S0Po",[1231,1233],{"title":12,"path":7,"stem":13,"description":1232,"children":-1},"Learn what mion is and why you should use it.",{"title":19,"path":20,"stem":21,"description":1234,"children":-1},"How to manually configure a mion app.",1778674527212]