[{"data":1,"prerenderedAt":1033},["ShallowReactive",2],{"navigation_docs":3,"-guide-getting-started":93,"-guide-getting-started-surround":1030},[4,71],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":70},"Guide","i-lucide-book-open","\u002Fguide","1.guide",[10,14,18,22,26,30,34,38,42,46,50,54,58,62,66],{"title":11,"path":12,"stem":13},"Getting started","\u002Fguide\u002Fgetting-started","1.guide\u002F01.getting-started",{"title":15,"path":16,"stem":17},"Adoption paths","\u002Fguide\u002Fadoption","1.guide\u002F02.adoption",{"title":19,"path":20,"stem":21},"Routes and typed $fetch","\u002Fguide\u002Froutes","1.guide\u002F02.routes",{"title":23,"path":24,"stem":25},"Kyo handlers","\u002Fguide\u002Fkyo","1.guide\u002F03.kyo",{"title":27,"path":28,"stem":29},"ZIO handlers","\u002Fguide\u002Fzio","1.guide\u002F04.zio",{"title":31,"path":32,"stem":33},"Configuration and secrets","\u002Fguide\u002Fconfiguration","1.guide\u002F05.configuration",{"title":35,"path":36,"stem":37},"Application and request lifetimes","\u002Fguide\u002Flifetimes","1.guide\u002F06.lifetimes",{"title":39,"path":40,"stem":41},"Schemas","\u002Fguide\u002Fschema","1.guide\u002F07.schema",{"title":43,"path":44,"stem":45},"PostgreSQL","\u002Fguide\u002Fdatabase","1.guide\u002F08.database",{"title":47,"path":48,"stem":49},"Streaming and cancellation","\u002Fguide\u002Fstreaming","1.guide\u002F09.streaming",{"title":51,"path":52,"stem":53},"Testing","\u002Fguide\u002Ftesting","1.guide\u002F10.testing",{"title":55,"path":56,"stem":57},"Nitro storage and NuxtHub KV","\u002Fguide\u002Fstorage","1.guide\u002F11.storage",{"title":59,"path":60,"stem":61},"Debug Scala handlers","\u002Fguide\u002Fdebugging","1.guide\u002F12.debugging",{"title":63,"path":64,"stem":65},"npm build tooling","\u002Fguide\u002Fnpm-tooling","1.guide\u002F13.npm-tooling",{"title":67,"path":68,"stem":69},"Set up h34s with a coding assistant","\u002Fguide\u002Fagent-setup","1.guide\u002F14.agent-setup",false,{"title":72,"icon":73,"path":74,"stem":75,"children":76,"page":70},"Reference","i-lucide-library","\u002Freference","2.reference",[77,81,85,89],{"title":78,"path":79,"stem":80},"Architecture","\u002Freference\u002Farchitecture","2.reference\u002F1.architecture",{"title":82,"path":83,"stem":84},"Releases","\u002Freference\u002Freleases","2.reference\u002F2.releases",{"title":86,"path":87,"stem":88},"Compatibility","\u002Freference\u002Fcompatibility","2.reference\u002F3.compatibility",{"title":90,"path":91,"stem":92},"Migration guide","\u002Freference\u002Fmigration","2.reference\u002F4.migration",{"id":94,"title":11,"body":95,"description":1024,"extension":1025,"links":1026,"meta":1027,"navigation":626,"path":12,"seo":1028,"stem":13,"__hash__":1029},"docs\u002F1.guide\u002F01.getting-started.md",{"type":96,"value":97,"toc":1013},"minimark",[98,102,110,139,144,211,214,218,229,258,272,276,279,288,291,324,331,346,352,356,359,373,380,416,437,452,456,463,578,584,684,697,843,864,878,882,885,894,900,903,917,924,928,931,940,946,950,953,978,981,985,1009],[99,100,101],"p",{},"h34s lets you write Nuxt server routes in Scala.js. Kyo is the core: one runtime owns the request lifecycle, cancellation, streaming and errors. A first-class ZIO adapter sits on top of it for ZIO applications.",[99,103,104,105,109],{},"In this tutorial you run the repository's demo, call a Kyo handler, trigger a validation error, and look at the code behind it. Then you are ready to ",[106,107,108],"a",{"href":16},"add h34s to your own app",".",[111,112,113],"blockquote",{},[99,114,115,119,120,130,131,134,135,138],{},[116,117,118],"strong",{},"Status."," This site describes the ",[106,121,125,126],{"href":122,"rel":123},"https:\u002F\u002Fgithub.com\u002Fyuri4n\u002Fh34s\u002Freleases\u002Ftag\u002Fv0.2.0-alpha.1",[124],"nofollow","published ",[127,128,129],"code",{},"0.2.0-alpha.1",". The older ",[127,132,133],{},"0.1.0-alpha.1"," has a different API; the ",[106,136,137],{"href":91},"migration guide"," lists every change.",[140,141,143],"h2",{"id":142},"prerequisites","Prerequisites",[145,146,147,163],"table",{},[148,149,150],"thead",{},[151,152,153,157,160],"tr",{},[154,155,156],"th",{},"Tool",[154,158,159],{},"Version",[154,161,162],{},"Why",[164,165,166,178,189,200],"tbody",{},[151,167,168,172,175],{},[169,170,171],"td",{},"JDK",[169,173,174],{},"25",[169,176,177],{},"Runs sbt. Kyo 1.0.0-RC7 macros need it. Not needed in production",[151,179,180,183,186],{},[169,181,182],{},"sbt",[169,184,185],{},"1.11.7",[169,187,188],{},"Builds and links Scala.js",[151,190,191,194,197],{},[169,192,193],{},"Node.js",[169,195,196],{},"24",[169,198,199],{},"Runs Nuxt and your handlers",[151,201,202,205,208],{},[169,203,204],{},"pnpm",[169,206,207],{},"10.34.4",[169,209,210],{},"Installs the demo",[99,212,213],{},"Scala 3.9.0 and Scala.js 1.22.0 come from the build. You need no database for this tutorial.",[140,215,217],{"id":216},"link-and-start-the-demo","Link and start the demo",[99,219,220,221,224,225,228],{},"Clone ",[127,222,223],{},"yuri4n\u002Fh34s"," and check out the ",[127,226,227],{},"v0.2.0-alpha.1"," tag. From the repository root, with JDK 25 selected:",[230,231,236],"pre",{"className":232,"code":233,"language":234,"meta":235,"style":235},"language-sh shiki shiki-themes github-light github-light github-dark","pnpm install --frozen-lockfile\npnpm run scala:fast\npnpm dev\n","sh","",[127,237,238,246,252],{"__ignoreMap":235},[239,240,243],"span",{"class":241,"line":242},"line",1,[239,244,245],{},"pnpm install --frozen-lockfile\n",[239,247,249],{"class":241,"line":248},2,[239,250,251],{},"pnpm run scala:fast\n",[239,253,255],{"class":241,"line":254},3,[239,256,257],{},"pnpm dev\n",[99,259,260,263,264,267,268,271],{},[127,261,262],{},"scala:fast"," links the demo's Kyo and ZIO handlers into ",[127,265,266],{},"examples\u002Fnuxt\u002Fserver\u002F.scala-kyo"," and ",[127,269,270],{},"examples\u002Fnuxt\u002Fserver\u002F.scala",". Wait until Nuxt prints its address.",[140,273,275],{"id":274},"make-your-first-request","Make your first request",[99,277,278],{},"In another terminal:",[230,280,282],{"className":232,"code":281,"language":234,"meta":235,"style":235},"curl http:\u002F\u002F127.0.0.1:3000\u002Fapi\u002Fkyo\u002Fgreeting\n",[127,283,284],{"__ignoreMap":235},[239,285,286],{"class":241,"line":242},[239,287,281],{},[99,289,290],{},"Expected body:",[230,292,296],{"className":293,"code":294,"language":295,"meta":235,"style":235},"language-json shiki shiki-themes github-light github-light github-dark","{ \"data\": { \"message\": \"Hello, Kyo!\" } }\n","json",[127,297,298],{"__ignoreMap":235},[239,299,300,304,308,311,314,317,321],{"class":241,"line":242},[239,301,303],{"class":302},"sxrX7","{ ",[239,305,307],{"class":306},"sBjJW","\"data\"",[239,309,310],{"class":302},": { ",[239,312,313],{"class":306},"\"message\"",[239,315,316],{"class":302},": ",[239,318,320],{"class":319},"sIIMD","\"Hello, Kyo!\"",[239,322,323],{"class":302}," } }\n",[99,325,326,327,330],{},"Every value body is wrapped in ",[127,328,329],{},"data",". Now send a name:",[230,332,334],{"className":232,"code":333,"language":234,"meta":235,"style":235},"curl -H 'content-type: application\u002Fjson' --data '{\"name\":\"Scala\"}' \\\n  http:\u002F\u002F127.0.0.1:3000\u002Fapi\u002Fkyo\u002Fgreeting\n",[127,335,336,341],{"__ignoreMap":235},[239,337,338],{"class":241,"line":242},[239,339,340],{},"curl -H 'content-type: application\u002Fjson' --data '{\"name\":\"Scala\"}' \\\n",[239,342,343],{"class":241,"line":248},[239,344,345],{},"  http:\u002F\u002F127.0.0.1:3000\u002Fapi\u002Fkyo\u002Fgreeting\n",[99,347,348,349,109],{},"Expected body: ",[127,350,351],{},"{\"data\":{\"message\":\"Hello, Scala!\"}}",[140,353,355],{"id":354},"trigger-a-validation-error","Trigger a validation error",[99,357,358],{},"Send a blank name:",[230,360,362],{"className":232,"code":361,"language":234,"meta":235,"style":235},"curl -i -H 'content-type: application\u002Fjson' --data '{\"name\":\"  \"}' \\\n  http:\u002F\u002F127.0.0.1:3000\u002Fapi\u002Fkyo\u002Fgreeting\n",[127,363,364,369],{"__ignoreMap":235},[239,365,366],{"class":241,"line":242},[239,367,368],{},"curl -i -H 'content-type: application\u002Fjson' --data '{\"name\":\"  \"}' \\\n",[239,370,371],{"class":241,"line":248},[239,372,345],{},[99,374,375,376,379],{},"The status is ",[127,377,378],{},"422"," and the body names the field:",[230,381,383],{"className":293,"code":382,"language":295,"meta":235,"style":235},"{ \"errors\": [{ \"message\": \"must not be blank\", \"path\": \"name\" }] }\n",[127,384,385],{"__ignoreMap":235},[239,386,387,389,392,395,397,399,402,405,408,410,413],{"class":241,"line":242},[239,388,303],{"class":302},[239,390,391],{"class":306},"\"errors\"",[239,393,394],{"class":302},": [{ ",[239,396,313],{"class":306},[239,398,316],{"class":302},[239,400,401],{"class":319},"\"must not be blank\"",[239,403,404],{"class":302},", ",[239,406,407],{"class":306},"\"path\"",[239,409,316],{"class":302},[239,411,412],{"class":319},"\"name\"",[239,414,415],{"class":302}," }] }\n",[99,417,418,419,422,423,426,427,430,431,422,434,436],{},"Send ",[127,420,421],{},"{not json"," and you get a ",[127,424,425],{},"400"," with ",[127,428,429],{},"Request body is not valid JSON",". Send ",[127,432,433],{},"{\"name\":42}",[127,435,378],{}," with one generic entry. No input value ever appears in an error.",[111,438,439],{},[99,440,441,444,445,448,449,109],{},[116,442,443],{},"Evidence."," On macOS x86_64, these responses came back from a production build of the demo, under ",[127,446,447],{},"nuxt dev",", and from the linked modules behind a plain h3 server; see ",[106,450,451],{"href":87},"compatibility",[140,453,455],{"id":454},"read-the-code","Read the code",[99,457,458,459,462],{},"The handler is a function from the request to the response body (",[127,460,461],{},"examples\u002Fnuxt\u002Fscala\u002Fkyo\u002F...\u002FHandlers.scala","):",[230,464,468],{"className":465,"code":466,"language":467,"meta":235,"style":235},"language-scala shiki shiki-themes github-light github-light github-dark","@JSExportTopLevel(\"default\", \"kyo-greeting-post\")\nval personalizedGreeting: EventHandler = AppHandler.define: request =>\n    for\n      input    \u003C- request.body.json[GreetingRequest]\n      greeting \u003C- Env.use[Greetings](_.greet(input.name))\n    yield greeting\n","scala",[127,469,470,494,526,531,549,569],{"__ignoreMap":235},[239,471,472,476,480,483,486,488,491],{"class":241,"line":242},[239,473,475],{"class":474},"s8jYJ","@",[239,477,479],{"class":478},"snPdu","JSExportTopLevel",[239,481,482],{"class":302},"(",[239,484,485],{"class":319},"\"default\"",[239,487,404],{"class":302},[239,489,490],{"class":319},"\"kyo-greeting-post\"",[239,492,493],{"class":302},")\n",[239,495,496,499,503,506,509,512,515,518,520,523],{"class":241,"line":248},[239,497,498],{"class":474},"val",[239,500,502],{"class":501},"sP4rz"," personalizedGreeting",[239,504,505],{"class":474},":",[239,507,508],{"class":478}," EventHandler",[239,510,511],{"class":474}," =",[239,513,514],{"class":478}," AppHandler",[239,516,517],{"class":302},".define",[239,519,505],{"class":474},[239,521,522],{"class":302}," request ",[239,524,525],{"class":474},"=>\n",[239,527,528],{"class":241,"line":254},[239,529,530],{"class":474},"    for\n",[239,532,534,537,540,543,546],{"class":241,"line":533},4,[239,535,536],{"class":302},"      input    ",[239,538,539],{"class":474},"\u003C-",[239,541,542],{"class":302}," request.body.json[",[239,544,545],{"class":478},"GreetingRequest",[239,547,548],{"class":302},"]\n",[239,550,552,555,557,560,563,566],{"class":241,"line":551},5,[239,553,554],{"class":302},"      greeting ",[239,556,539],{"class":474},[239,558,559],{"class":478}," Env",[239,561,562],{"class":302},".use[",[239,564,565],{"class":478},"Greetings",[239,567,568],{"class":302},"](_.greet(input.name))\n",[239,570,572,575],{"class":241,"line":571},6,[239,573,574],{"class":474},"    yield",[239,576,577],{"class":302}," greeting\n",[99,579,580,581,462],{},"The model carries its validation in one schema, so the handler repeats no checks (",[127,582,583],{},"Greetings.scala",[230,585,587],{"className":465,"code":586,"language":467,"meta":235,"style":235},"final case class GreetingRequest(name: String) derives NativeSchema\n\nobject GreetingRequest:\n    given Schema[GreetingRequest] = Schema[GreetingRequest]\n      .check(_.name)(_.trim.nonEmpty, \"must not be blank\")\n      .checkMaxLength(_.name)(80)\n",[127,588,589,622,628,638,665,674],{"__ignoreMap":235},[239,590,591,594,597,600,603,605,608,610,613,616,619],{"class":241,"line":242},[239,592,593],{"class":474},"final",[239,595,596],{"class":474}," case",[239,598,599],{"class":474}," class",[239,601,602],{"class":478}," GreetingRequest",[239,604,482],{"class":302},[239,606,607],{"class":501},"name",[239,609,316],{"class":302},[239,611,612],{"class":478},"String",[239,614,615],{"class":302},") ",[239,617,618],{"class":474},"derives",[239,620,621],{"class":478}," NativeSchema\n",[239,623,624],{"class":241,"line":248},[239,625,627],{"emptyLinePlaceholder":626},true,"\n",[239,629,630,633,635],{"class":241,"line":254},[239,631,632],{"class":474},"object",[239,634,602],{"class":478},[239,636,637],{"class":474},":\n",[239,639,640,643,646,649,651,654,657,659,661,663],{"class":241,"line":533},[239,641,642],{"class":474},"    given",[239,644,645],{"class":478}," Schema",[239,647,648],{"class":302},"[",[239,650,545],{"class":478},[239,652,653],{"class":302},"] ",[239,655,656],{"class":474},"=",[239,658,645],{"class":478},[239,660,648],{"class":302},[239,662,545],{"class":478},[239,664,548],{"class":302},[239,666,667,670,672],{"class":241,"line":551},[239,668,669],{"class":302},"      .check(_.name)(_.trim.nonEmpty, ",[239,671,401],{"class":319},[239,673,493],{"class":302},[239,675,676,679,682],{"class":241,"line":571},[239,677,678],{"class":302},"      .checkMaxLength(_.name)(",[239,680,681],{"class":306},"80",[239,683,493],{"class":302},[99,685,686,689,690,692,693,696],{},[127,687,688],{},"AppHandler"," is the demo's own wiring point. It provides the ",[127,691,565],{}," service and sets ",[127,694,695],{},"Cache-Control: no-store"," on every response:",[230,698,700],{"className":465,"code":699,"language":467,"meta":235,"style":235},"object AppHandler:\n    private val options = HandlerOptions(defaults = ResponseHead.noStore)\n\n    def define[B: ResponseBody](\n        program: Request => B \u003C (HandlerEffects & Env[Greetings]),\n    )(using Frame): EventHandler =\n      KHandler.define(options)(request => Env.run(Services.greetings)(program(request)))\n",[127,701,702,710,737,741,762,799,820],{"__ignoreMap":235},[239,703,704,706,708],{"class":241,"line":242},[239,705,632],{"class":474},[239,707,514],{"class":478},[239,709,637],{"class":474},[239,711,712,715,718,721,723,726,729,731,734],{"class":241,"line":248},[239,713,714],{"class":474},"    private",[239,716,717],{"class":474}," val",[239,719,720],{"class":501}," options",[239,722,511],{"class":474},[239,724,725],{"class":478}," HandlerOptions",[239,727,728],{"class":302},"(defaults ",[239,730,656],{"class":474},[239,732,733],{"class":478}," ResponseHead",[239,735,736],{"class":302},".noStore)\n",[239,738,739],{"class":241,"line":254},[239,740,627],{"emptyLinePlaceholder":626},[239,742,743,746,749,751,754,756,759],{"class":241,"line":533},[239,744,745],{"class":474},"    def",[239,747,748],{"class":478}," define",[239,750,648],{"class":302},[239,752,753],{"class":478},"B",[239,755,505],{"class":474},[239,757,758],{"class":478}," ResponseBody",[239,760,761],{"class":302},"](\n",[239,763,764,767,769,772,775,778,781,784,787,790,792,794,796],{"class":241,"line":551},[239,765,766],{"class":501},"        program",[239,768,316],{"class":302},[239,770,771],{"class":478},"Request",[239,773,774],{"class":474}," =>",[239,776,777],{"class":478}," B",[239,779,780],{"class":474}," \u003C",[239,782,783],{"class":302}," (",[239,785,786],{"class":478},"HandlerEffects",[239,788,789],{"class":474}," &",[239,791,559],{"class":478},[239,793,648],{"class":302},[239,795,565],{"class":478},[239,797,798],{"class":302},"]),\n",[239,800,801,804,807,810,813,815,817],{"class":241,"line":571},[239,802,803],{"class":302},"    )(",[239,805,806],{"class":474},"using",[239,808,809],{"class":478}," Frame",[239,811,812],{"class":302},")",[239,814,505],{"class":474},[239,816,508],{"class":478},[239,818,819],{"class":474}," =\n",[239,821,823,826,829,832,834,837,840],{"class":241,"line":822},7,[239,824,825],{"class":478},"      KHandler",[239,827,828],{"class":302},".define(options)(request ",[239,830,831],{"class":474},"=>",[239,833,559],{"class":478},[239,835,836],{"class":302},".run(",[239,838,839],{"class":478},"Services",[239,841,842],{"class":302},".greetings)(program(request)))\n",[99,844,845,404,847,267,849,851,852,404,855,404,857,404,860,863],{},[127,846,688],{},[127,848,565],{},[127,850,545],{}," are application code. h34s exports ",[127,853,854],{},"KHandler",[127,856,771],{},[127,858,859],{},"Response",[127,861,862],{},"HandlerOptions"," and the other values you see.",[99,865,866,867,870,871,874,875,109],{},"The handler declares its own route, ",[127,868,869],{},".at(Route.post(\"\u002Fapi\u002Fkyo\u002Fgreeting\"))","; the demo has no route files. After linking, the h34s Nuxt module mounts it, and Nuxt types ",[127,872,873],{},"$fetch('\u002Fapi\u002Fkyo\u002Fgreeting')",". See ",[106,876,877],{"href":20},"routes and typed $fetch",[140,879,881],{"id":880},"try-the-zio-route","Try the ZIO route",[99,883,884],{},"The demo also has a ZIO handler that streams three strings:",[230,886,888],{"className":232,"code":887,"language":234,"meta":235,"style":235},"curl http:\u002F\u002F127.0.0.1:3000\u002Fapi\u002Ftest\n",[127,889,890],{"__ignoreMap":235},[239,891,892],{"class":241,"line":242},[239,893,887],{},[99,895,896,897,109],{},"The body is ",[127,898,899],{},"abc",[99,901,902],{},"The ZIO greeting takes the same body as the Kyo one and needs no database:",[230,904,906],{"className":232,"code":905,"language":234,"meta":235,"style":235},"curl -H 'content-type: application\u002Fjson' --data '{\"name\":\"Scala\"}' \\\n  http:\u002F\u002F127.0.0.1:3000\u002Fapi\u002Fzio\u002Fgreeting\n",[127,907,908,912],{"__ignoreMap":235},[239,909,910],{"class":241,"line":242},[239,911,340],{},[239,913,914],{"class":241,"line":248},[239,915,916],{},"  http:\u002F\u002F127.0.0.1:3000\u002Fapi\u002Fzio\u002Fgreeting\n",[99,918,348,919,874,921,923],{},[127,920,351],{},[106,922,27],{"href":28}," for the adapter.",[140,925,927],{"id":926},"edit-and-repeat","Edit and repeat",[99,929,930],{},"Keep continuous linking running in a second terminal:",[230,932,934],{"className":232,"code":933,"language":234,"meta":235,"style":235},"pnpm run scala:watch\n",[127,935,936],{"__ignoreMap":235},[239,937,938],{"class":241,"line":242},[239,939,933],{},[99,941,942,943,109],{},"Edit a Scala file, wait for linking and for Nitro to restart its worker, then send the request again. In development, an unexpected failure includes its cause and stack in the response; see ",[106,944,945],{"href":60},"debugging",[140,947,949],{"id":948},"run-the-tests","Run the tests",[99,951,952],{},"The Scala suites need two small npm fixtures:",[230,954,956],{"className":232,"code":955,"language":234,"meta":235,"style":235},"for fixture in scala-modules\u002F*\u002Ftest-js; do npm ci --prefix \"$fixture\" --ignore-scripts; done\nsbt 'h3Ext\u002Ftest' 'kyoH3Ext\u002Ftest' 'nativeConverterKyoSchemaExt\u002Ftest' 'kyoNuxtHubExt\u002Ftest' \\\n  'zioH3Ext\u002Ftest' 'nativeConverterZIOSchemaExt\u002Ftest' 'zioNuxtHubExt\u002Ftest' 'nuxtsvr\u002Ftest'\nnode --test scripts\u002F*.test.mjs packages\u002Fnuxt\u002Ftest\u002F*.test.mjs\n",[127,957,958,963,968,973],{"__ignoreMap":235},[239,959,960],{"class":241,"line":242},[239,961,962],{},"for fixture in scala-modules\u002F*\u002Ftest-js; do npm ci --prefix \"$fixture\" --ignore-scripts; done\n",[239,964,965],{"class":241,"line":248},[239,966,967],{},"sbt 'h3Ext\u002Ftest' 'kyoH3Ext\u002Ftest' 'nativeConverterKyoSchemaExt\u002Ftest' 'kyoNuxtHubExt\u002Ftest' \\\n",[239,969,970],{"class":241,"line":254},[239,971,972],{},"  'zioH3Ext\u002Ftest' 'nativeConverterZIOSchemaExt\u002Ftest' 'zioNuxtHubExt\u002Ftest' 'nuxtsvr\u002Ftest'\n",[239,974,975],{"class":241,"line":533},[239,976,977],{},"node --test scripts\u002F*.test.mjs packages\u002Fnuxt\u002Ftest\u002F*.test.mjs\n",[99,979,980],{},"None of them needs PostgreSQL or a running Nuxt server.",[140,982,984],{"id":983},"next-steps","Next steps",[986,987,988,995,1000],"ul",{},[989,990,991,994],"li",{},[106,992,993],{"href":16},"Adopt h34s in your project",": new app, existing Nuxt app, or existing Scala.js project.",[989,996,997,999],{},[106,998,23],{"href":24},": requests, responses, errors and services.",[989,1001,1002,267,1005,1008],{},[106,1003,1004],{"href":32},"Configuration",[106,1006,1007],{"href":36},"lifetimes"," for real applications.",[1010,1011,1012],"style",{},"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 .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .snPdu, html code.shiki .snPdu{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sP4rz, html code.shiki .sP4rz{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":235,"searchDepth":248,"depth":248,"links":1014},[1015,1016,1017,1018,1019,1020,1021,1022,1023],{"id":142,"depth":248,"text":143},{"id":216,"depth":248,"text":217},{"id":274,"depth":248,"text":275},{"id":354,"depth":248,"text":355},{"id":454,"depth":248,"text":455},{"id":880,"depth":248,"text":881},{"id":926,"depth":248,"text":927},{"id":948,"depth":248,"text":949},{"id":983,"depth":248,"text":984},"Run the demo, make your first request to a Kyo handler, and see validation and errors on the wire.","md",null,{},{"title":11,"description":1024},"ccLx_qV8E0mEZjAB7TbgmDzHbpKSPsY9AufS99a4J4U",[1026,1031],{"title":15,"path":16,"stem":17,"description":1032,"children":-1},"Add h34s to a new Nuxt app, an existing Nuxt app, or an existing Scala.js project.",1792533381917]