[{"data":1,"prerenderedAt":1155},["ShallowReactive",2],{"navigation_docs":3,"-server-overview":195,"-server-overview-surround":1150},[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":34,"body":197,"description":1144,"extension":1145,"links":1146,"meta":1147,"navigation":352,"path":35,"seo":1148,"stem":36,"__hash__":1149},"docs\u002F20.server\u002F0.overview.md",{"type":198,"value":199},"minimark",[200,205,264,268,636,655,658,662,695,697,701,708,713,745,1093,1097,1099,1103,1106,1128,1131,1140],[201,202,204],"h2",{"id":203},"features","Features",[206,207,209],"stylish-list",{"type":208},"check",[210,211,212,222,229,236,243,250,257],"ul",{},[213,214,215,221],"li",{},[216,217,220],"span",{"className":218},[219],"text-highlighted","RPC-style routing:"," Direct method calls, no URL parsing or regex matching",[213,223,224,228],{},[216,225,227],{"className":226},[219],"Automatic validation:"," All parameters are validated before execution using TypeScript types",[213,230,231,235],{},[216,232,234],{"className":233},[219],"Automatic serialization:"," Complex types (Date, Map, Set, BigInt) serialized automatically",[213,237,238,242],{},[216,239,241],{"className":240},[219],"MiddleFns (middleware):"," Execute code before\u002Fafter routes for auth, logging, etc.",[213,244,245,249],{},[216,246,248],{"className":247},[219],"Type-safe:"," Full TypeScript support with end-to-end type safety",[213,251,252,256],{},[216,253,255],{"className":254},[219],"Lightweight & fast:"," Simple in-memory map for route lookup",[213,258,259,263],{},[216,260,262],{"className":261},[219],"Nested routes:"," Organize routes in a hierarchical structure",[201,265,267],{"id":266},"quick-example","Quick Example",[269,270,275],"pre",{"className":271,"code":272,"language":273,"meta":274,"style":274},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {Routes, route} from '@mionjs\u002Frouter';\nimport {memoryStoreService as db} from '.\u002Ffull-example.app.ts';\n\nexport const routes = {\n    sayHello: route((ctx, name1: string, name2: string): string => {\n        return `Hello ${name1} and ${name2}.`;\n    }),\n    getSomeData: route(async (ctx, id: string): Data | RpcError\u003C'data-not-found'> => {\n        const data = await db.getData(id);\n        return data || new RpcError({publicMessage: 'Data not found', type: 'data-not-found'});\n    }),\n} satisfies Routes;\n","typescript","",[276,277,278,318,347,354,373,425,463,475,532,563,614,623],"code",{"__ignoreMap":274},[216,279,282,286,290,293,296,299,302,305,308,312,315],{"class":280,"line":281},"line",1,[216,283,285],{"class":284},"s7zQu","import",[216,287,289],{"class":288},"sMK4o"," {",[216,291,38],{"class":292},"sTEyZ",[216,294,295],{"class":288},",",[216,297,298],{"class":292}," route",[216,300,301],{"class":288},"}",[216,303,304],{"class":284}," from",[216,306,307],{"class":288}," '",[216,309,311],{"class":310},"sfazB","@mionjs\u002Frouter",[216,313,314],{"class":288},"'",[216,316,317],{"class":288},";\n",[216,319,321,323,325,328,331,334,336,338,340,343,345],{"class":280,"line":320},2,[216,322,285],{"class":284},[216,324,289],{"class":288},[216,326,327],{"class":292},"memoryStoreService",[216,329,330],{"class":284}," as",[216,332,333],{"class":292}," db",[216,335,301],{"class":288},[216,337,304],{"class":284},[216,339,307],{"class":288},[216,341,342],{"class":310},".\u002Ffull-example.app.ts",[216,344,314],{"class":288},[216,346,317],{"class":288},[216,348,350],{"class":280,"line":349},3,[216,351,353],{"emptyLinePlaceholder":352},true,"\n",[216,355,357,360,364,367,370],{"class":280,"line":356},4,[216,358,359],{"class":284},"export",[216,361,363],{"class":362},"spNyl"," const",[216,365,366],{"class":292}," routes ",[216,368,369],{"class":288},"=",[216,371,372],{"class":288}," {\n",[216,374,376,380,383,386,389,391,395,397,400,402,406,408,411,413,415,418,420,423],{"class":280,"line":375},5,[216,377,379],{"class":378},"swJcz","    sayHello",[216,381,382],{"class":288},":",[216,384,298],{"class":385},"s2Zo4",[216,387,388],{"class":292},"(",[216,390,388],{"class":288},[216,392,394],{"class":393},"sHdIc","ctx",[216,396,295],{"class":288},[216,398,399],{"class":393}," name1",[216,401,382],{"class":288},[216,403,405],{"class":404},"sBMFI"," string",[216,407,295],{"class":288},[216,409,410],{"class":393}," name2",[216,412,382],{"class":288},[216,414,405],{"class":404},[216,416,417],{"class":288},"):",[216,419,405],{"class":404},[216,421,422],{"class":362}," =>",[216,424,372],{"class":288},[216,426,428,431,434,437,440,443,445,448,450,453,455,458,461],{"class":280,"line":427},6,[216,429,430],{"class":284},"        return",[216,432,433],{"class":288}," `",[216,435,436],{"class":310},"Hello ",[216,438,439],{"class":288},"${",[216,441,442],{"class":292},"name1",[216,444,301],{"class":288},[216,446,447],{"class":310}," and ",[216,449,439],{"class":288},[216,451,452],{"class":292},"name2",[216,454,301],{"class":288},[216,456,457],{"class":310},".",[216,459,460],{"class":288},"`",[216,462,317],{"class":288},[216,464,466,469,472],{"class":280,"line":465},7,[216,467,468],{"class":288},"    }",[216,470,471],{"class":292},")",[216,473,474],{"class":288},",\n",[216,476,478,481,483,485,487,490,493,495,497,500,502,504,506,509,512,515,518,520,523,525,528,530],{"class":280,"line":477},8,[216,479,480],{"class":378},"    getSomeData",[216,482,382],{"class":288},[216,484,298],{"class":385},[216,486,388],{"class":292},[216,488,489],{"class":362},"async",[216,491,492],{"class":288}," (",[216,494,394],{"class":393},[216,496,295],{"class":288},[216,498,499],{"class":393}," id",[216,501,382],{"class":288},[216,503,405],{"class":404},[216,505,417],{"class":288},[216,507,508],{"class":404}," Data",[216,510,511],{"class":288}," |",[216,513,514],{"class":404}," RpcError",[216,516,517],{"class":288},"\u003C",[216,519,314],{"class":288},[216,521,522],{"class":310},"data-not-found",[216,524,314],{"class":288},[216,526,527],{"class":288},">",[216,529,422],{"class":362},[216,531,372],{"class":288},[216,533,535,538,541,544,547,549,551,554,556,559,561],{"class":280,"line":534},9,[216,536,537],{"class":362},"        const",[216,539,540],{"class":292}," data",[216,542,543],{"class":288}," =",[216,545,546],{"class":284}," await",[216,548,333],{"class":292},[216,550,457],{"class":288},[216,552,553],{"class":385},"getData",[216,555,388],{"class":378},[216,557,558],{"class":292},"id",[216,560,471],{"class":378},[216,562,317],{"class":288},[216,564,566,568,570,573,576,578,580,583,586,588,590,593,595,597,600,602,604,606,608,610,612],{"class":280,"line":565},10,[216,567,430],{"class":284},[216,569,540],{"class":292},[216,571,572],{"class":288}," ||",[216,574,575],{"class":288}," new",[216,577,514],{"class":385},[216,579,388],{"class":378},[216,581,582],{"class":288},"{",[216,584,585],{"class":378},"publicMessage",[216,587,382],{"class":288},[216,589,307],{"class":288},[216,591,592],{"class":310},"Data not found",[216,594,314],{"class":288},[216,596,295],{"class":288},[216,598,599],{"class":378}," type",[216,601,382],{"class":288},[216,603,307],{"class":288},[216,605,522],{"class":310},[216,607,314],{"class":288},[216,609,301],{"class":288},[216,611,471],{"class":378},[216,613,317],{"class":288},[216,615,617,619,621],{"class":280,"line":616},11,[216,618,468],{"class":288},[216,620,471],{"class":292},[216,622,474],{"class":288},[216,624,626,628,631,634],{"class":280,"line":625},12,[216,627,301],{"class":288},[216,629,630],{"class":284}," satisfies",[216,632,633],{"class":404}," Routes",[216,635,317],{"class":288},[637,638,639,652],"note",{},[640,641,642,646,649,650],"p",{},[643,644,645],"strong",{},"Why return errors instead of throwing?",[647,648],"br",{},"\nReturned errors are part of the function signature, giving the client full type information about possible error types and their data. The client can then handle each error type with autocompletion and type checking.\n",[647,651],{},[640,653,654],{},"⚠️ Thrown errors are not strongly typed and should be treated as unexpected errors (not part of the Business logic).",[656,657],"hr",{},[201,659,661],{"id":660},"jargon","Jargon",[663,664,667,672,682,687,692],"card-group",{"className":665},[666],"md:grid-cols-3",[668,669,671],"card",{"icon":670,"title":38,"to":39},"i-lucide-route","Methods that can be called remotely and have a URL assigned.",[668,673,676,677,681],{"icon":674,"title":675,"to":43},"i-lucide-link","MiddleFns","Auxiliary or ",[216,678,680],{"className":679},[219],"(middleware)"," functions that get executed before or after a route. MiddleFns can send\u002Freceive data but cannot be called directly.",[668,683,686],{"icon":684,"title":685,"to":43},"i-lucide-ellipsis","Execution Chain","Ordered list of all the methods to be executed when calling a route. Each Execution Chain can contain multiple MiddleFns but a single Route method.",[668,688,691],{"icon":689,"title":690,"to":39},"i-lucide-box","Call Context","The context passed to every route or middleFn method, contains data like request, response, and context data. It is always the first parameter of any route or middleFn handler.",[668,693,694],{"icon":102,"title":101,"to":103},"mion uses @mionjs\u002Frun-types for automatic validation and serialization. When TypeScript gets compiled, extra bytecode is generated containing type metadata that can later be accessed at runtime and used for validation, serialization, and many other extra functionality.",[656,696],{},[201,698,700],{"id":699},"powered-by-run-types","Powered by run-types",[640,702,703,704,707],{},"mion uses ",[276,705,706],{},"@mionjs\u002Frun-types"," for automatic validation and serialization. When TypeScript is compiled, type metadata is extracted and used at runtime — no schemas to define or maintain.",[640,709,710],{},[643,711,712],{},"What happens automatically:",[206,714,715],{"type":208},[210,716,717,724,731,738],{},[213,718,719,723],{},[216,720,722],{"className":721},[219],"Validation:"," All route\u002FmiddleFn parameters are validated before execution",[213,725,726,730],{},[216,727,729],{"className":728},[219],"JSON Serialization:"," Complex types (Date, Map, Set, BigInt) are serialized correctly",[213,732,733,737],{},[216,734,736],{"className":735},[219],"Type Errors:"," Detailed error messages when validation fails",[213,739,740,744],{},[216,741,743],{"className":742},[219],"Zero Configuration:"," Works out of the box with your TypeScript types",[269,746,748],{"className":271,"code":747,"language":273,"meta":274,"style":274},"import {Routes, route} from '@mionjs\u002Frouter';\nimport {memoryStoreService} from '.\u002Ffull-example.app.ts';\n\n\u002F\u002F Your TypeScript types ARE the validation schema\ninterface User {\n    id: string;\n    email: string;\n    age: number;\n    birthDate: Date;\n    tags: Set\u003Cstring>;\n}\n\ntype NewUser = Omit\u003CUser, 'id'>;\n\n\u002F\u002F mion automatically:\n\u002F\u002F 1. Restores Date and Set from JSON\n\u002F\u002F 2. Validates user parameter\nconst routes = {\n    createUser: route((ctx, user: NewUser): User => {\n        \u002F\u002F user is already validated and types are restored\n        console.log(user.birthDate instanceof Date); \u002F\u002F true\n        console.log(user.tags instanceof Set); \u002F\u002F true\n        return memoryStoreService.createUser(user);\n    }),\n} satisfies Routes;\n",[276,749,750,774,794,798,804,814,825,836,848,860,878,883,887,916,921,927,933,939,951,984,990,1024,1052,1073,1082],{"__ignoreMap":274},[216,751,752,754,756,758,760,762,764,766,768,770,772],{"class":280,"line":281},[216,753,285],{"class":284},[216,755,289],{"class":288},[216,757,38],{"class":292},[216,759,295],{"class":288},[216,761,298],{"class":292},[216,763,301],{"class":288},[216,765,304],{"class":284},[216,767,307],{"class":288},[216,769,311],{"class":310},[216,771,314],{"class":288},[216,773,317],{"class":288},[216,775,776,778,780,782,784,786,788,790,792],{"class":280,"line":320},[216,777,285],{"class":284},[216,779,289],{"class":288},[216,781,327],{"class":292},[216,783,301],{"class":288},[216,785,304],{"class":284},[216,787,307],{"class":288},[216,789,342],{"class":310},[216,791,314],{"class":288},[216,793,317],{"class":288},[216,795,796],{"class":280,"line":349},[216,797,353],{"emptyLinePlaceholder":352},[216,799,800],{"class":280,"line":356},[216,801,803],{"class":802},"sHwdD","\u002F\u002F Your TypeScript types ARE the validation schema\n",[216,805,806,809,812],{"class":280,"line":375},[216,807,808],{"class":362},"interface",[216,810,811],{"class":404}," User",[216,813,372],{"class":288},[216,815,816,819,821,823],{"class":280,"line":427},[216,817,818],{"class":378},"    id",[216,820,382],{"class":288},[216,822,405],{"class":404},[216,824,317],{"class":288},[216,826,827,830,832,834],{"class":280,"line":465},[216,828,829],{"class":378},"    email",[216,831,382],{"class":288},[216,833,405],{"class":404},[216,835,317],{"class":288},[216,837,838,841,843,846],{"class":280,"line":477},[216,839,840],{"class":378},"    age",[216,842,382],{"class":288},[216,844,845],{"class":404}," number",[216,847,317],{"class":288},[216,849,850,853,855,858],{"class":280,"line":534},[216,851,852],{"class":378},"    birthDate",[216,854,382],{"class":288},[216,856,857],{"class":404}," Date",[216,859,317],{"class":288},[216,861,862,865,867,870,872,875],{"class":280,"line":565},[216,863,864],{"class":378},"    tags",[216,866,382],{"class":288},[216,868,869],{"class":404}," Set",[216,871,517],{"class":288},[216,873,874],{"class":404},"string",[216,876,877],{"class":288},">;\n",[216,879,880],{"class":280,"line":616},[216,881,882],{"class":288},"}\n",[216,884,885],{"class":280,"line":625},[216,886,353],{"emptyLinePlaceholder":352},[216,888,890,893,896,898,901,903,906,908,910,912,914],{"class":280,"line":889},13,[216,891,892],{"class":362},"type",[216,894,895],{"class":404}," NewUser",[216,897,543],{"class":288},[216,899,900],{"class":404}," Omit",[216,902,517],{"class":288},[216,904,905],{"class":404},"User",[216,907,295],{"class":288},[216,909,307],{"class":288},[216,911,558],{"class":310},[216,913,314],{"class":288},[216,915,877],{"class":288},[216,917,919],{"class":280,"line":918},14,[216,920,353],{"emptyLinePlaceholder":352},[216,922,924],{"class":280,"line":923},15,[216,925,926],{"class":802},"\u002F\u002F mion automatically:\n",[216,928,930],{"class":280,"line":929},16,[216,931,932],{"class":802},"\u002F\u002F 1. Restores Date and Set from JSON\n",[216,934,936],{"class":280,"line":935},17,[216,937,938],{"class":802},"\u002F\u002F 2. Validates user parameter\n",[216,940,942,945,947,949],{"class":280,"line":941},18,[216,943,944],{"class":362},"const",[216,946,366],{"class":292},[216,948,369],{"class":288},[216,950,372],{"class":288},[216,952,954,957,959,961,963,965,967,969,972,974,976,978,980,982],{"class":280,"line":953},19,[216,955,956],{"class":378},"    createUser",[216,958,382],{"class":288},[216,960,298],{"class":385},[216,962,388],{"class":292},[216,964,388],{"class":288},[216,966,394],{"class":393},[216,968,295],{"class":288},[216,970,971],{"class":393}," user",[216,973,382],{"class":288},[216,975,895],{"class":404},[216,977,417],{"class":288},[216,979,811],{"class":404},[216,981,422],{"class":362},[216,983,372],{"class":288},[216,985,987],{"class":280,"line":986},20,[216,988,989],{"class":802},"        \u002F\u002F user is already validated and types are restored\n",[216,991,993,996,998,1001,1003,1006,1008,1011,1014,1016,1018,1021],{"class":280,"line":992},21,[216,994,995],{"class":292},"        console",[216,997,457],{"class":288},[216,999,1000],{"class":385},"log",[216,1002,388],{"class":378},[216,1004,1005],{"class":292},"user",[216,1007,457],{"class":288},[216,1009,1010],{"class":292},"birthDate",[216,1012,1013],{"class":288}," instanceof",[216,1015,857],{"class":404},[216,1017,471],{"class":378},[216,1019,1020],{"class":288},";",[216,1022,1023],{"class":802}," \u002F\u002F true\n",[216,1025,1027,1029,1031,1033,1035,1037,1039,1042,1044,1046,1048,1050],{"class":280,"line":1026},22,[216,1028,995],{"class":292},[216,1030,457],{"class":288},[216,1032,1000],{"class":385},[216,1034,388],{"class":378},[216,1036,1005],{"class":292},[216,1038,457],{"class":288},[216,1040,1041],{"class":292},"tags",[216,1043,1013],{"class":288},[216,1045,869],{"class":404},[216,1047,471],{"class":378},[216,1049,1020],{"class":288},[216,1051,1023],{"class":802},[216,1053,1055,1057,1060,1062,1065,1067,1069,1071],{"class":280,"line":1054},23,[216,1056,430],{"class":284},[216,1058,1059],{"class":292}," memoryStoreService",[216,1061,457],{"class":288},[216,1063,1064],{"class":385},"createUser",[216,1066,388],{"class":378},[216,1068,1005],{"class":292},[216,1070,471],{"class":378},[216,1072,317],{"class":288},[216,1074,1076,1078,1080],{"class":280,"line":1075},24,[216,1077,468],{"class":288},[216,1079,471],{"class":292},[216,1081,474],{"class":288},[216,1083,1085,1087,1089,1091],{"class":280,"line":1084},25,[216,1086,301],{"class":288},[216,1088,630],{"class":284},[216,1090,633],{"class":404},[216,1092,317],{"class":288},[1094,1095],"read-more",{"title":1096,"to":103},"Learn more about run-types",[656,1098],{},[201,1100,1102],{"id":1101},"rpc-vs-rest","RPC vs REST",[640,1104,1105],{},"Some advantages of an RPC architecture:",[206,1107,1108],{"type":208},[210,1109,1110,1116,1122],{},[213,1111,1112],{},[216,1113,1115],{"className":1114},[219],"Type Safety",[213,1117,1118],{},[216,1119,1121],{"className":1120},[219],"Fewer abstractions",[213,1123,1124],{},[216,1125,1127],{"className":1126},[219],"Better client-server integration",[640,1129,1130],{},"For more detailed insights into different API types and their pros and cons, check out Nate Barbettini's presentation (API Throw-down: RPC vs REST vs GraphQL)",[1132,1133],"iframe",{"width":1134,"height":1135,"src":1136,"title":1137,"frameBorder":1138,"allow":1139,"allowFullScreen":352},"100%",400,"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FIvsANO0qZEg","API Throw-down: RPC vs REST vs GraphQL","0","accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",[1141,1142,1143],"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 .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 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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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}","Core concepts and terminology used in mion APIs.","md",null,{"toc":26},{"title":34,"description":1144},"opQSwKmJFjAcybo8BOeOpBeoPBS_dcqYC-S24P4BhGY",[1151,1153],{"title":23,"path":24,"stem":25,"description":1152,"children":-1},"Upcoming features and improvements for mion.",{"title":38,"path":39,"stem":40,"description":1154,"children":-1},"Learn how to define and register routes in mion APIs.",1778674527217]