[{"data":1,"prerenderedAt":1084},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fgetting-started\u002Fquick-start":176,"\u002Fdocs\u002Fgetting-started\u002Fquick-start-surround":1079},[4,21,86,158],{"title":5,"path":6,"stem":7,"children":8,"status":11,"icon":20},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F1.getting-started\u002F1.index",[9,12,16],{"title":10,"path":6,"stem":7,"status":11},"Introduction",null,{"title":13,"path":14,"stem":15,"status":11},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","1.docs\u002F1.getting-started\u002F2.installation",{"title":17,"path":18,"stem":19,"status":11},"Quick Start","\u002Fdocs\u002Fgetting-started\u002Fquick-start","1.docs\u002F1.getting-started\u002F3.quick-start",false,{"title":22,"path":23,"stem":24,"children":25,"status":11,"icon":20},"Core Concepts","\u002Fdocs\u002Fcore-concepts","1.docs\u002F2.core-concepts\u002F1.index",[26,28,32,36,46,50,54,58,62,66,70,74,78,82],{"title":27,"path":23,"stem":24,"status":11},"Overview",{"title":29,"path":30,"stem":31,"status":11},"Response","\u002Fdocs\u002Fcore-concepts\u002Fresponse","1.docs\u002F2.core-concepts\u002F10.response",{"title":33,"path":34,"stem":35,"status":11},"Testing","\u002Fdocs\u002Fcore-concepts\u002Ftesting","1.docs\u002F2.core-concepts\u002F12.testing",{"title":37,"path":38,"stem":39,"children":40,"status":11,"icon":20,"defaultOpen":20},"Decorators","\u002Fdocs\u002Fcore-concepts\u002Fdecorators","1.docs\u002F2.core-concepts\u002F13.decorators\u002F1.index",[41,42],{"title":27,"path":38,"stem":39,"status":11},{"title":43,"path":44,"stem":45,"status":11},"Custom","\u002Fdocs\u002Fcore-concepts\u002Fdecorators\u002Fcustom","1.docs\u002F2.core-concepts\u002F13.decorators\u002F2.custom",{"title":47,"path":48,"stem":49,"status":11},"Discovery Service","\u002Fdocs\u002Fcore-concepts\u002Fdiscovery","1.docs\u002F2.core-concepts\u002F14.discovery",{"title":51,"path":52,"stem":53,"status":11},"Application Lifecycle","\u002Fdocs\u002Fcore-concepts\u002Fapp-lifecycle","1.docs\u002F2.core-concepts\u002F15.app-lifecycle",{"title":55,"path":56,"stem":57,"status":11},"Controllers","\u002Fdocs\u002Fcore-concepts\u002Fcontrollers","1.docs\u002F2.core-concepts\u002F2.controllers",{"title":59,"path":60,"stem":61,"status":11},"Routing","\u002Fdocs\u002Fcore-concepts\u002Frouting","1.docs\u002F2.core-concepts\u002F3.routing",{"title":63,"path":64,"stem":65,"status":11},"Providers","\u002Fdocs\u002Fcore-concepts\u002Fproviders","1.docs\u002F2.core-concepts\u002F4.providers",{"title":67,"path":68,"stem":69,"status":11},"Modules","\u002Fdocs\u002Fcore-concepts\u002Fmodules","1.docs\u002F2.core-concepts\u002F5.modules",{"title":71,"path":72,"stem":73,"status":11},"Configuration","\u002Fdocs\u002Fcore-concepts\u002Fconfiguration","1.docs\u002F2.core-concepts\u002F6.configuration",{"title":75,"path":76,"stem":77,"status":11},"Middleware","\u002Fdocs\u002Fcore-concepts\u002Fmiddleware","1.docs\u002F2.core-concepts\u002F7.middleware",{"title":79,"path":80,"stem":81,"status":11},"Guards","\u002Fdocs\u002Fcore-concepts\u002Fguards","1.docs\u002F2.core-concepts\u002F8.guards",{"title":83,"path":84,"stem":85,"status":11},"Exceptions","\u002Fdocs\u002Fcore-concepts\u002Fexceptions","1.docs\u002F2.core-concepts\u002F9.exceptions",{"title":87,"path":88,"stem":89,"children":90,"status":11,"icon":20},"Packages","\u002Fdocs\u002Fpackages","1.docs\u002F3.packages\u002F1.index",[91,92,97,108,112,130,134,138,142,146,150,154],{"title":27,"path":88,"stem":89,"status":11},{"title":93,"path":94,"stem":95,"status":96},"CLI","\u002Fdocs\u002Fpackages\u002Fcli","1.docs\u002F3.packages\u002F10.cli","experimental",{"title":98,"path":99,"stem":100,"children":101,"status":11,"icon":20,"defaultOpen":20},"Events","\u002Fdocs\u002Fpackages\u002Fmessaging","1.docs\u002F3.packages\u002F11.messaging\u002F1.index",[102,104],{"title":27,"path":99,"stem":100,"status":103},"beta",{"title":105,"path":106,"stem":107,"status":96},"Redis","\u002Fdocs\u002Fpackages\u002Fmessaging\u002Fredis","1.docs\u002F3.packages\u002F11.messaging\u002F2.redis",{"title":109,"path":110,"stem":111,"status":103},"Serve Static","\u002Fdocs\u002Fpackages\u002Fserve-static","1.docs\u002F3.packages\u002F12.serve-static",{"title":113,"path":114,"stem":115,"children":116,"status":11,"icon":20,"defaultOpen":20},"Auth","\u002Fdocs\u002Fpackages\u002Fauth","1.docs\u002F3.packages\u002F2.auth\u002F1.index",[117,118,122,126],{"title":27,"path":114,"stem":115,"status":103},{"title":119,"path":120,"stem":121,"status":103},"JWT Provider","\u002Fdocs\u002Fpackages\u002Fauth\u002Fjwt","1.docs\u002F3.packages\u002F2.auth\u002F2.jwt",{"title":123,"path":124,"stem":125,"status":103},"Local Provider","\u002Fdocs\u002Fpackages\u002Fauth\u002Flocal","1.docs\u002F3.packages\u002F2.auth\u002F3.local",{"title":127,"path":128,"stem":129,"status":96},"OAuth2 Provider","\u002Fdocs\u002Fpackages\u002Fauth\u002Foauth2","1.docs\u002F3.packages\u002F2.auth\u002F4.oauth2",{"title":131,"path":132,"stem":133,"status":103},"JWT","\u002Fdocs\u002Fpackages\u002Fjwt","1.docs\u002F3.packages\u002F3.jwt",{"title":135,"path":136,"stem":137,"status":103},"Drizzle","\u002Fdocs\u002Fpackages\u002Fdrizzle","1.docs\u002F3.packages\u002F4.drizzle",{"title":139,"path":140,"stem":141,"status":103},"Papr","\u002Fdocs\u002Fpackages\u002Fpapr","1.docs\u002F3.packages\u002F5.papr",{"title":143,"path":144,"stem":145,"status":103},"Mongoose","\u002Fdocs\u002Fpackages\u002Fmongoose","1.docs\u002F3.packages\u002F6.mongoose",{"title":147,"path":148,"stem":149,"status":103},"Swagger","\u002Fdocs\u002Fpackages\u002Fswagger","1.docs\u002F3.packages\u002F7.swagger",{"title":151,"path":152,"stem":153,"status":103},"Node Server","\u002Fdocs\u002Fpackages\u002Fnode-server","1.docs\u002F3.packages\u002F8.node-server",{"title":155,"path":156,"stem":157,"status":103},"uWS Server","\u002Fdocs\u002Fpackages\u002Fuws-server","1.docs\u002F3.packages\u002F9.uws-server",{"title":159,"path":160,"stem":161,"children":162,"status":11,"icon":20},"Roadmap","\u002Fdocs\u002Froadmap","1.docs\u002F4.roadmap\u002F1.index",[163,164,168,172],{"title":27,"path":160,"stem":161,"status":11},{"title":165,"path":166,"stem":167,"status":11},"Short term (0-3 months)","\u002Fdocs\u002Froadmap\u002Fshort-term","1.docs\u002F4.roadmap\u002F2.short-term",{"title":169,"path":170,"stem":171,"status":11},"Mid term (3-9 months)","\u002Fdocs\u002Froadmap\u002Fmid-term","1.docs\u002F4.roadmap\u002F3.mid-term",{"title":173,"path":174,"stem":175,"status":11},"Long term (9-12+ months)","\u002Fdocs\u002Froadmap\u002Flong-term","1.docs\u002F4.roadmap\u002F4.long-term",{"id":177,"title":17,"body":178,"description":1074,"extension":1075,"meta":1076,"navigation":271,"path":18,"seo":1077,"status":11,"stem":19,"__hash__":1078},"docs\u002F1.docs\u002F1.getting-started\u002F3.quick-start.md",{"type":179,"value":180,"toc":1067},"minimark",[181,200,205,563,567,633,637,643,906,932,936,1026,1030,1063],[182,183,187],"callout",{"ariaLabel":184,"icon":185,"to":186},"Scaffold with CLI","i-heroicons-bolt","\u002Fdocs\u002Fgetting-started\u002Finstallation#scaffold-with-cli-recommended",[188,189,190,194,195,199],"p",{},[191,192,193],"strong",{},"Want the fastest path?"," Run ",[196,197,198],"code",{},"npx @miiajs\u002Fcli new my-app"," to scaffold a ready-to-run project with a controller, service, and module already wired up.",[201,202,204],"h2",{"id":203},"_1-create-a-controller","1. Create a controller",[206,207,212],"pre",{"className":208,"code":209,"language":210,"meta":211,"style":211},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Controller, Get, Post, type RequestContext } from '@miiajs\u002Fcore'\n\n@Controller('\u002Fhello')\nclass HelloController {\n  @Get('\u002F')\n  greet() {\n    return { message: 'Hello, Miia!' }\n  }\n\n  @Get('\u002F:name')\n  greetUser(ctx: RequestContext) {\n    return { message: `Hello, ${ctx.params.name}!` }\n  }\n\n  @Post('\u002F')\n  async echo(ctx: RequestContext) {\n    const body = await ctx.json()\n    return { received: body }\n  }\n}\n","typescript","",[196,213,214,266,273,297,311,331,343,367,373,378,396,417,461,466,471,489,510,536,552,557],{"__ignoreMap":211},[215,216,219,223,227,231,234,237,239,242,244,247,250,253,256,259,263],"span",{"class":217,"line":218},"line",1,[215,220,222],{"class":221},"s7zQu","import",[215,224,226],{"class":225},"sMK4o"," {",[215,228,230],{"class":229},"sTEyZ"," Controller",[215,232,233],{"class":225},",",[215,235,236],{"class":229}," Get",[215,238,233],{"class":225},[215,240,241],{"class":229}," Post",[215,243,233],{"class":225},[215,245,246],{"class":221}," type",[215,248,249],{"class":229}," RequestContext",[215,251,252],{"class":225}," }",[215,254,255],{"class":221}," from",[215,257,258],{"class":225}," '",[215,260,262],{"class":261},"sfazB","@miiajs\u002Fcore",[215,264,265],{"class":225},"'\n",[215,267,269],{"class":217,"line":268},2,[215,270,272],{"emptyLinePlaceholder":271},true,"\n",[215,274,276,279,283,286,289,292,294],{"class":217,"line":275},3,[215,277,278],{"class":225},"@",[215,280,282],{"class":281},"s2Zo4","Controller",[215,284,285],{"class":229},"(",[215,287,288],{"class":225},"'",[215,290,291],{"class":261},"\u002Fhello",[215,293,288],{"class":225},[215,295,296],{"class":229},")\n",[215,298,300,304,308],{"class":217,"line":299},4,[215,301,303],{"class":302},"spNyl","class",[215,305,307],{"class":306},"sBMFI"," HelloController",[215,309,310],{"class":225}," {\n",[215,312,314,317,320,322,324,327,329],{"class":217,"line":313},5,[215,315,316],{"class":225},"  @",[215,318,319],{"class":281},"Get",[215,321,285],{"class":229},[215,323,288],{"class":225},[215,325,326],{"class":261},"\u002F",[215,328,288],{"class":225},[215,330,296],{"class":229},[215,332,334,338,341],{"class":217,"line":333},6,[215,335,337],{"class":336},"swJcz","  greet",[215,339,340],{"class":225},"()",[215,342,310],{"class":225},[215,344,346,349,351,354,357,359,362,364],{"class":217,"line":345},7,[215,347,348],{"class":221},"    return",[215,350,226],{"class":225},[215,352,353],{"class":336}," message",[215,355,356],{"class":225},":",[215,358,258],{"class":225},[215,360,361],{"class":261},"Hello, Miia!",[215,363,288],{"class":225},[215,365,366],{"class":225}," }\n",[215,368,370],{"class":217,"line":369},8,[215,371,372],{"class":225},"  }\n",[215,374,376],{"class":217,"line":375},9,[215,377,272],{"emptyLinePlaceholder":271},[215,379,381,383,385,387,389,392,394],{"class":217,"line":380},10,[215,382,316],{"class":225},[215,384,319],{"class":281},[215,386,285],{"class":229},[215,388,288],{"class":225},[215,390,391],{"class":261},"\u002F:name",[215,393,288],{"class":225},[215,395,296],{"class":229},[215,397,399,402,404,408,410,412,415],{"class":217,"line":398},11,[215,400,401],{"class":336},"  greetUser",[215,403,285],{"class":225},[215,405,407],{"class":406},"sHdIc","ctx",[215,409,356],{"class":225},[215,411,249],{"class":306},[215,413,414],{"class":225},")",[215,416,310],{"class":225},[215,418,420,422,424,426,428,431,434,437,439,442,445,447,450,453,456,459],{"class":217,"line":419},12,[215,421,348],{"class":221},[215,423,226],{"class":225},[215,425,353],{"class":336},[215,427,356],{"class":225},[215,429,430],{"class":225}," `",[215,432,433],{"class":261},"Hello, ",[215,435,436],{"class":225},"${",[215,438,407],{"class":229},[215,440,441],{"class":225},".",[215,443,444],{"class":229},"params",[215,446,441],{"class":225},[215,448,449],{"class":229},"name",[215,451,452],{"class":225},"}",[215,454,455],{"class":261},"!",[215,457,458],{"class":225},"`",[215,460,366],{"class":225},[215,462,464],{"class":217,"line":463},13,[215,465,372],{"class":225},[215,467,469],{"class":217,"line":468},14,[215,470,272],{"emptyLinePlaceholder":271},[215,472,474,476,479,481,483,485,487],{"class":217,"line":473},15,[215,475,316],{"class":225},[215,477,478],{"class":281},"Post",[215,480,285],{"class":229},[215,482,288],{"class":225},[215,484,326],{"class":261},[215,486,288],{"class":225},[215,488,296],{"class":229},[215,490,492,495,498,500,502,504,506,508],{"class":217,"line":491},16,[215,493,494],{"class":302},"  async",[215,496,497],{"class":336}," echo",[215,499,285],{"class":225},[215,501,407],{"class":406},[215,503,356],{"class":225},[215,505,249],{"class":306},[215,507,414],{"class":225},[215,509,310],{"class":225},[215,511,513,516,519,522,525,528,530,533],{"class":217,"line":512},17,[215,514,515],{"class":302},"    const",[215,517,518],{"class":229}," body",[215,520,521],{"class":225}," =",[215,523,524],{"class":221}," await",[215,526,527],{"class":229}," ctx",[215,529,441],{"class":225},[215,531,532],{"class":281},"json",[215,534,535],{"class":336},"()\n",[215,537,539,541,543,546,548,550],{"class":217,"line":538},18,[215,540,348],{"class":221},[215,542,226],{"class":225},[215,544,545],{"class":336}," received",[215,547,356],{"class":225},[215,549,518],{"class":229},[215,551,366],{"class":225},[215,553,555],{"class":217,"line":554},19,[215,556,372],{"class":225},[215,558,560],{"class":217,"line":559},20,[215,561,562],{"class":225},"}\n",[201,564,566],{"id":565},"_2-create-a-module","2. Create a module",[206,568,570],{"className":208,"code":569,"language":210,"meta":211,"style":211},"import { Module } from '@miiajs\u002Fcore'\n\n@Module({\n  controllers: [HelloController]\n})\nclass AppModule {}\n",[196,571,572,591,595,607,617,623],{"__ignoreMap":211},[215,573,574,576,578,581,583,585,587,589],{"class":217,"line":218},[215,575,222],{"class":221},[215,577,226],{"class":225},[215,579,580],{"class":229}," Module",[215,582,252],{"class":225},[215,584,255],{"class":221},[215,586,258],{"class":225},[215,588,262],{"class":261},[215,590,265],{"class":225},[215,592,593],{"class":217,"line":268},[215,594,272],{"emptyLinePlaceholder":271},[215,596,597,599,602,604],{"class":217,"line":275},[215,598,278],{"class":225},[215,600,601],{"class":281},"Module",[215,603,285],{"class":229},[215,605,606],{"class":225},"{\n",[215,608,609,612,614],{"class":217,"line":299},[215,610,611],{"class":336},"  controllers",[215,613,356],{"class":225},[215,615,616],{"class":229}," [HelloController]\n",[215,618,619,621],{"class":217,"line":313},[215,620,452],{"class":225},[215,622,296],{"class":229},[215,624,625,627,630],{"class":217,"line":333},[215,626,303],{"class":302},[215,628,629],{"class":306}," AppModule",[215,631,632],{"class":225}," {}\n",[201,634,636],{"id":635},"_3-create-the-app-and-start-the-server","3. Create the app and start the server",[188,638,639,642],{},[196,640,641],{},"app.listen()"," initializes the DI container, compiles routes, and starts the server. Bun and Deno are auto-detected; for Node.js pass a server adapter:",[644,645,646,726,817],"code-group",{},[206,647,650],{"className":208,"code":648,"filename":649,"language":210,"meta":211,"style":211},"import { Miia } from '@miiajs\u002Fcore'\n\nconst app = new Miia().register(AppModule)\n\nawait app.listen(3000)\n","Bun \u002F Deno",[196,651,652,671,675,701,705],{"__ignoreMap":211},[215,653,654,656,658,661,663,665,667,669],{"class":217,"line":218},[215,655,222],{"class":221},[215,657,226],{"class":225},[215,659,660],{"class":229}," Miia",[215,662,252],{"class":225},[215,664,255],{"class":221},[215,666,258],{"class":225},[215,668,262],{"class":261},[215,670,265],{"class":225},[215,672,673],{"class":217,"line":268},[215,674,272],{"emptyLinePlaceholder":271},[215,676,677,680,683,686,689,691,693,695,698],{"class":217,"line":275},[215,678,679],{"class":302},"const",[215,681,682],{"class":229}," app ",[215,684,685],{"class":225},"=",[215,687,688],{"class":225}," new",[215,690,660],{"class":281},[215,692,340],{"class":229},[215,694,441],{"class":225},[215,696,697],{"class":281},"register",[215,699,700],{"class":229},"(AppModule)\n",[215,702,703],{"class":217,"line":299},[215,704,272],{"emptyLinePlaceholder":271},[215,706,707,710,713,715,718,720,724],{"class":217,"line":313},[215,708,709],{"class":221},"await",[215,711,712],{"class":229}," app",[215,714,441],{"class":225},[215,716,717],{"class":281},"listen",[215,719,285],{"class":229},[215,721,723],{"class":722},"sbssI","3000",[215,725,296],{"class":229},[206,727,730],{"className":208,"code":728,"filename":729,"language":210,"meta":211,"style":211},"import { Miia } from '@miiajs\u002Fcore'\nimport { serve } from '@miiajs\u002Fnode-server'\n\nconst app = new Miia().register(AppModule)\n\nawait app.listen(3000, serve)\n","Node.js",[196,731,732,750,770,774,794,798],{"__ignoreMap":211},[215,733,734,736,738,740,742,744,746,748],{"class":217,"line":218},[215,735,222],{"class":221},[215,737,226],{"class":225},[215,739,660],{"class":229},[215,741,252],{"class":225},[215,743,255],{"class":221},[215,745,258],{"class":225},[215,747,262],{"class":261},[215,749,265],{"class":225},[215,751,752,754,756,759,761,763,765,768],{"class":217,"line":268},[215,753,222],{"class":221},[215,755,226],{"class":225},[215,757,758],{"class":229}," serve",[215,760,252],{"class":225},[215,762,255],{"class":221},[215,764,258],{"class":225},[215,766,767],{"class":261},"@miiajs\u002Fnode-server",[215,769,265],{"class":225},[215,771,772],{"class":217,"line":275},[215,773,272],{"emptyLinePlaceholder":271},[215,775,776,778,780,782,784,786,788,790,792],{"class":217,"line":299},[215,777,679],{"class":302},[215,779,682],{"class":229},[215,781,685],{"class":225},[215,783,688],{"class":225},[215,785,660],{"class":281},[215,787,340],{"class":229},[215,789,441],{"class":225},[215,791,697],{"class":281},[215,793,700],{"class":229},[215,795,796],{"class":217,"line":313},[215,797,272],{"emptyLinePlaceholder":271},[215,799,800,802,804,806,808,810,812,814],{"class":217,"line":333},[215,801,709],{"class":221},[215,803,712],{"class":229},[215,805,441],{"class":225},[215,807,717],{"class":281},[215,809,285],{"class":229},[215,811,723],{"class":722},[215,813,233],{"class":225},[215,815,816],{"class":229}," serve)\n",[206,818,821],{"className":208,"code":819,"filename":820,"language":210,"meta":211,"style":211},"import { Miia } from '@miiajs\u002Fcore'\nimport { serve } from '@miiajs\u002Fuws-server'\n\nconst app = new Miia().register(AppModule)\n\nawait app.listen(3000, serve)\n","uWebSockets.js",[196,822,823,841,860,864,884,888],{"__ignoreMap":211},[215,824,825,827,829,831,833,835,837,839],{"class":217,"line":218},[215,826,222],{"class":221},[215,828,226],{"class":225},[215,830,660],{"class":229},[215,832,252],{"class":225},[215,834,255],{"class":221},[215,836,258],{"class":225},[215,838,262],{"class":261},[215,840,265],{"class":225},[215,842,843,845,847,849,851,853,855,858],{"class":217,"line":268},[215,844,222],{"class":221},[215,846,226],{"class":225},[215,848,758],{"class":229},[215,850,252],{"class":225},[215,852,255],{"class":221},[215,854,258],{"class":225},[215,856,857],{"class":261},"@miiajs\u002Fuws-server",[215,859,265],{"class":225},[215,861,862],{"class":217,"line":275},[215,863,272],{"emptyLinePlaceholder":271},[215,865,866,868,870,872,874,876,878,880,882],{"class":217,"line":299},[215,867,679],{"class":302},[215,869,682],{"class":229},[215,871,685],{"class":225},[215,873,688],{"class":225},[215,875,660],{"class":281},[215,877,340],{"class":229},[215,879,441],{"class":225},[215,881,697],{"class":281},[215,883,700],{"class":229},[215,885,886],{"class":217,"line":313},[215,887,272],{"emptyLinePlaceholder":271},[215,889,890,892,894,896,898,900,902,904],{"class":217,"line":333},[215,891,709],{"class":221},[215,893,712],{"class":229},[215,895,441],{"class":225},[215,897,717],{"class":281},[215,899,285],{"class":229},[215,901,723],{"class":722},[215,903,233],{"class":225},[215,905,816],{"class":229},[907,908,909],"tip",{},[188,910,911,912,915,916,919,920,923,924,927,928,931],{},"By default, Miia registers SIGTERM\u002FSIGINT\u002FSIGHUP handlers on ",[196,913,914],{},"listen()"," so Ctrl+C and container ",[196,917,918],{},"stop"," events trigger a graceful ",[196,921,922],{},"destroy()"," (closing the server, running every provider's ",[196,925,926],{},"onDestroy",", exiting cleanly). See ",[929,930,51],"a",{"href":52}," for opt-out and behavioural details.",[201,933,935],{"id":934},"_4-test-it","4. Test it",[206,937,941],{"className":938,"code":939,"language":940,"meta":211,"style":211},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl http:\u002F\u002Flocalhost:3000\u002Fhello\n# {\"message\":\"Hello, Miia!\"}\n\ncurl http:\u002F\u002Flocalhost:3000\u002Fhello\u002Fworld\n# {\"message\":\"Hello, world!\"}\n\ncurl -X POST http:\u002F\u002Flocalhost:3000\u002Fhello \\\n  -d '{\"foo\":\"bar\"}' \\\n  -H \"Content-Type: application\u002Fjson\"\n# {\"received\":{\"foo\":\"bar\"}}\n","bash",[196,942,943,951,957,961,968,973,977,993,1007,1021],{"__ignoreMap":211},[215,944,945,948],{"class":217,"line":218},[215,946,947],{"class":306},"curl",[215,949,950],{"class":261}," http:\u002F\u002Flocalhost:3000\u002Fhello\n",[215,952,953],{"class":217,"line":268},[215,954,956],{"class":955},"sHwdD","# {\"message\":\"Hello, Miia!\"}\n",[215,958,959],{"class":217,"line":275},[215,960,272],{"emptyLinePlaceholder":271},[215,962,963,965],{"class":217,"line":299},[215,964,947],{"class":306},[215,966,967],{"class":261}," http:\u002F\u002Flocalhost:3000\u002Fhello\u002Fworld\n",[215,969,970],{"class":217,"line":313},[215,971,972],{"class":955},"# {\"message\":\"Hello, world!\"}\n",[215,974,975],{"class":217,"line":333},[215,976,272],{"emptyLinePlaceholder":271},[215,978,979,981,984,987,990],{"class":217,"line":345},[215,980,947],{"class":306},[215,982,983],{"class":261}," -X",[215,985,986],{"class":261}," POST",[215,988,989],{"class":261}," http:\u002F\u002Flocalhost:3000\u002Fhello",[215,991,992],{"class":229}," \\\n",[215,994,995,998,1000,1003,1005],{"class":217,"line":369},[215,996,997],{"class":261},"  -d",[215,999,258],{"class":225},[215,1001,1002],{"class":261},"{\"foo\":\"bar\"}",[215,1004,288],{"class":225},[215,1006,992],{"class":229},[215,1008,1009,1012,1015,1018],{"class":217,"line":375},[215,1010,1011],{"class":261},"  -H",[215,1013,1014],{"class":225}," \"",[215,1016,1017],{"class":261},"Content-Type: application\u002Fjson",[215,1019,1020],{"class":225},"\"\n",[215,1022,1023],{"class":217,"line":380},[215,1024,1025],{"class":955},"# {\"received\":{\"foo\":\"bar\"}}\n",[201,1027,1029],{"id":1028},"next-steps","Next steps",[1031,1032,1033,1044,1051,1057],"ul",{},[1034,1035,1036,1037,1040,1041],"li",{},"Add services with ",[196,1038,1039],{},"@Injectable()"," and ",[196,1042,1043],{},"inject()",[1034,1045,1046,1047,1050],{},"Add validation with ",[196,1048,1049],{},"@ValidateBody()"," and any ZodLike schema",[1034,1052,1053,1054],{},"Add authentication with ",[196,1055,1056],{},"@miiajs\u002Fauth",[1034,1058,1059,1060],{},"Generate API docs with ",[196,1061,1062],{},"@miiajs\u002Fswagger",[1064,1065,1066],"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 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}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":211,"searchDepth":268,"depth":268,"links":1068},[1069,1070,1071,1072,1073],{"id":203,"depth":268,"text":204},{"id":565,"depth":268,"text":566},{"id":635,"depth":268,"text":636},{"id":934,"depth":268,"text":935},{"id":1028,"depth":268,"text":1029},"Build your first MiiaJS API in under a minute.","md",{},{"title":17,"description":1074},"Al725IO8EqomOB4IJ11m_tzHBYD_xyqqnWACfI7y3v0",[1080,1082],{"title":13,"path":14,"stem":15,"description":1081,"children":-1},"Install MiiaJS and a server adapter for your runtime.",{"title":27,"path":23,"stem":24,"description":1083,"children":-1},"Learn the fundamental building blocks of a MiiaJS application.",1778575270759]