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