[{"data":1,"prerenderedAt":1644},["ShallowReactive",2],{"navigation_docs":3,"-benchmarks-heavy-validation":195,"-benchmarks-heavy-validation-surround":1641},[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":192,"body":197,"description":1635,"extension":1636,"links":1637,"meta":1638,"navigation":606,"path":193,"seo":1639,"stem":194,"__hash__":1640},"docs\u002F7.benchmarks\u002F3.heavy-validation.md",{"type":198,"value":199},"minimark",[200,213,228,233,244,1169,1174,1182,1187,1194,1197,1200,1234,1239,1243,1247,1250,1254,1257,1261,1264,1268,1271,1275,1625,1631],[201,202,203,204,212],"p",{},"These benchmarks are based on the ",[205,206,211],"a",{"href":207,"rel":208,"target":210},"https:\u002F\u002Fgithub.com\u002Ffastify\u002Fbenchmarks",[209],"nofollow","_blank","Fastify benchmarks"," repo. Our goal is to perform similarly to Fastify as we consider it the industry standard in terms of performance.",[214,215,216,220,221],"tip",{},[217,218,219],"strong",{},"Update User"," benchmark involves heavy validation and serialization on top of routing.\nIt showcases the a performance comparing of frameworks like Zod and TypeBox vs ",[205,222,224],{"href":223},"..\u002Frun-types\u002Foverview",[225,226,227],"code",{},"@mionjs\u002Ftun-types",[229,230,232],"h2",{"id":231},"what-is-tested","What is tested?",[201,234,235,236,239,240,243],{},"The test consists of an ",[225,237,238],{},"updateUser"," request with a ",[217,241,242],{},"complex User model (~1KB payload)"," that includes:",[245,246,251],"pre",{"className":247,"code":248,"language":249,"meta":250,"style":250},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export interface User {\n  id: number;\n  username: string;\n  email: string;\n  profile: {\n    firstName: string;\n    lastName: string;\n    displayName: string;\n    bio?: string;\n    avatarUrl?: string;\n    dateOfBirth: Date;\n  };\n  role: \"admin\" | \"user\" | \"guest\" | \"moderator\";\n  status: \"active\" | \"suspended\" | \"pending_verification\" | \"deactivated\";\n  address: Address;\n  paymentMethods: PaymentMethod[]; \u002F\u002F Discriminated union\n  preferences: UserPreferences;\n  createdAt: Date;\n  updatedAt: Date;\n  lastLoginAt?: Date;\n  tags: string[];\n}\n\n\u002F\u002F ### mion ###\n\u002F\u002F the received user by the route is already validated and deserialized\n\u002F\u002F all Date fields are already JS Date objects (not strings from JSON.parse)\nexport const routes: Routes = {\n  updateUser: (ctx, user: User): User => {\n    user.updatedAt = new Date();\n    user.lastLoginAt = new Date();\n    user.profile.displayName = `${user.profile.firstName} ${user.profile.lastName.charAt(0)}.`;\n    return user;\n  },\n};\n\n\u002F\u002F ### Other frameworks (Express, Fastify, Hono, etc.) ###\n\u002F\u002F Use Zod schemas for validation and date coercion\nconst UserSchema = z.object({\n  id: z.number(),\n  username: z.string(),\n  \u002F\u002F ... full schema with nested objects, discriminated unions, etc.\n  createdAt: z.coerce.date(),\n  updatedAt: z.coerce.date(),\n  \u002F\u002F ...\n});\n\napp.post(\"\u002FupdateUser\", function (req, res) {\n  const user = UserSchema.parse(req.body); \u002F\u002F Validates + deserializes dates\n  user.updatedAt = new Date();\n  user.lastLoginAt = new Date();\n  user.profile.displayName = `${user.profile.firstName} ${user.profile.lastName.charAt(0)}.`;\n  res.json(user);\n});\n","ts","",[225,252,253,274,290,303,315,325,337,349,361,374,386,399,405,453,497,510,532,545,557,569,581,595,601,608,614,620,626,647,683,707,727,799,809,815,821,826,832,838,863,882,900,906,929,950,956,965,970,1009,1043,1063,1082,1141,1160],{"__ignoreMap":250},[254,255,258,262,266,270],"span",{"class":256,"line":257},"line",1,[254,259,261],{"class":260},"s7zQu","export",[254,263,265],{"class":264},"spNyl"," interface",[254,267,269],{"class":268},"sBMFI"," User",[254,271,273],{"class":272},"sMK4o"," {\n",[254,275,277,281,284,287],{"class":256,"line":276},2,[254,278,280],{"class":279},"swJcz","  id",[254,282,283],{"class":272},":",[254,285,286],{"class":268}," number",[254,288,289],{"class":272},";\n",[254,291,293,296,298,301],{"class":256,"line":292},3,[254,294,295],{"class":279},"  username",[254,297,283],{"class":272},[254,299,300],{"class":268}," string",[254,302,289],{"class":272},[254,304,306,309,311,313],{"class":256,"line":305},4,[254,307,308],{"class":279},"  email",[254,310,283],{"class":272},[254,312,300],{"class":268},[254,314,289],{"class":272},[254,316,318,321,323],{"class":256,"line":317},5,[254,319,320],{"class":279},"  profile",[254,322,283],{"class":272},[254,324,273],{"class":272},[254,326,328,331,333,335],{"class":256,"line":327},6,[254,329,330],{"class":279},"    firstName",[254,332,283],{"class":272},[254,334,300],{"class":268},[254,336,289],{"class":272},[254,338,340,343,345,347],{"class":256,"line":339},7,[254,341,342],{"class":279},"    lastName",[254,344,283],{"class":272},[254,346,300],{"class":268},[254,348,289],{"class":272},[254,350,352,355,357,359],{"class":256,"line":351},8,[254,353,354],{"class":279},"    displayName",[254,356,283],{"class":272},[254,358,300],{"class":268},[254,360,289],{"class":272},[254,362,364,367,370,372],{"class":256,"line":363},9,[254,365,366],{"class":279},"    bio",[254,368,369],{"class":272},"?:",[254,371,300],{"class":268},[254,373,289],{"class":272},[254,375,377,380,382,384],{"class":256,"line":376},10,[254,378,379],{"class":279},"    avatarUrl",[254,381,369],{"class":272},[254,383,300],{"class":268},[254,385,289],{"class":272},[254,387,389,392,394,397],{"class":256,"line":388},11,[254,390,391],{"class":279},"    dateOfBirth",[254,393,283],{"class":272},[254,395,396],{"class":268}," Date",[254,398,289],{"class":272},[254,400,402],{"class":256,"line":401},12,[254,403,404],{"class":272},"  };\n",[254,406,408,411,413,416,420,423,426,428,431,433,435,437,440,442,444,446,449,451],{"class":256,"line":407},13,[254,409,410],{"class":279},"  role",[254,412,283],{"class":272},[254,414,415],{"class":272}," \"",[254,417,419],{"class":418},"sfazB","admin",[254,421,422],{"class":272},"\"",[254,424,425],{"class":272}," |",[254,427,415],{"class":272},[254,429,430],{"class":418},"user",[254,432,422],{"class":272},[254,434,425],{"class":272},[254,436,415],{"class":272},[254,438,439],{"class":418},"guest",[254,441,422],{"class":272},[254,443,425],{"class":272},[254,445,415],{"class":272},[254,447,448],{"class":418},"moderator",[254,450,422],{"class":272},[254,452,289],{"class":272},[254,454,456,459,461,463,466,468,470,472,475,477,479,481,484,486,488,490,493,495],{"class":256,"line":455},14,[254,457,458],{"class":279},"  status",[254,460,283],{"class":272},[254,462,415],{"class":272},[254,464,465],{"class":418},"active",[254,467,422],{"class":272},[254,469,425],{"class":272},[254,471,415],{"class":272},[254,473,474],{"class":418},"suspended",[254,476,422],{"class":272},[254,478,425],{"class":272},[254,480,415],{"class":272},[254,482,483],{"class":418},"pending_verification",[254,485,422],{"class":272},[254,487,425],{"class":272},[254,489,415],{"class":272},[254,491,492],{"class":418},"deactivated",[254,494,422],{"class":272},[254,496,289],{"class":272},[254,498,500,503,505,508],{"class":256,"line":499},15,[254,501,502],{"class":279},"  address",[254,504,283],{"class":272},[254,506,507],{"class":268}," Address",[254,509,289],{"class":272},[254,511,513,516,518,521,525,528],{"class":256,"line":512},16,[254,514,515],{"class":279},"  paymentMethods",[254,517,283],{"class":272},[254,519,520],{"class":268}," PaymentMethod",[254,522,524],{"class":523},"sTEyZ","[]",[254,526,527],{"class":272},";",[254,529,531],{"class":530},"sHwdD"," \u002F\u002F Discriminated union\n",[254,533,535,538,540,543],{"class":256,"line":534},17,[254,536,537],{"class":279},"  preferences",[254,539,283],{"class":272},[254,541,542],{"class":268}," UserPreferences",[254,544,289],{"class":272},[254,546,548,551,553,555],{"class":256,"line":547},18,[254,549,550],{"class":279},"  createdAt",[254,552,283],{"class":272},[254,554,396],{"class":268},[254,556,289],{"class":272},[254,558,560,563,565,567],{"class":256,"line":559},19,[254,561,562],{"class":279},"  updatedAt",[254,564,283],{"class":272},[254,566,396],{"class":268},[254,568,289],{"class":272},[254,570,572,575,577,579],{"class":256,"line":571},20,[254,573,574],{"class":279},"  lastLoginAt",[254,576,369],{"class":272},[254,578,396],{"class":268},[254,580,289],{"class":272},[254,582,584,587,589,591,593],{"class":256,"line":583},21,[254,585,586],{"class":279},"  tags",[254,588,283],{"class":272},[254,590,300],{"class":268},[254,592,524],{"class":523},[254,594,289],{"class":272},[254,596,598],{"class":256,"line":597},22,[254,599,600],{"class":272},"}\n",[254,602,604],{"class":256,"line":603},23,[254,605,607],{"emptyLinePlaceholder":606},true,"\n",[254,609,611],{"class":256,"line":610},24,[254,612,613],{"class":530},"\u002F\u002F ### mion ###\n",[254,615,617],{"class":256,"line":616},25,[254,618,619],{"class":530},"\u002F\u002F the received user by the route is already validated and deserialized\n",[254,621,623],{"class":256,"line":622},26,[254,624,625],{"class":530},"\u002F\u002F all Date fields are already JS Date objects (not strings from JSON.parse)\n",[254,627,629,631,634,637,639,642,645],{"class":256,"line":628},27,[254,630,261],{"class":260},[254,632,633],{"class":264}," const",[254,635,636],{"class":523}," routes",[254,638,283],{"class":272},[254,640,641],{"class":268}," Routes",[254,643,644],{"class":272}," =",[254,646,273],{"class":272},[254,648,650,654,656,659,663,666,669,671,673,676,678,681],{"class":256,"line":649},28,[254,651,653],{"class":652},"s2Zo4","  updateUser",[254,655,283],{"class":272},[254,657,658],{"class":272}," (",[254,660,662],{"class":661},"sHdIc","ctx",[254,664,665],{"class":272},",",[254,667,668],{"class":661}," user",[254,670,283],{"class":272},[254,672,269],{"class":268},[254,674,675],{"class":272},"):",[254,677,269],{"class":268},[254,679,680],{"class":264}," =>",[254,682,273],{"class":272},[254,684,686,689,692,695,697,700,702,705],{"class":256,"line":685},29,[254,687,688],{"class":523},"    user",[254,690,691],{"class":272},".",[254,693,694],{"class":523},"updatedAt",[254,696,644],{"class":272},[254,698,699],{"class":272}," new",[254,701,396],{"class":652},[254,703,704],{"class":279},"()",[254,706,289],{"class":272},[254,708,710,712,714,717,719,721,723,725],{"class":256,"line":709},30,[254,711,688],{"class":523},[254,713,691],{"class":272},[254,715,716],{"class":523},"lastLoginAt",[254,718,644],{"class":272},[254,720,699],{"class":272},[254,722,396],{"class":652},[254,724,704],{"class":279},[254,726,289],{"class":272},[254,728,730,732,734,737,739,742,744,747,749,751,753,755,758,761,764,766,768,770,772,775,777,780,783,787,790,792,794,797],{"class":256,"line":729},31,[254,731,688],{"class":523},[254,733,691],{"class":272},[254,735,736],{"class":523},"profile",[254,738,691],{"class":272},[254,740,741],{"class":523},"displayName",[254,743,644],{"class":272},[254,745,746],{"class":272}," `${",[254,748,430],{"class":523},[254,750,691],{"class":272},[254,752,736],{"class":523},[254,754,691],{"class":272},[254,756,757],{"class":523},"firstName",[254,759,760],{"class":272},"}",[254,762,763],{"class":272}," ${",[254,765,430],{"class":523},[254,767,691],{"class":272},[254,769,736],{"class":523},[254,771,691],{"class":272},[254,773,774],{"class":523},"lastName",[254,776,691],{"class":272},[254,778,779],{"class":652},"charAt",[254,781,782],{"class":523},"(",[254,784,786],{"class":785},"sbssI","0",[254,788,789],{"class":523},")",[254,791,760],{"class":272},[254,793,691],{"class":418},[254,795,796],{"class":272},"`",[254,798,289],{"class":272},[254,800,802,805,807],{"class":256,"line":801},32,[254,803,804],{"class":260},"    return",[254,806,668],{"class":523},[254,808,289],{"class":272},[254,810,812],{"class":256,"line":811},33,[254,813,814],{"class":272},"  },\n",[254,816,818],{"class":256,"line":817},34,[254,819,820],{"class":272},"};\n",[254,822,824],{"class":256,"line":823},35,[254,825,607],{"emptyLinePlaceholder":606},[254,827,829],{"class":256,"line":828},36,[254,830,831],{"class":530},"\u002F\u002F ### Other frameworks (Express, Fastify, Hono, etc.) ###\n",[254,833,835],{"class":256,"line":834},37,[254,836,837],{"class":530},"\u002F\u002F Use Zod schemas for validation and date coercion\n",[254,839,841,844,847,850,853,855,858,860],{"class":256,"line":840},38,[254,842,843],{"class":264},"const",[254,845,846],{"class":523}," UserSchema ",[254,848,849],{"class":272},"=",[254,851,852],{"class":523}," z",[254,854,691],{"class":272},[254,856,857],{"class":652},"object",[254,859,782],{"class":523},[254,861,862],{"class":272},"{\n",[254,864,866,868,870,872,874,877,879],{"class":256,"line":865},39,[254,867,280],{"class":279},[254,869,283],{"class":272},[254,871,852],{"class":523},[254,873,691],{"class":272},[254,875,876],{"class":652},"number",[254,878,704],{"class":523},[254,880,881],{"class":272},",\n",[254,883,885,887,889,891,893,896,898],{"class":256,"line":884},40,[254,886,295],{"class":279},[254,888,283],{"class":272},[254,890,852],{"class":523},[254,892,691],{"class":272},[254,894,895],{"class":652},"string",[254,897,704],{"class":523},[254,899,881],{"class":272},[254,901,903],{"class":256,"line":902},41,[254,904,905],{"class":530},"  \u002F\u002F ... full schema with nested objects, discriminated unions, etc.\n",[254,907,909,911,913,915,917,920,922,925,927],{"class":256,"line":908},42,[254,910,550],{"class":279},[254,912,283],{"class":272},[254,914,852],{"class":523},[254,916,691],{"class":272},[254,918,919],{"class":523},"coerce",[254,921,691],{"class":272},[254,923,924],{"class":652},"date",[254,926,704],{"class":523},[254,928,881],{"class":272},[254,930,932,934,936,938,940,942,944,946,948],{"class":256,"line":931},43,[254,933,562],{"class":279},[254,935,283],{"class":272},[254,937,852],{"class":523},[254,939,691],{"class":272},[254,941,919],{"class":523},[254,943,691],{"class":272},[254,945,924],{"class":652},[254,947,704],{"class":523},[254,949,881],{"class":272},[254,951,953],{"class":256,"line":952},44,[254,954,955],{"class":530},"  \u002F\u002F ...\n",[254,957,959,961,963],{"class":256,"line":958},45,[254,960,760],{"class":272},[254,962,789],{"class":523},[254,964,289],{"class":272},[254,966,968],{"class":256,"line":967},46,[254,969,607],{"emptyLinePlaceholder":606},[254,971,973,976,978,981,983,985,988,990,992,995,997,1000,1002,1005,1007],{"class":256,"line":972},47,[254,974,975],{"class":523},"app",[254,977,691],{"class":272},[254,979,980],{"class":652},"post",[254,982,782],{"class":523},[254,984,422],{"class":272},[254,986,987],{"class":418},"\u002FupdateUser",[254,989,422],{"class":272},[254,991,665],{"class":272},[254,993,994],{"class":264}," function",[254,996,658],{"class":272},[254,998,999],{"class":661},"req",[254,1001,665],{"class":272},[254,1003,1004],{"class":661}," res",[254,1006,789],{"class":272},[254,1008,273],{"class":272},[254,1010,1012,1015,1017,1019,1022,1024,1027,1029,1031,1033,1036,1038,1040],{"class":256,"line":1011},48,[254,1013,1014],{"class":264},"  const",[254,1016,668],{"class":523},[254,1018,644],{"class":272},[254,1020,1021],{"class":523}," UserSchema",[254,1023,691],{"class":272},[254,1025,1026],{"class":652},"parse",[254,1028,782],{"class":279},[254,1030,999],{"class":523},[254,1032,691],{"class":272},[254,1034,1035],{"class":523},"body",[254,1037,789],{"class":279},[254,1039,527],{"class":272},[254,1041,1042],{"class":530}," \u002F\u002F Validates + deserializes dates\n",[254,1044,1046,1049,1051,1053,1055,1057,1059,1061],{"class":256,"line":1045},49,[254,1047,1048],{"class":523},"  user",[254,1050,691],{"class":272},[254,1052,694],{"class":523},[254,1054,644],{"class":272},[254,1056,699],{"class":272},[254,1058,396],{"class":652},[254,1060,704],{"class":279},[254,1062,289],{"class":272},[254,1064,1066,1068,1070,1072,1074,1076,1078,1080],{"class":256,"line":1065},50,[254,1067,1048],{"class":523},[254,1069,691],{"class":272},[254,1071,716],{"class":523},[254,1073,644],{"class":272},[254,1075,699],{"class":272},[254,1077,396],{"class":652},[254,1079,704],{"class":279},[254,1081,289],{"class":272},[254,1083,1085,1087,1089,1091,1093,1095,1097,1099,1101,1103,1105,1107,1109,1111,1113,1115,1117,1119,1121,1123,1125,1127,1129,1131,1133,1135,1137,1139],{"class":256,"line":1084},51,[254,1086,1048],{"class":523},[254,1088,691],{"class":272},[254,1090,736],{"class":523},[254,1092,691],{"class":272},[254,1094,741],{"class":523},[254,1096,644],{"class":272},[254,1098,746],{"class":272},[254,1100,430],{"class":523},[254,1102,691],{"class":272},[254,1104,736],{"class":523},[254,1106,691],{"class":272},[254,1108,757],{"class":523},[254,1110,760],{"class":272},[254,1112,763],{"class":272},[254,1114,430],{"class":523},[254,1116,691],{"class":272},[254,1118,736],{"class":523},[254,1120,691],{"class":272},[254,1122,774],{"class":523},[254,1124,691],{"class":272},[254,1126,779],{"class":652},[254,1128,782],{"class":523},[254,1130,786],{"class":785},[254,1132,789],{"class":523},[254,1134,760],{"class":272},[254,1136,691],{"class":418},[254,1138,796],{"class":272},[254,1140,289],{"class":272},[254,1142,1144,1147,1149,1152,1154,1156,1158],{"class":256,"line":1143},52,[254,1145,1146],{"class":523},"  res",[254,1148,691],{"class":272},[254,1150,1151],{"class":652},"json",[254,1153,782],{"class":279},[254,1155,430],{"class":523},[254,1157,789],{"class":279},[254,1159,289],{"class":272},[254,1161,1163,1165,1167],{"class":256,"line":1162},53,[254,1164,760],{"class":272},[254,1166,789],{"class":523},[254,1168,289],{"class":272},[1170,1171,1173],"h3",{"id":1172},"notes","Notes",[201,1175,1176,1177,1181],{},"In this benchmark the requests take considerably more time compared with the ",[205,1178,1180],{"href":1179},"hello-world","'hello world'"," benchmark. This is mostly because each request is spending extra time on validation and serialization.",[201,1183,1184],{},[217,1185,1186],{},"For this specific test, the performance of the libraries used for validation and serialization might be more important than the routing itself.",[1188,1189,1190,1191,1193],"note",{},"We can observe the more validation and serialization is required, the more performant mion becomes, this is due to it's highly optimized JIT ",[254,1192,101],{}," functions.",[1195,1196],"spacer",{},[229,1198,178],{"id":1199},"benchmarks",[1201,1202,1203,1210,1219,1225],"ul",{},[1204,1205,1206,1209],"li",{},[217,1207,1208],{},"Machine:"," darwin arm64 | 12 vCPUs | 16.0GB Mem",[1204,1211,1212,1215,1216],{},[217,1213,1214],{},"Node:"," ",[225,1217,1218],{},"v24.13.0",[1204,1220,1221,1224],{},[217,1222,1223],{},"Run:"," Wed Apr 15 2026 22:00:02 GMT+0100 (Irish Standard Time)",[1204,1226,1227,1215,1230,1233],{},[217,1228,1229],{},"Method:",[225,1231,1232],{},"autocannon -c 100 -d 20.102586 -p 1 localhost:3000"," (two rounds; one to warm-up, one to measure)",[1235,1236,1238],"h4",{"id":1237},"req-rs","Req (R\u002Fs)",[1240,1241],"bench-chart",{"id":1242},"update-requests",[1235,1244,1246],{"id":1245},"throughput-mbs","Throughput (Mb\u002Fs)",[1240,1248],{"id":1249},"update-throughput",[1235,1251,1253],{"id":1252},"latency-ms","Latency (ms)",[1240,1255],{"id":1256},"update-latency",[1235,1258,1260],{"id":1259},"max-memory-mb","Max Memory (Mb)",[1240,1262],{"id":1263},"update-max-mem",[1235,1265,1267],{"id":1266},"memory-series-mb","Memory Series (MB)",[1240,1269],{"id":1270},"update-mem-series",[229,1272,1274],{"id":1273},"results-table","Results Table",[1276,1277,1278,1313],"table",{},[1279,1280,1281],"thead",{},[1282,1283,1284,1288,1292,1295,1298,1300,1303,1305,1308,1310],"tr",{},[1285,1286],"th",{"align":1287},"left",[1285,1289,1291],{"align":1290},"right","Version",[1285,1293,1294],{"align":1290},"Router",[1285,1296,1238],{"align":1297},"center",[1285,1299,1253],{"align":1290},[1285,1301,1302],{"align":1290},"Output (Mb\u002Fs)",[1285,1304,1260],{"align":1290},[1285,1306,1307],{"align":1290},"Max Cpu (%)",[1285,1309,54],{"align":1297},[1285,1311,1312],{"align":1287},"Description",[1314,1315,1316,1368,1397,1426,1475,1506,1536,1566,1596],"tbody",{},[1282,1317,1318,1324,1329,1334,1339,1344,1349,1354,1359,1363],{},[1319,1320,1321],"td",{"align":1287},[217,1322,1323],{},"mion.bun",[1319,1325,1326],{"align":1290},[217,1327,1328],{},"0.6.2",[1319,1330,1331],{"align":1290},[217,1332,1333],{},"✓",[1319,1335,1336],{"align":1297},[217,1337,1338],{},"49225.9",[1319,1340,1341],{"align":1290},[217,1342,1343],{},"1.95",[1319,1345,1346],{"align":1290},[217,1347,1348],{},"50.74",[1319,1350,1351],{"align":1290},[217,1352,1353],{},"70",[1319,1355,1356],{"align":1290},[217,1357,1358],{},"101",[1319,1360,1361],{"align":1297},[217,1362,1333],{},[1319,1364,1365],{"align":1287},[217,1366,1367],{},"mion using bun, automatic validation and serialization",[1282,1369,1370,1373,1376,1378,1381,1384,1387,1390,1392,1394],{},[1319,1371,1372],{"align":1287},"hono.bun",[1319,1374,1375],{"align":1290},"3.12.6",[1319,1377,1333],{"align":1290},[1319,1379,1380],{"align":1297},"48727.1",[1319,1382,1383],{"align":1290},"1.96",[1319,1385,1386],{"align":1290},"48.04",[1319,1388,1389],{"align":1290},"85",[1319,1391,1358],{"align":1290},[1319,1393,1333],{"align":1297},[1319,1395,1396],{"align":1287},"hono bun server with Zod validation",[1282,1398,1399,1402,1405,1407,1410,1413,1416,1419,1421,1423],{},[1319,1400,1401],{"align":1287},"elysia.bun",[1319,1403,1404],{"align":1290},"1.0.0",[1319,1406,1333],{"align":1290},[1319,1408,1409],{"align":1297},"40668.8",[1319,1411,1412],{"align":1290},"2.35",[1319,1414,1415],{"align":1290},"40.10",[1319,1417,1418],{"align":1290},"100",[1319,1420,1358],{"align":1290},[1319,1422,1333],{"align":1297},[1319,1424,1425],{"align":1287},"Elysia framework with TypeBox validation",[1282,1427,1428,1433,1437,1441,1446,1451,1456,1461,1466,1470],{},[1319,1429,1430],{"align":1287},[217,1431,1432],{},"mion",[1319,1434,1435],{"align":1290},[217,1436,1328],{},[1319,1438,1439],{"align":1290},[217,1440,1333],{},[1319,1442,1443],{"align":1297},[217,1444,1445],{},"37747.5",[1319,1447,1448],{"align":1290},[217,1449,1450],{},"2.60",[1319,1452,1453],{"align":1290},[217,1454,1455],{},"40.60",[1319,1457,1458],{"align":1290},[217,1459,1460],{},"152",[1319,1462,1463],{"align":1290},[217,1464,1465],{},"116",[1319,1467,1468],{"align":1297},[217,1469,1333],{},[1319,1471,1472],{"align":1287},[217,1473,1474],{},"Automatic validation and serialization out of the box",[1282,1476,1477,1480,1483,1486,1489,1492,1495,1498,1501,1503],{},[1319,1478,1479],{"align":1287},"http-node",[1319,1481,1482],{"align":1290},"16.18.0",[1319,1484,1485],{"align":1290},"✗",[1319,1487,1488],{"align":1297},"36701.8",[1319,1490,1491],{"align":1290},"2.68",[1319,1493,1494],{"align":1290},"38.36",[1319,1496,1497],{"align":1290},"144",[1319,1499,1500],{"align":1290},"106",[1319,1502,1333],{"align":1297},[1319,1504,1505],{"align":1287},"bare node http server with Zod validation",[1282,1507,1508,1511,1514,1516,1519,1522,1525,1528,1531,1533],{},[1319,1509,1510],{"align":1287},"fastify",[1319,1512,1513],{"align":1290},"5.7.4",[1319,1515,1333],{"align":1290},[1319,1517,1518],{"align":1297},"32177.0",[1319,1520,1521],{"align":1290},"3.05",[1319,1523,1524],{"align":1290},"33.66",[1319,1526,1527],{"align":1290},"269",[1319,1529,1530],{"align":1290},"125",[1319,1532,1333],{"align":1297},[1319,1534,1535],{"align":1287},"Fastify with native JSON Schema validation",[1282,1537,1538,1541,1544,1546,1549,1552,1555,1558,1561,1563],{},[1319,1539,1540],{"align":1287},"express",[1319,1542,1543],{"align":1290},"5.2.1",[1319,1545,1333],{"align":1290},[1319,1547,1548],{"align":1297},"28152.4",[1319,1550,1551],{"align":1290},"3.53",[1319,1553,1554],{"align":1290},"29.42",[1319,1556,1557],{"align":1290},"162",[1319,1559,1560],{"align":1290},"109",[1319,1562,1333],{"align":1297},[1319,1564,1565],{"align":1287},"Express with Zod validation",[1282,1567,1568,1571,1574,1576,1579,1582,1585,1588,1591,1593],{},[1319,1569,1570],{"align":1287},"hapi",[1319,1572,1573],{"align":1290},"21.4.4",[1319,1575,1333],{"align":1290},[1319,1577,1578],{"align":1297},"25700.5",[1319,1580,1581],{"align":1290},"3.86",[1319,1583,1584],{"align":1290},"26.86",[1319,1586,1587],{"align":1290},"226",[1319,1589,1590],{"align":1290},"112",[1319,1592,1333],{"align":1297},[1319,1594,1595],{"align":1287},"Hapi with Zod validation",[1282,1597,1598,1601,1603,1605,1608,1611,1614,1617,1620,1622],{},[1319,1599,1600],{"align":1287},"hono",[1319,1602,1375],{"align":1290},[1319,1604,1333],{"align":1290},[1319,1606,1607],{"align":1297},"23521.2",[1319,1609,1610],{"align":1290},"4.73",[1319,1612,1613],{"align":1290},"24.25",[1319,1615,1616],{"align":1290},"614",[1319,1618,1619],{"align":1290},"120",[1319,1621,1333],{"align":1297},[1319,1623,1624],{"align":1287},"hono node server with Zod validation",[1626,1627,1630],"button-link",{"href":1628,"icon":1629,"target":210},"https:\u002F\u002Fgithub.com\u002FMionKit\u002FBenchmarks","grommet-icons:github","Benchmarks Repo",[1632,1633,1634],"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 .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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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);}","Performance benchmarks for an Update User endpoint with heavy validation and serialization.","md",null,{"toc":26},{"title":192,"description":1635},"gW1f108Gq4IXZbif-oGThfZjUH1ytQuFb5g4bo7mm_o",[1642,1637],{"title":188,"path":189,"stem":190,"description":1643,"children":-1},"Performance benchmarks for an Update Simple User endpoint with Lightweight validation and serialization.",1778674524008]