[{"data":1,"prerenderedAt":1044},["ShallowReactive",2],{"navigation":3,"-guide-websocket":234,"-guide-websocket-surround":1039},[4,81,228],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Getting Started","/guide","1.guide/0.index",[9,11,16,21,26,31,36,41,46,51,56,61,66,71,76],{"title":5,"path":6,"stem":7,"icon":10},"ph:book-open-duotone",{"title":12,"path":13,"stem":14,"icon":15},"Migration Guide","/guide/migration","1.guide/00.migration","ri:arrow-right-up-line",{"title":17,"path":18,"stem":19,"icon":20},"Server Utils","/guide/utils","1.guide/1.utils","ri:tools-line",{"title":22,"path":23,"stem":24,"icon":25},"Tasks","/guide/tasks","1.guide/10.tasks","codicon:run-all",{"title":27,"path":28,"stem":29,"icon":30},"Server Routes","/guide/routing","1.guide/2.routing","ri:direction-line",{"title":32,"path":33,"stem":34,"icon":35},"WebSocket","/guide/websocket","1.guide/3.websocket","cib:socket-io",{"title":37,"path":38,"stem":39,"icon":40},"KV Storage","/guide/storage","1.guide/4.storage","carbon:datastore",{"title":42,"path":43,"stem":44,"icon":45},"SQL Database","/guide/database","1.guide/5.database","ri:database-2-line",{"title":47,"path":48,"stem":49,"icon":50},"Cache","/guide/cache","1.guide/6.cache","ri:speed-line",{"title":52,"path":53,"stem":54,"icon":55},"Fetch","/guide/fetch","1.guide/7.fetch","ri:global-line",{"title":57,"path":58,"stem":59,"icon":60},"Assets","/guide/assets","1.guide/8.assets","ri:image-2-line",{"title":62,"path":63,"stem":64,"icon":65},"Plugins","/guide/plugins","1.guide/9.plugins","ri:plug-line",{"title":67,"path":68,"stem":69,"icon":70},"Configuration","/guide/configuration","1.guide/97.configuration","ri:settings-3-line",{"title":72,"path":73,"stem":74,"icon":75},"TypeScript","/guide/typescript","1.guide/98.typescript","tabler:brand-typescript",{"title":77,"path":78,"stem":79,"icon":80},"Nightly Channel","/guide/nightly","1.guide/99.nightly","ri:moon-fill",{"title":82,"path":83,"stem":84,"children":85,"icon":87},"Overview","/deploy","2.deploy/0.index",[86,88,92,122,127],{"title":82,"path":83,"stem":84,"icon":87},"ri:upload-cloud-2-line",{"title":89,"path":90,"stem":91,"icon":55},"Edge Workers","/deploy/workers","2.deploy/1.workers",{"title":93,"path":94,"stem":95,"children":96,"page":121},"Runtimes","/deploy/runtimes","2.deploy/10.runtimes",[97,102,106,111,116],{"title":98,"path":99,"stem":100,"icon":101},"Node.js","/deploy/runtimes/node","2.deploy/10.runtimes/1.node","akar-icons:node-fill",{"title":103,"path":104,"stem":105,"icon":25},"Dir","/deploy/runtimes/_dir","2.deploy/10.runtimes/_dir",{"title":107,"path":108,"stem":109,"icon":110},"WinterJS","/deploy/runtimes/_winterjs","2.deploy/10.runtimes/_winterjs","game-icons:cold-heart",{"title":112,"path":113,"stem":114,"icon":115},"Bun","/deploy/runtimes/bun","2.deploy/10.runtimes/bun","simple-icons:bun",{"title":117,"path":118,"stem":119,"icon":120},"Deno","/deploy/runtimes/deno","2.deploy/10.runtimes/deno","simple-icons:deno",false,{"title":123,"path":124,"stem":125,"icon":126},"Custom Preset","/deploy/custom-presets","2.deploy/2.custom-presets","ri:file-code-line",{"title":128,"path":129,"stem":130,"children":131,"page":121},"Providers","/deploy/providers","2.deploy/20.providers",[132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224],{"title":103,"path":133,"stem":134,"icon":135},"/deploy/providers/_dir","2.deploy/20.providers/_dir","tdesign:cloud",{"title":137,"path":138,"stem":139},"Alwaysdata","/deploy/providers/alwaysdata","2.deploy/20.providers/alwaysdata",{"title":141,"path":142,"stem":143},"AWS Lambda","/deploy/providers/aws","2.deploy/20.providers/aws",{"title":145,"path":146,"stem":147},"AWS Amplify","/deploy/providers/aws-amplify","2.deploy/20.providers/aws-amplify",{"title":149,"path":150,"stem":151},"Azure","/deploy/providers/azure","2.deploy/20.providers/azure",{"title":153,"path":154,"stem":155},"Cleavr","/deploy/providers/cleavr","2.deploy/20.providers/cleavr",{"title":157,"path":158,"stem":159},"Cloudflare","/deploy/providers/cloudflare","2.deploy/20.providers/cloudflare",{"title":161,"path":162,"stem":163},"Deno Deploy","/deploy/providers/deno-deploy","2.deploy/20.providers/deno-deploy",{"title":165,"path":166,"stem":167},"DigitalOcean","/deploy/providers/digitalocean","2.deploy/20.providers/digitalocean",{"title":169,"path":170,"stem":171},"Firebase","/deploy/providers/firebase","2.deploy/20.providers/firebase",{"title":173,"path":174,"stem":175},"Flightcontrol","/deploy/providers/flightcontrol","2.deploy/20.providers/flightcontrol",{"title":177,"path":178,"stem":179},"Genezio","/deploy/providers/genezio","2.deploy/20.providers/genezio",{"title":181,"path":182,"stem":183},"GitHub Pages","/deploy/providers/github-pages","2.deploy/20.providers/github-pages",{"title":185,"path":186,"stem":187},"GitLab Pages","/deploy/providers/gitlab-pages","2.deploy/20.providers/gitlab-pages",{"title":189,"path":190,"stem":191},"Heroku","/deploy/providers/heroku","2.deploy/20.providers/heroku",{"title":193,"path":194,"stem":195},"IIS","/deploy/providers/iis","2.deploy/20.providers/iis",{"title":197,"path":198,"stem":199},"Koyeb","/deploy/providers/koyeb","2.deploy/20.providers/koyeb",{"title":201,"path":202,"stem":203},"Netlify","/deploy/providers/netlify","2.deploy/20.providers/netlify",{"title":205,"path":206,"stem":207},"Platform.sh","/deploy/providers/platform-sh","2.deploy/20.providers/platform-sh",{"title":209,"path":210,"stem":211},"Render.com","/deploy/providers/render","2.deploy/20.providers/render",{"title":213,"path":214,"stem":215},"StormKit","/deploy/providers/stormkit","2.deploy/20.providers/stormkit",{"title":217,"path":218,"stem":219},"Vercel","/deploy/providers/vercel","2.deploy/20.providers/vercel",{"title":221,"path":222,"stem":223},"Zeabur","/deploy/providers/zeabur","2.deploy/20.providers/zeabur",{"title":225,"path":226,"stem":227},"Zerops","/deploy/providers/zerops","2.deploy/20.providers/zerops",{"title":229,"path":230,"stem":231,"children":232,"icon":70},"Config","/config","3.config/0.index",[233],{"title":229,"path":230,"stem":231,"icon":70},{"id":235,"title":32,"body":236,"description":1033,"extension":1034,"meta":1035,"navigation":1036,"path":33,"seo":1037,"stem":34,"__hash__":1038},"content/1.guide/3.websocket.md",{"type":237,"value":238,"toc":1026,"icon":35},"minimark",[239,262,266,269,274,286,294,404,408,414,427,660,666,673,722,729,740,744,752,757,763,948,951,1018,1022],[240,241,242,243,249,250,255,256,261],"p",{},"Nitro natively supports runtime agnostic ",[244,245,32],"a",{"href":246,"rel":247},"https://developer.mozilla.org/en-US/docs/Web/API/WebSocket",[248],"nofollow"," API using ",[244,251,254],{"href":252,"rel":253},"https://crossws.h3.dev/",[248],"CrossWS"," and ",[244,257,260],{"href":258,"rel":259},"https://h3.dev/guide/advanced/websocket",[248],"H3 WebSocket",".",[263,264],"read-more",{"title":265,"to":246},"WebSocket in MDN",[263,267],{"title":254,"to":268},"https://crossws.unjs.io/",[270,271,273],"h2",{"id":272},"opt-in-to-the-experimental-feature","Opt-in to the experimental feature",[275,276,277],"important",{},[240,278,279,280,285],{},"\nWebSockets support is currently experimental. See ",[244,281,284],{"href":282,"rel":283},"https://github.com/nitrojs/nitro/issues/2171",[248],"nitrojs/nitro#2171"," for platform support status.",[240,287,288,289,293],{},"In order to enable websocket support you need to enable the experimental ",[290,291,292],"code",{},"websocket"," feature flag.",[295,296,297,355],"code-group",{},[298,299,305],"pre",{"className":300,"code":301,"filename":302,"language":303,"meta":304,"style":304},"language-ts shiki shiki-themes github-light github-dark github-dark","export default defineNitroConfig({\n  experimental: {\n    websocket: true\n  }\n})\n","nitro.config.ts","ts","",[290,306,307,327,333,343,349],{"__ignoreMap":304},[308,309,312,316,319,323],"span",{"class":310,"line":311},"line",1,[308,313,315],{"class":314},"so5gQ","export",[308,317,318],{"class":314}," default",[308,320,322],{"class":321},"shcOC"," defineNitroConfig",[308,324,326],{"class":325},"slsVL","({\n",[308,328,330],{"class":310,"line":329},2,[308,331,332],{"class":325},"  experimental: {\n",[308,334,336,339],{"class":310,"line":335},3,[308,337,338],{"class":325},"    websocket: ",[308,340,342],{"class":341},"suiK_","true\n",[308,344,346],{"class":310,"line":345},4,[308,347,348],{"class":325},"  }\n",[308,350,352],{"class":310,"line":351},5,[308,353,354],{"class":325},"})\n",[298,356,359],{"className":300,"code":357,"filename":358,"language":303,"meta":304,"style":304},"export default defineNuxtConfig({\n  nitro: {\n    experimental: {\n      websocket: true\n    }\n  }\n})\n","nuxt.config.ts",[290,360,361,372,377,382,389,394,399],{"__ignoreMap":304},[308,362,363,365,367,370],{"class":310,"line":311},[308,364,315],{"class":314},[308,366,318],{"class":314},[308,368,369],{"class":321}," defineNuxtConfig",[308,371,326],{"class":325},[308,373,374],{"class":310,"line":329},[308,375,376],{"class":325},"  nitro: {\n",[308,378,379],{"class":310,"line":335},[308,380,381],{"class":325},"    experimental: {\n",[308,383,384,387],{"class":310,"line":345},[308,385,386],{"class":325},"      websocket: ",[308,388,342],{"class":341},[308,390,391],{"class":310,"line":351},[308,392,393],{"class":325},"    }\n",[308,395,397],{"class":310,"line":396},6,[308,398,348],{"class":325},[308,400,402],{"class":310,"line":401},7,[308,403,354],{"class":325},[270,405,407],{"id":406},"usage","Usage",[240,409,410,411,261],{},"Create a websocket handler in ",[290,412,413],{},"server/routes/_ws.ts",[415,416,417],"tip",{},[240,418,419,420,423,424,261],{},"\nYou can use any route like ",[290,421,422],{},"server/routes/chatroom.ts"," to register upgrade handler on ",[290,425,426],{},"/chatroom",[298,428,430],{"className":300,"code":429,"filename":413,"language":303,"meta":304,"style":304},"export default defineWebSocketHandler({\n  open(peer) {\n    console.log(\"[ws] open\", peer);\n  },\n\n  message(peer, message) {\n    console.log(\"[ws] message\", peer, message);\n    if (message.text().includes(\"ping\")) {\n      peer.send(\"pong\");\n    }\n  },\n\n  close(peer, event) {\n    console.log(\"[ws] close\", peer, event);\n  },\n\n  error(peer, error) {\n    console.log(\"[ws] error\", peer, error);\n  },\n});\n\n",[290,431,432,443,458,475,480,486,503,517,543,560,565,570,575,592,607,612,617,634,649,654],{"__ignoreMap":304},[308,433,434,436,438,441],{"class":310,"line":311},[308,435,315],{"class":314},[308,437,318],{"class":314},[308,439,440],{"class":321}," defineWebSocketHandler",[308,442,326],{"class":325},[308,444,445,448,451,455],{"class":310,"line":329},[308,446,447],{"class":321},"  open",[308,449,450],{"class":325},"(",[308,452,454],{"class":453},"sQHwn","peer",[308,456,457],{"class":325},") {\n",[308,459,460,463,466,468,472],{"class":310,"line":335},[308,461,462],{"class":325},"    console.",[308,464,465],{"class":321},"log",[308,467,450],{"class":325},[308,469,471],{"class":470},"sfrk1","\"[ws] open\"",[308,473,474],{"class":325},", peer);\n",[308,476,477],{"class":310,"line":345},[308,478,479],{"class":325},"  },\n",[308,481,482],{"class":310,"line":351},[308,483,485],{"emptyLinePlaceholder":484},true,"\n",[308,487,488,491,493,495,498,501],{"class":310,"line":396},[308,489,490],{"class":321},"  message",[308,492,450],{"class":325},[308,494,454],{"class":453},[308,496,497],{"class":325},", ",[308,499,500],{"class":453},"message",[308,502,457],{"class":325},[308,504,505,507,509,511,514],{"class":310,"line":401},[308,506,462],{"class":325},[308,508,465],{"class":321},[308,510,450],{"class":325},[308,512,513],{"class":470},"\"[ws] message\"",[308,515,516],{"class":325},", peer, message);\n",[308,518,520,523,526,529,532,535,537,540],{"class":310,"line":519},8,[308,521,522],{"class":314},"    if",[308,524,525],{"class":325}," (message.",[308,527,528],{"class":321},"text",[308,530,531],{"class":325},"().",[308,533,534],{"class":321},"includes",[308,536,450],{"class":325},[308,538,539],{"class":470},"\"ping\"",[308,541,542],{"class":325},")) {\n",[308,544,546,549,552,554,557],{"class":310,"line":545},9,[308,547,548],{"class":325},"      peer.",[308,550,551],{"class":321},"send",[308,553,450],{"class":325},[308,555,556],{"class":470},"\"pong\"",[308,558,559],{"class":325},");\n",[308,561,563],{"class":310,"line":562},10,[308,564,393],{"class":325},[308,566,568],{"class":310,"line":567},11,[308,569,479],{"class":325},[308,571,573],{"class":310,"line":572},12,[308,574,485],{"emptyLinePlaceholder":484},[308,576,578,581,583,585,587,590],{"class":310,"line":577},13,[308,579,580],{"class":321},"  close",[308,582,450],{"class":325},[308,584,454],{"class":453},[308,586,497],{"class":325},[308,588,589],{"class":453},"event",[308,591,457],{"class":325},[308,593,595,597,599,601,604],{"class":310,"line":594},14,[308,596,462],{"class":325},[308,598,465],{"class":321},[308,600,450],{"class":325},[308,602,603],{"class":470},"\"[ws] close\"",[308,605,606],{"class":325},", peer, event);\n",[308,608,610],{"class":310,"line":609},15,[308,611,479],{"class":325},[308,613,615],{"class":310,"line":614},16,[308,616,485],{"emptyLinePlaceholder":484},[308,618,620,623,625,627,629,632],{"class":310,"line":619},17,[308,621,622],{"class":321},"  error",[308,624,450],{"class":325},[308,626,454],{"class":453},[308,628,497],{"class":325},[308,630,631],{"class":453},"error",[308,633,457],{"class":325},[308,635,637,639,641,643,646],{"class":310,"line":636},18,[308,638,462],{"class":325},[308,640,465],{"class":321},[308,642,450],{"class":325},[308,644,645],{"class":470},"\"[ws] error\"",[308,647,648],{"class":325},", peer, error);\n",[308,650,652],{"class":310,"line":651},19,[308,653,479],{"class":325},[308,655,657],{"class":310,"line":656},20,[308,658,659],{"class":325},"});\n",[661,662,663],"note",{},[240,664,665],{},"\nNitro allows you defining multiple websocket handlers using same routing of event handlers.",[240,667,668,669,672],{},"Use a client to connect to server. Example: (",[290,670,671],{},"server/routes/websocket.ts",")",[298,674,677],{"className":300,"code":675,"filename":676,"language":303,"meta":304,"style":304},"export default defineEventHandler(() => {\n  return $fetch(\n    \"https://raw.githubusercontent.com/h3js/crossws/main/examples/h3/public/index.html\"\n  );\n});\n\n","index.ts",[290,678,679,697,708,713,718],{"__ignoreMap":304},[308,680,681,683,685,688,691,694],{"class":310,"line":311},[308,682,315],{"class":314},[308,684,318],{"class":314},[308,686,687],{"class":321}," defineEventHandler",[308,689,690],{"class":325},"(() ",[308,692,693],{"class":314},"=>",[308,695,696],{"class":325}," {\n",[308,698,699,702,705],{"class":310,"line":329},[308,700,701],{"class":314},"  return",[308,703,704],{"class":321}," $fetch",[308,706,707],{"class":325},"(\n",[308,709,710],{"class":310,"line":335},[308,711,712],{"class":470},"    \"https://raw.githubusercontent.com/h3js/crossws/main/examples/h3/public/index.html\"\n",[308,714,715],{"class":310,"line":345},[308,716,717],{"class":325},"  );\n",[308,719,720],{"class":310,"line":351},[308,721,659],{"class":325},[240,723,724,725,728],{},"Now you can try it on ",[290,726,727],{},"/websocket"," route!",[415,730,731],{},[240,732,733,734,739],{},"\nCheck out our ",[244,735,738],{"href":736,"rel":737},"https://nuxt-chat.pi0.io/",[248],"chat demo"," using Nitro Websocket API.",[270,741,743],{"id":742},"server-sent-events-sse","Server-Sent Events (SSE)",[240,745,746,747],{},"As an alternative to WebSockets, you can use ",[244,748,751],{"href":749,"rel":750},"https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events",[248],"Server-sent events",[753,754,756],"h3",{"id":755},"example","Example",[240,758,759,760,261],{},"Create an SSE handler in ",[290,761,762],{},"server/routes/sse.ts",[298,764,766],{"className":300,"code":765,"filename":762,"language":303,"meta":304,"style":304},"export default defineEventHandler(async (event) => {\n  const eventStream = createEventStream(event)\n\n  const interval = setInterval(async () => {\n    await eventStream.push(`Message @ ${new Date().toLocaleTimeString()}`)\n  }, 1000)\n\n  eventStream.onClosed(async () => {\n    clearInterval(interval)\n    await eventStream.close()\n  })\n\n  return eventStream.send()\n})\n",[290,767,768,793,810,814,837,873,883,887,905,913,925,930,934,944],{"__ignoreMap":304},[308,769,770,772,774,776,778,781,784,786,789,791],{"class":310,"line":311},[308,771,315],{"class":314},[308,773,318],{"class":314},[308,775,687],{"class":321},[308,777,450],{"class":325},[308,779,780],{"class":314},"async",[308,782,783],{"class":325}," (",[308,785,589],{"class":453},[308,787,788],{"class":325},") ",[308,790,693],{"class":314},[308,792,696],{"class":325},[308,794,795,798,801,804,807],{"class":310,"line":329},[308,796,797],{"class":314},"  const",[308,799,800],{"class":341}," eventStream",[308,802,803],{"class":314}," =",[308,805,806],{"class":321}," createEventStream",[308,808,809],{"class":325},"(event)\n",[308,811,812],{"class":310,"line":335},[308,813,485],{"emptyLinePlaceholder":484},[308,815,816,818,821,823,826,828,830,833,835],{"class":310,"line":345},[308,817,797],{"class":314},[308,819,820],{"class":341}," interval",[308,822,803],{"class":314},[308,824,825],{"class":321}," setInterval",[308,827,450],{"class":325},[308,829,780],{"class":314},[308,831,832],{"class":325}," () ",[308,834,693],{"class":314},[308,836,696],{"class":325},[308,838,839,842,845,848,850,853,856,859,861,864,867,870],{"class":310,"line":351},[308,840,841],{"class":314},"    await",[308,843,844],{"class":325}," eventStream.",[308,846,847],{"class":321},"push",[308,849,450],{"class":325},[308,851,852],{"class":470},"`Message @ ${",[308,854,855],{"class":314},"new",[308,857,858],{"class":321}," Date",[308,860,531],{"class":470},[308,862,863],{"class":321},"toLocaleTimeString",[308,865,866],{"class":470},"()",[308,868,869],{"class":470},"}`",[308,871,872],{"class":325},")\n",[308,874,875,878,881],{"class":310,"line":396},[308,876,877],{"class":325},"  }, ",[308,879,880],{"class":341},"1000",[308,882,872],{"class":325},[308,884,885],{"class":310,"line":401},[308,886,485],{"emptyLinePlaceholder":484},[308,888,889,892,895,897,899,901,903],{"class":310,"line":519},[308,890,891],{"class":325},"  eventStream.",[308,893,894],{"class":321},"onClosed",[308,896,450],{"class":325},[308,898,780],{"class":314},[308,900,832],{"class":325},[308,902,693],{"class":314},[308,904,696],{"class":325},[308,906,907,910],{"class":310,"line":545},[308,908,909],{"class":321},"    clearInterval",[308,911,912],{"class":325},"(interval)\n",[308,914,915,917,919,922],{"class":310,"line":562},[308,916,841],{"class":314},[308,918,844],{"class":325},[308,920,921],{"class":321},"close",[308,923,924],{"class":325},"()\n",[308,926,927],{"class":310,"line":567},[308,928,929],{"class":325},"  })\n",[308,931,932],{"class":310,"line":572},[308,933,485],{"emptyLinePlaceholder":484},[308,935,936,938,940,942],{"class":310,"line":577},[308,937,701],{"class":314},[308,939,844],{"class":325},[308,941,551],{"class":321},[308,943,924],{"class":325},[308,945,946],{"class":310,"line":594},[308,947,354],{"class":325},[240,949,950],{},"Then connect to this SSE endpoint from the client",[298,952,954],{"className":300,"code":953,"language":303,"meta":304,"style":304},"const eventSource = new EventSource('http://localhost:3000/sse')\n\neventSource.onmessage = (event) => {\n  console.log(event.data)\n}\n",[290,955,956,979,983,1003,1013],{"__ignoreMap":304},[308,957,958,961,964,966,969,972,974,977],{"class":310,"line":311},[308,959,960],{"class":314},"const",[308,962,963],{"class":341}," eventSource",[308,965,803],{"class":314},[308,967,968],{"class":314}," new",[308,970,971],{"class":321}," EventSource",[308,973,450],{"class":325},[308,975,976],{"class":470},"'http://localhost:3000/sse'",[308,978,872],{"class":325},[308,980,981],{"class":310,"line":329},[308,982,485],{"emptyLinePlaceholder":484},[308,984,985,988,991,993,995,997,999,1001],{"class":310,"line":335},[308,986,987],{"class":325},"eventSource.",[308,989,990],{"class":321},"onmessage",[308,992,803],{"class":314},[308,994,783],{"class":325},[308,996,589],{"class":453},[308,998,788],{"class":325},[308,1000,693],{"class":314},[308,1002,696],{"class":325},[308,1004,1005,1008,1010],{"class":310,"line":345},[308,1006,1007],{"class":325},"  console.",[308,1009,465],{"class":321},[308,1011,1012],{"class":325},"(event.data)\n",[308,1014,1015],{"class":310,"line":351},[308,1016,1017],{"class":325},"}\n",[263,1019],{"title":1020,"to":1021},"SSE guide in H3","https://h3.dev/guide/advanced/websocket#server-sent-events-sse",[1023,1024,1025],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}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 .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}",{"title":304,"searchDepth":329,"depth":329,"links":1027},[1028,1029,1030],{"id":272,"depth":329,"text":273},{"id":406,"depth":329,"text":407},{"id":742,"depth":329,"text":743,"children":1031},[1032],{"id":755,"depth":335,"text":756},"Nitro natively supports a cross platform WebSocket API","md",{"icon":35},{"icon":35},{"title":32,"description":1033},"rpM5MP_aJmZS03zD-r3G13mn8HcIrZcXn34kpCSBONI",[1040,1042],{"title":27,"path":28,"stem":29,"description":1041,"icon":30,"children":-1},"Nitro supports filesystem routing to automatically map files to h3 routes.",{"title":37,"path":38,"stem":39,"description":1043,"icon":40,"children":-1},"Nitro provides a built-in storage layer that can abstract filesystem or database or any other data source.",1778145697624]