@webqit/webflo 0.20.2-next.0 → 0.20.2-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/package.json +1 -1
  2. package/site/.vitepress/config.ts +1 -0
  3. package/site/.vitepress/dist/-/_.html +56 -0
  4. package/site/.vitepress/dist/-/docs.old.html +679 -0
  5. package/site/.vitepress/dist/404.html +23 -0
  6. package/site/.vitepress/dist/api/webflo-fetch/FormData.html +55 -0
  7. package/site/.vitepress/dist/api/webflo-fetch/Headers.html +55 -0
  8. package/site/.vitepress/dist/api/webflo-fetch/LiveResponse.html +55 -0
  9. package/site/.vitepress/dist/api/webflo-fetch/Request.html +55 -0
  10. package/site/.vitepress/dist/api/webflo-fetch/Response.html +55 -0
  11. package/site/.vitepress/dist/api/webflo-fetch/fetch.html +55 -0
  12. package/site/.vitepress/dist/api/webflo-routing/HttpCookies.html +55 -0
  13. package/site/.vitepress/dist/api/webflo-routing/HttpEvent/respondWith.html +55 -0
  14. package/site/.vitepress/dist/api/webflo-routing/HttpEvent/waitUntil.html +55 -0
  15. package/site/.vitepress/dist/api/webflo-routing/HttpEvent/waitUntilNavigate.html +55 -0
  16. package/site/.vitepress/dist/api/webflo-routing/HttpEvent.html +55 -0
  17. package/site/.vitepress/dist/api/webflo-routing/HttpSession.html +55 -0
  18. package/site/.vitepress/dist/api/webflo-routing/HttpState.html +55 -0
  19. package/site/.vitepress/dist/api/webflo-routing/HttpUser.html +55 -0
  20. package/site/.vitepress/dist/api/webflo-routing/handler/fetch.html +59 -0
  21. package/site/.vitepress/dist/api/webflo-routing/handler/next.html +61 -0
  22. package/site/.vitepress/dist/api/webflo-routing/handler.html +65 -0
  23. package/site/.vitepress/dist/api.html +55 -0
  24. package/site/.vitepress/dist/assets/-__.md.wD5kDRhS.js +1 -0
  25. package/site/.vitepress/dist/assets/-__.md.wD5kDRhS.lean.js +1 -0
  26. package/site/.vitepress/dist/assets/-_docs.old.md.CiqucE_1.js +625 -0
  27. package/site/.vitepress/dist/assets/-_docs.old.md.CiqucE_1.lean.js +1 -0
  28. package/site/.vitepress/dist/assets/api.md.C9KRNLi_.js +1 -0
  29. package/site/.vitepress/dist/assets/api.md.C9KRNLi_.lean.js +1 -0
  30. package/site/.vitepress/dist/assets/api_webflo-fetch_FormData.md.CDuexUTz.js +1 -0
  31. package/site/.vitepress/dist/assets/api_webflo-fetch_FormData.md.CDuexUTz.lean.js +1 -0
  32. package/site/.vitepress/dist/assets/api_webflo-fetch_Headers.md.Cl_4-FUP.js +1 -0
  33. package/site/.vitepress/dist/assets/api_webflo-fetch_Headers.md.Cl_4-FUP.lean.js +1 -0
  34. package/site/.vitepress/dist/assets/api_webflo-fetch_LiveResponse.md.BMidKMB1.js +1 -0
  35. package/site/.vitepress/dist/assets/api_webflo-fetch_LiveResponse.md.BMidKMB1.lean.js +1 -0
  36. package/site/.vitepress/dist/assets/api_webflo-fetch_Request.md.DPwZCPmi.js +1 -0
  37. package/site/.vitepress/dist/assets/api_webflo-fetch_Request.md.DPwZCPmi.lean.js +1 -0
  38. package/site/.vitepress/dist/assets/api_webflo-fetch_Response.md.BaSyoOLE.js +1 -0
  39. package/site/.vitepress/dist/assets/api_webflo-fetch_Response.md.BaSyoOLE.lean.js +1 -0
  40. package/site/.vitepress/dist/assets/api_webflo-fetch_fetch.md.Bc9r3Q9I.js +1 -0
  41. package/site/.vitepress/dist/assets/api_webflo-fetch_fetch.md.Bc9r3Q9I.lean.js +1 -0
  42. package/site/.vitepress/dist/assets/api_webflo-routing_HttpCookies.md.B5ok3jrM.js +1 -0
  43. package/site/.vitepress/dist/assets/api_webflo-routing_HttpCookies.md.B5ok3jrM.lean.js +1 -0
  44. package/site/.vitepress/dist/assets/api_webflo-routing_HttpEvent.md.DBkSQRTa.js +1 -0
  45. package/site/.vitepress/dist/assets/api_webflo-routing_HttpEvent.md.DBkSQRTa.lean.js +1 -0
  46. package/site/.vitepress/dist/assets/api_webflo-routing_HttpEvent_respondWith.md.aAxq-5Ie.js +1 -0
  47. package/site/.vitepress/dist/assets/api_webflo-routing_HttpEvent_respondWith.md.aAxq-5Ie.lean.js +1 -0
  48. package/site/.vitepress/dist/assets/api_webflo-routing_HttpEvent_waitUntil.md.DyQZLhPR.js +1 -0
  49. package/site/.vitepress/dist/assets/api_webflo-routing_HttpEvent_waitUntil.md.DyQZLhPR.lean.js +1 -0
  50. package/site/.vitepress/dist/assets/api_webflo-routing_HttpEvent_waitUntilNavigate.md.DKLylwhl.js +1 -0
  51. package/site/.vitepress/dist/assets/api_webflo-routing_HttpEvent_waitUntilNavigate.md.DKLylwhl.lean.js +1 -0
  52. package/site/.vitepress/dist/assets/api_webflo-routing_HttpSession.md.bkeCy7_Q.js +1 -0
  53. package/site/.vitepress/dist/assets/api_webflo-routing_HttpSession.md.bkeCy7_Q.lean.js +1 -0
  54. package/site/.vitepress/dist/assets/api_webflo-routing_HttpState.md.DO53IAM1.js +1 -0
  55. package/site/.vitepress/dist/assets/api_webflo-routing_HttpState.md.DO53IAM1.lean.js +1 -0
  56. package/site/.vitepress/dist/assets/api_webflo-routing_HttpUser.md.CfsaBFdl.js +1 -0
  57. package/site/.vitepress/dist/assets/api_webflo-routing_HttpUser.md.CfsaBFdl.lean.js +1 -0
  58. package/site/.vitepress/dist/assets/api_webflo-routing_handler.md.B0eVFluL.js +11 -0
  59. package/site/.vitepress/dist/assets/api_webflo-routing_handler.md.B0eVFluL.lean.js +1 -0
  60. package/site/.vitepress/dist/assets/api_webflo-routing_handler_fetch.md.CpwUMFMz.js +1 -0
  61. package/site/.vitepress/dist/assets/api_webflo-routing_handler_fetch.md.CpwUMFMz.lean.js +1 -0
  62. package/site/.vitepress/dist/assets/api_webflo-routing_handler_next.md.CA4tDXtV.js +7 -0
  63. package/site/.vitepress/dist/assets/api_webflo-routing_handler_next.md.CA4tDXtV.lean.js +1 -0
  64. package/site/.vitepress/dist/assets/app.B989j-Lw.js +256 -0
  65. package/site/.vitepress/dist/assets/chunks/@localSearchIndexroot.IcaIAE_s.js +1 -0
  66. package/site/.vitepress/dist/assets/chunks/VPLocalSearchBox.CxstEVOs.js +8 -0
  67. package/site/.vitepress/dist/assets/chunks/arc.CNNknwAo.js +1 -0
  68. package/site/.vitepress/dist/assets/chunks/architectureDiagram-VXUJARFQ.DCLYhNHD.js +36 -0
  69. package/site/.vitepress/dist/assets/chunks/basePickBy.Cxi84nlK.js +1 -0
  70. package/site/.vitepress/dist/assets/chunks/baseUniq.DDTOgUAc.js +1 -0
  71. package/site/.vitepress/dist/assets/chunks/blockDiagram-VD42YOAC.BcpiarhA.js +122 -0
  72. package/site/.vitepress/dist/assets/chunks/c4Diagram-YG6GDRKO.BI_5dKaW.js +10 -0
  73. package/site/.vitepress/dist/assets/chunks/channel.CxIJmpCu.js +1 -0
  74. package/site/.vitepress/dist/assets/chunks/chunk-4BX2VUAB.C6goADHj.js +1 -0
  75. package/site/.vitepress/dist/assets/chunks/chunk-55IACEB6.BLGj4Pud.js +1 -0
  76. package/site/.vitepress/dist/assets/chunks/chunk-B4BG7PRW.DsAzxoJ_.js +165 -0
  77. package/site/.vitepress/dist/assets/chunks/chunk-DI55MBZ5.BnE2NeEC.js +220 -0
  78. package/site/.vitepress/dist/assets/chunks/chunk-FMBD7UC4.DGeT8zu4.js +15 -0
  79. package/site/.vitepress/dist/assets/chunks/chunk-QN33PNHL.Bc78W0xn.js +1 -0
  80. package/site/.vitepress/dist/assets/chunks/chunk-QZHKN3VN.BFSSbGEs.js +1 -0
  81. package/site/.vitepress/dist/assets/chunks/chunk-TZMSLE5B.DyZR9PPb.js +1 -0
  82. package/site/.vitepress/dist/assets/chunks/classDiagram-2ON5EDUG._0fUH5ha.js +1 -0
  83. package/site/.vitepress/dist/assets/chunks/classDiagram-v2-WZHVMYZB._0fUH5ha.js +1 -0
  84. package/site/.vitepress/dist/assets/chunks/clone.BYyOtvOD.js +1 -0
  85. package/site/.vitepress/dist/assets/chunks/cose-bilkent-S5V4N54A.TlhUFBAR.js +1 -0
  86. package/site/.vitepress/dist/assets/chunks/cytoscape.esm.CyJtwmzi.js +331 -0
  87. package/site/.vitepress/dist/assets/chunks/dagre-6UL2VRFP.D__9IqfC.js +4 -0
  88. package/site/.vitepress/dist/assets/chunks/defaultLocale.C4B-KCzX.js +1 -0
  89. package/site/.vitepress/dist/assets/chunks/diagram-PSM6KHXK.DYSDWndU.js +24 -0
  90. package/site/.vitepress/dist/assets/chunks/diagram-QEK2KX5R.FZi2c8WB.js +43 -0
  91. package/site/.vitepress/dist/assets/chunks/diagram-S2PKOQOG.D-Xxss9Z.js +24 -0
  92. package/site/.vitepress/dist/assets/chunks/erDiagram-Q2GNP2WA.CNdrcxqE.js +60 -0
  93. package/site/.vitepress/dist/assets/chunks/flowDiagram-NV44I4VS.C_6PWuGm.js +162 -0
  94. package/site/.vitepress/dist/assets/chunks/framework.9Uv4PgnO.js +18 -0
  95. package/site/.vitepress/dist/assets/chunks/ganttDiagram-LVOFAZNH._TBJejxF.js +267 -0
  96. package/site/.vitepress/dist/assets/chunks/gitGraphDiagram-NY62KEGX.BmQODSWS.js +65 -0
  97. package/site/.vitepress/dist/assets/chunks/graph.BHWe3GDJ.js +1 -0
  98. package/site/.vitepress/dist/assets/chunks/infoDiagram-ER5ION4S.CbdOaGtv.js +2 -0
  99. package/site/.vitepress/dist/assets/chunks/init.Gi6I4Gst.js +1 -0
  100. package/site/.vitepress/dist/assets/chunks/journeyDiagram-XKPGCS4Q.B-PjYmDZ.js +139 -0
  101. package/site/.vitepress/dist/assets/chunks/kanban-definition-3W4ZIXB7.Bc_8e9KR.js +89 -0
  102. package/site/.vitepress/dist/assets/chunks/katex.BbEIqZs1.js +261 -0
  103. package/site/.vitepress/dist/assets/chunks/layout.hswMW8l0.js +1 -0
  104. package/site/.vitepress/dist/assets/chunks/linear.CUHYPplj.js +1 -0
  105. package/site/.vitepress/dist/assets/chunks/mindmap-definition-VGOIOE7T.CvIaZI8e.js +68 -0
  106. package/site/.vitepress/dist/assets/chunks/ordinal.BYWQX77i.js +1 -0
  107. package/site/.vitepress/dist/assets/chunks/pieDiagram-ADFJNKIX.BSTQM2Ms.js +30 -0
  108. package/site/.vitepress/dist/assets/chunks/quadrantDiagram-AYHSOK5B.CkEJjNYC.js +7 -0
  109. package/site/.vitepress/dist/assets/chunks/requirementDiagram-UZGBJVZJ.QsTahBza.js +64 -0
  110. package/site/.vitepress/dist/assets/chunks/sankeyDiagram-TZEHDZUN.NRsUNMzF.js +10 -0
  111. package/site/.vitepress/dist/assets/chunks/sequenceDiagram-WL72ISMW.rq-YLOb-.js +145 -0
  112. package/site/.vitepress/dist/assets/chunks/stateDiagram-FKZM4ZOC.BseVQjcW.js +1 -0
  113. package/site/.vitepress/dist/assets/chunks/stateDiagram-v2-4FDKWEC3.CH4mdaj_.js +1 -0
  114. package/site/.vitepress/dist/assets/chunks/theme.Jp0RA4YE.js +2 -0
  115. package/site/.vitepress/dist/assets/chunks/timeline-definition-IT6M3QCI.N8DNMk16.js +61 -0
  116. package/site/.vitepress/dist/assets/chunks/treemap-KMMF4GRG.CAwkr_aP.js +128 -0
  117. package/site/.vitepress/dist/assets/chunks/virtual_mermaid-config.DDnGl6nM.js +1 -0
  118. package/site/.vitepress/dist/assets/chunks/xychartDiagram-PRI3JC2R.CF4KVQhG.js +7 -0
  119. package/site/.vitepress/dist/assets/contributing.md.gqIMCtVI.js +1 -0
  120. package/site/.vitepress/dist/assets/contributing.md.gqIMCtVI.lean.js +1 -0
  121. package/site/.vitepress/dist/assets/docs.md.hvbqYbFY.js +1 -0
  122. package/site/.vitepress/dist/assets/docs.md.hvbqYbFY.lean.js +1 -0
  123. package/site/.vitepress/dist/assets/docs_advanced.md.D048cxnq.js +1 -0
  124. package/site/.vitepress/dist/assets/docs_advanced.md.D048cxnq.lean.js +1 -0
  125. package/site/.vitepress/dist/assets/docs_advanced_lifecycles.md.BICPL-da.js +1 -0
  126. package/site/.vitepress/dist/assets/docs_advanced_lifecycles.md.BICPL-da.lean.js +1 -0
  127. package/site/.vitepress/dist/assets/docs_advanced_redirects.md.BMha6D3W.js +1 -0
  128. package/site/.vitepress/dist/assets/docs_advanced_redirects.md.BMha6D3W.lean.js +1 -0
  129. package/site/.vitepress/dist/assets/docs_advanced_routing.md.Cv63UDJF.js +1 -0
  130. package/site/.vitepress/dist/assets/docs_advanced_routing.md.Cv63UDJF.lean.js +1 -0
  131. package/site/.vitepress/dist/assets/docs_concepts.md.Clwx81Hz.js +3 -0
  132. package/site/.vitepress/dist/assets/docs_concepts.md.Clwx81Hz.lean.js +1 -0
  133. package/site/.vitepress/dist/assets/docs_concepts_realtime.md.CBrMq5Ln.js +218 -0
  134. package/site/.vitepress/dist/assets/docs_concepts_realtime.md.CBrMq5Ln.lean.js +1 -0
  135. package/site/.vitepress/dist/assets/docs_concepts_rendering.md.BWr5Lxgn.js +24 -0
  136. package/site/.vitepress/dist/assets/docs_concepts_rendering.md.BWr5Lxgn.lean.js +1 -0
  137. package/site/.vitepress/dist/assets/docs_concepts_request-response.md.DhplzNqt.js +4 -0
  138. package/site/.vitepress/dist/assets/docs_concepts_request-response.md.DhplzNqt.lean.js +1 -0
  139. package/site/.vitepress/dist/assets/docs_concepts_routing.md.C2KO1eAu.js +228 -0
  140. package/site/.vitepress/dist/assets/docs_concepts_routing.md.C2KO1eAu.lean.js +1 -0
  141. package/site/.vitepress/dist/assets/docs_concepts_state.md.CtbMVS_K.js +10 -0
  142. package/site/.vitepress/dist/assets/docs_concepts_state.md.CtbMVS_K.lean.js +1 -0
  143. package/site/.vitepress/dist/assets/docs_concepts_templates.md.4i6jQcYw.js +15 -0
  144. package/site/.vitepress/dist/assets/docs_concepts_templates.md.4i6jQcYw.lean.js +1 -0
  145. package/site/.vitepress/dist/assets/docs_getting-started.md.CNGtwB_L.js +75 -0
  146. package/site/.vitepress/dist/assets/docs_getting-started.md.CNGtwB_L.lean.js +1 -0
  147. package/site/.vitepress/dist/assets/docs_tech-stack.md.xiWGQstL.js +1 -0
  148. package/site/.vitepress/dist/assets/docs_tech-stack.md.xiWGQstL.lean.js +1 -0
  149. package/site/.vitepress/dist/assets/examples.md.BqDfJd4G.js +1 -0
  150. package/site/.vitepress/dist/assets/examples.md.BqDfJd4G.lean.js +1 -0
  151. package/site/.vitepress/dist/assets/examples_pwa.md.DREN7J2F.js +1 -0
  152. package/site/.vitepress/dist/assets/examples_pwa.md.DREN7J2F.lean.js +1 -0
  153. package/site/.vitepress/dist/assets/examples_web.md.DUhZ0IQL.js +1 -0
  154. package/site/.vitepress/dist/assets/examples_web.md.DUhZ0IQL.lean.js +1 -0
  155. package/site/.vitepress/dist/assets/faq.md.DtfXaXUI.js +1 -0
  156. package/site/.vitepress/dist/assets/faq.md.DtfXaXUI.lean.js +1 -0
  157. package/site/.vitepress/dist/assets/guides.md.BVdQyeU-.js +1 -0
  158. package/site/.vitepress/dist/assets/guides.md.BVdQyeU-.lean.js +1 -0
  159. package/site/.vitepress/dist/assets/guides_guide-auth.md.DNFuRudp.js +1 -0
  160. package/site/.vitepress/dist/assets/guides_guide-auth.md.DNFuRudp.lean.js +1 -0
  161. package/site/.vitepress/dist/assets/guides_guide-file-upload.md.DRbRLk7h.js +1 -0
  162. package/site/.vitepress/dist/assets/guides_guide-file-upload.md.DRbRLk7h.lean.js +1 -0
  163. package/site/.vitepress/dist/assets/guides_guide-service-worker.md.B0wEVcQw.js +1 -0
  164. package/site/.vitepress/dist/assets/guides_guide-service-worker.md.B0wEVcQw.lean.js +1 -0
  165. package/site/.vitepress/dist/assets/guides_tutorial-1-todo.md.D9ket3Re.js +3 -0
  166. package/site/.vitepress/dist/assets/guides_tutorial-1-todo.md.D9ket3Re.lean.js +1 -0
  167. package/site/.vitepress/dist/assets/index.md.DB-CsGEX.js +1 -0
  168. package/site/.vitepress/dist/assets/index.md.DB-CsGEX.lean.js +1 -0
  169. package/site/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  170. package/site/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  171. package/site/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  172. package/site/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  173. package/site/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  174. package/site/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  175. package/site/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  176. package/site/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  177. package/site/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  178. package/site/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  179. package/site/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  180. package/site/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  181. package/site/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  182. package/site/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  183. package/site/.vitepress/dist/assets/recipes_realtime.md.CX1Vs2FD.js +1 -0
  184. package/site/.vitepress/dist/assets/recipes_realtime.md.CX1Vs2FD.lean.js +1 -0
  185. package/site/.vitepress/dist/assets/recipes_streaming.md.C7GFShgF.js +5 -0
  186. package/site/.vitepress/dist/assets/recipes_streaming.md.C7GFShgF.lean.js +1 -0
  187. package/site/.vitepress/dist/assets/reference_cli.md.DERqaQJm.js +1 -0
  188. package/site/.vitepress/dist/assets/reference_cli.md.DERqaQJm.lean.js +1 -0
  189. package/site/.vitepress/dist/assets/reference_config.md.DI_yG-7N.js +1 -0
  190. package/site/.vitepress/dist/assets/reference_config.md.DI_yG-7N.lean.js +1 -0
  191. package/site/.vitepress/dist/assets/reference_tools.md.DZxjdVFX.js +1 -0
  192. package/site/.vitepress/dist/assets/reference_tools.md.DZxjdVFX.lean.js +1 -0
  193. package/site/.vitepress/dist/assets/style.BD0LzINo.css +1 -0
  194. package/site/.vitepress/dist/contributing.html +55 -0
  195. package/site/.vitepress/dist/docs/advanced/lifecycles.html +55 -0
  196. package/site/.vitepress/dist/docs/advanced/redirects.html +55 -0
  197. package/site/.vitepress/dist/docs/advanced/routing.html +55 -0
  198. package/site/.vitepress/dist/docs/advanced.html +55 -0
  199. package/site/.vitepress/dist/docs/concepts/realtime.html +272 -0
  200. package/site/.vitepress/dist/docs/concepts/rendering.html +78 -0
  201. package/site/.vitepress/dist/docs/concepts/request-response.html +58 -0
  202. package/site/.vitepress/dist/docs/concepts/routing.html +282 -0
  203. package/site/.vitepress/dist/docs/concepts/state.html +64 -0
  204. package/site/.vitepress/dist/docs/concepts/templates.html +69 -0
  205. package/site/.vitepress/dist/docs/concepts.html +57 -0
  206. package/site/.vitepress/dist/docs/getting-started.html +129 -0
  207. package/site/.vitepress/dist/docs/tech-stack.html +55 -0
  208. package/site/.vitepress/dist/docs.html +55 -0
  209. package/site/.vitepress/dist/examples/pwa.html +55 -0
  210. package/site/.vitepress/dist/examples/web.html +55 -0
  211. package/site/.vitepress/dist/examples.html +55 -0
  212. package/site/.vitepress/dist/faq.html +55 -0
  213. package/site/.vitepress/dist/guides/guide-auth.html +55 -0
  214. package/site/.vitepress/dist/guides/guide-file-upload.html +55 -0
  215. package/site/.vitepress/dist/guides/guide-service-worker.html +55 -0
  216. package/site/.vitepress/dist/guides/tutorial-1-todo.html +57 -0
  217. package/site/.vitepress/dist/guides.html +55 -0
  218. package/site/.vitepress/dist/hashmap.json +1 -0
  219. package/site/.vitepress/dist/img/brand/logo-670x670.png +0 -0
  220. package/site/.vitepress/dist/index.html +55 -0
  221. package/site/.vitepress/dist/recipes/realtime.html +55 -0
  222. package/site/.vitepress/dist/recipes/streaming.html +59 -0
  223. package/site/.vitepress/dist/reference/cli.html +55 -0
  224. package/site/.vitepress/dist/reference/config.html +55 -0
  225. package/site/.vitepress/dist/reference/tools.html +55 -0
  226. package/site/.vitepress/dist/vp-icons.css +1 -0
  227. package/site/.vitepress/cache/deps/@braintree_sanitize-url 2.js +0 -93
  228. package/site/.vitepress/cache/deps/@braintree_sanitize-url.js 2.map +0 -7
  229. package/site/.vitepress/cache/deps/_metadata 2.json +0 -85
  230. package/site/.vitepress/cache/deps/_metadata.json +0 -85
  231. package/site/.vitepress/cache/deps/chunk-BUSYA2B4 2.js +0 -9
  232. package/site/.vitepress/cache/deps/chunk-BUSYA2B4.js 2.map +0 -7
  233. package/site/.vitepress/cache/deps/chunk-Q2AYPHVK 2.js +0 -9719
  234. package/site/.vitepress/cache/deps/chunk-Q2AYPHVK.js 2.map +0 -7
  235. package/site/.vitepress/cache/deps/chunk-QAXAIFA7 2.js +0 -12705
  236. package/site/.vitepress/cache/deps/chunk-QAXAIFA7.js 2.map +0 -7
  237. package/site/.vitepress/cache/deps/cytoscape 2.js +0 -30278
  238. package/site/.vitepress/cache/deps/cytoscape-cose-bilkent 2.js +0 -4710
  239. package/site/.vitepress/cache/deps/cytoscape-cose-bilkent.js 2.map +0 -7
  240. package/site/.vitepress/cache/deps/cytoscape.js 2.map +0 -7
  241. package/site/.vitepress/cache/deps/dayjs 2.js +0 -285
  242. package/site/.vitepress/cache/deps/dayjs.js 2.map +0 -7
  243. package/site/.vitepress/cache/deps/debug 2.js +0 -453
  244. package/site/.vitepress/cache/deps/debug.js 2.map +0 -7
  245. package/site/.vitepress/cache/deps/package 2.json +0 -3
  246. package/site/.vitepress/cache/deps/vitepress___@vue_devtools-api 2.js +0 -4507
  247. package/site/.vitepress/cache/deps/vitepress___@vue_devtools-api.js 2.map +0 -7
  248. package/site/.vitepress/cache/deps/vitepress___@vueuse_core 2.js +0 -584
  249. package/site/.vitepress/cache/deps/vitepress___@vueuse_core.js 2.map +0 -7
  250. package/site/.vitepress/cache/deps/vitepress___@vueuse_integrations_useFocusTrap 2.js +0 -1166
  251. package/site/.vitepress/cache/deps/vitepress___@vueuse_integrations_useFocusTrap.js 2.map +0 -7
  252. package/site/.vitepress/cache/deps/vitepress___mark__js_src_vanilla__js 2.js +0 -1667
  253. package/site/.vitepress/cache/deps/vitepress___mark__js_src_vanilla__js.js 2.map +0 -7
  254. package/site/.vitepress/cache/deps/vitepress___minisearch 2.js +0 -1815
  255. package/site/.vitepress/cache/deps/vitepress___minisearch.js 2.map +0 -7
  256. package/site/.vitepress/cache/deps/vue 2.js +0 -344
  257. package/site/.vitepress/cache/deps/vue.js 2.map +0 -7
  258. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/@braintree_sanitize-url.js +0 -0
  259. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/@braintree_sanitize-url.js.map +0 -0
  260. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/chunk-BUSYA2B4.js +0 -0
  261. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/chunk-BUSYA2B4.js.map +0 -0
  262. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/chunk-Q2AYPHVK.js +0 -0
  263. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/chunk-Q2AYPHVK.js.map +0 -0
  264. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/chunk-QAXAIFA7.js +0 -0
  265. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/chunk-QAXAIFA7.js.map +0 -0
  266. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/cytoscape-cose-bilkent.js +0 -0
  267. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/cytoscape-cose-bilkent.js.map +0 -0
  268. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/cytoscape.js +0 -0
  269. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/cytoscape.js.map +0 -0
  270. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/dayjs.js +0 -0
  271. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/dayjs.js.map +0 -0
  272. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/debug.js +0 -0
  273. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/debug.js.map +0 -0
  274. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/package.json +0 -0
  275. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/vitepress___@vue_devtools-api.js +0 -0
  276. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/vitepress___@vue_devtools-api.js.map +0 -0
  277. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/vitepress___@vueuse_core.js +0 -0
  278. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/vitepress___@vueuse_core.js.map +0 -0
  279. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/vitepress___@vueuse_integrations_useFocusTrap.js +0 -0
  280. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/vitepress___@vueuse_integrations_useFocusTrap.js.map +0 -0
  281. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/vitepress___mark__js_src_vanilla__js.js +0 -0
  282. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/vitepress___mark__js_src_vanilla__js.js.map +0 -0
  283. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/vitepress___minisearch.js +0 -0
  284. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/vitepress___minisearch.js.map +0 -0
  285. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/vue.js +0 -0
  286. /package/site/.vitepress/cache/{deps → deps_temp_9b107c53}/vue.js.map +0 -0
@@ -0,0 +1,129 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-US" dir="ltr">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>Getting Started with Webflo | Webflo</title>
7
+ <meta name="description" content="A universal, standards-first web framework for building web-native apps.">
8
+ <meta name="generator" content="VitePress v1.6.4">
9
+ <link rel="preload stylesheet" href="/assets/style.BD0LzINo.css" as="style">
10
+ <link rel="preload stylesheet" href="/vp-icons.css" as="style">
11
+
12
+ <script type="module" src="/assets/app.B989j-Lw.js"></script>
13
+ <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
14
+ <link rel="modulepreload" href="/assets/chunks/framework.9Uv4PgnO.js">
15
+ <link rel="modulepreload" href="/assets/chunks/theme.Jp0RA4YE.js">
16
+ <link rel="modulepreload" href="/assets/chunks/katex.BbEIqZs1.js">
17
+ <link rel="modulepreload" href="/assets/chunks/dagre-6UL2VRFP.D__9IqfC.js">
18
+ <link rel="modulepreload" href="/assets/chunks/cose-bilkent-S5V4N54A.TlhUFBAR.js">
19
+ <link rel="modulepreload" href="/assets/chunks/c4Diagram-YG6GDRKO.BI_5dKaW.js">
20
+ <link rel="modulepreload" href="/assets/chunks/flowDiagram-NV44I4VS.C_6PWuGm.js">
21
+ <link rel="modulepreload" href="/assets/chunks/erDiagram-Q2GNP2WA.CNdrcxqE.js">
22
+ <link rel="modulepreload" href="/assets/chunks/gitGraphDiagram-NY62KEGX.BmQODSWS.js">
23
+ <link rel="modulepreload" href="/assets/chunks/ganttDiagram-LVOFAZNH._TBJejxF.js">
24
+ <link rel="modulepreload" href="/assets/chunks/infoDiagram-ER5ION4S.CbdOaGtv.js">
25
+ <link rel="modulepreload" href="/assets/chunks/pieDiagram-ADFJNKIX.BSTQM2Ms.js">
26
+ <link rel="modulepreload" href="/assets/chunks/quadrantDiagram-AYHSOK5B.CkEJjNYC.js">
27
+ <link rel="modulepreload" href="/assets/chunks/xychartDiagram-PRI3JC2R.CF4KVQhG.js">
28
+ <link rel="modulepreload" href="/assets/chunks/requirementDiagram-UZGBJVZJ.QsTahBza.js">
29
+ <link rel="modulepreload" href="/assets/chunks/sequenceDiagram-WL72ISMW.rq-YLOb-.js">
30
+ <link rel="modulepreload" href="/assets/chunks/classDiagram-2ON5EDUG._0fUH5ha.js">
31
+ <link rel="modulepreload" href="/assets/chunks/classDiagram-v2-WZHVMYZB._0fUH5ha.js">
32
+ <link rel="modulepreload" href="/assets/chunks/stateDiagram-FKZM4ZOC.BseVQjcW.js">
33
+ <link rel="modulepreload" href="/assets/chunks/stateDiagram-v2-4FDKWEC3.CH4mdaj_.js">
34
+ <link rel="modulepreload" href="/assets/chunks/journeyDiagram-XKPGCS4Q.B-PjYmDZ.js">
35
+ <link rel="modulepreload" href="/assets/chunks/timeline-definition-IT6M3QCI.N8DNMk16.js">
36
+ <link rel="modulepreload" href="/assets/chunks/mindmap-definition-VGOIOE7T.CvIaZI8e.js">
37
+ <link rel="modulepreload" href="/assets/chunks/kanban-definition-3W4ZIXB7.Bc_8e9KR.js">
38
+ <link rel="modulepreload" href="/assets/chunks/sankeyDiagram-TZEHDZUN.NRsUNMzF.js">
39
+ <link rel="modulepreload" href="/assets/chunks/diagram-S2PKOQOG.D-Xxss9Z.js">
40
+ <link rel="modulepreload" href="/assets/chunks/diagram-QEK2KX5R.FZi2c8WB.js">
41
+ <link rel="modulepreload" href="/assets/chunks/blockDiagram-VD42YOAC.BcpiarhA.js">
42
+ <link rel="modulepreload" href="/assets/chunks/architectureDiagram-VXUJARFQ.DCLYhNHD.js">
43
+ <link rel="modulepreload" href="/assets/chunks/diagram-PSM6KHXK.DYSDWndU.js">
44
+ <link rel="modulepreload" href="/assets/chunks/virtual_mermaid-config.DDnGl6nM.js">
45
+ <link rel="modulepreload" href="/assets/docs_getting-started.md.CNGtwB_L.lean.js">
46
+ <meta name="theme-color" content="#0f172a">
47
+ <script id="check-dark-mode">document.documentElement.classList.add("dark");</script>
48
+ <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
49
+ </head>
50
+ <body>
51
+ <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0b0ada53></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0b0ada53>Skip to content</a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/" data-v-1168a8e4><!--[--><!--]--><!----><span data-v-1168a8e4>Webflo</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink active" href="/docs" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Docs</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/api" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>API</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/guides" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Guides</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/examples" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Examples</span><!--]--></a><!--]--><!--]--></nav><!----><!----><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/webqit/webflo" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><!----><!----><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/webqit/webflo" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-8a42e2b4><button data-v-8a42e2b4>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 has-active" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>Getting Started</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Welcome</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/getting-started" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Quickstart</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>Concepts</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/concepts" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Concepts Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/concepts/routing" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Webflo Routing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/concepts/rendering" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Rendering</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/concepts/templates" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Templates</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/concepts/state" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>State Management</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/concepts/request-response" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Request/Response Lifecycle</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/concepts/realtime" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Webflo Realtime</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>Advanced</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/advanced" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Advanced Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/advanced/redirects" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Redirects</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>API Reference</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><section class="VPSidebarItem level-1 collapsible collapsed" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h3 class="text" data-v-b3fd67f8>Webflo Routing</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b3fd67f8><span class="vpi-chevron-right caret-icon" data-v-b3fd67f8></span></div></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-routing/handler" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Handler</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-routing/HttpEvent" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>HttpEvent</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-routing/handler/next" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>next</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-routing/handler/fetch" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>fetch</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h3 class="text" data-v-b3fd67f8>Webflo Fetch</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b3fd67f8><span class="vpi-chevron-right caret-icon" data-v-b3fd67f8></span></div></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-fetch/fetch" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>fetch</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-fetch/Request" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Request</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-fetch/Response" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Response</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-fetch/LiveResponse" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>LiveResponse</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-fetch/FormData" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>FormData</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-fetch/Headers" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Headers</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h3 class="text" data-v-b3fd67f8>Webflo Messaging</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b3fd67f8><span class="vpi-chevron-right caret-icon" data-v-b3fd67f8></span></div></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-messaging/MessageChannel" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>MessageChannel</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-messaging/MessagePort" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>MessagePort</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-messaging/MessageEvent" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>MessageEvent</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>Guides & Recipes</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/guides/tutorial-1-todo" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Tutorial: Todo App</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/guides/guide-auth" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Auth</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/guides/guide-file-upload" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>File Upload</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/guides/guide-service-worker" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Service Worker</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/recipes/streaming" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Streaming</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/recipes/realtime" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Realtime Patterns</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>Examples</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/examples/web" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Web Example</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/examples/pwa" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>PWA Example</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>Reference</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/reference/cli" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>CLI</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/reference/config" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Config</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/reference/tools" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Tools</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/faq" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>FAQ</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/contributing" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Contributing</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _docs_getting-started" data-v-39a288b8><div><h1 id="getting-started-with-webflo" tabindex="-1">Getting Started with Webflo <a class="header-anchor" href="#getting-started-with-webflo" aria-label="Permalink to &quot;Getting Started with Webflo&quot;">​</a></h1><p>Welcome! This guide will help you build your first Webflo app from scratch and get it running in minutes, even if you’ve never used the framework before. You’ll learn not just the “how,” but the “why”—and see your results live in the browser.</p><h2 id="prerequisites" tabindex="-1">Prerequisites <a class="header-anchor" href="#prerequisites" aria-label="Permalink to &quot;Prerequisites&quot;">​</a></h2><ul><li><strong>Node.js</strong> 18+ installed</li><li>Basic knowledge of HTML, CSS, and JavaScript</li><li>A terminal/command line interface</li></ul><h2 id="installation" tabindex="-1">Installation <a class="header-anchor" href="#installation" aria-label="Permalink to &quot;Installation&quot;">​</a></h2><h3 id="option-1-global-installation-recommended" tabindex="-1">Option 1: Global Installation (Recommended) <a class="header-anchor" href="#option-1-global-installation-recommended" aria-label="Permalink to &quot;Option 1: Global Installation (Recommended)&quot;">​</a></h3><p>Install Webflo globally to use the CLI from anywhere:</p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#FFCB6B;">npm</span><span style="color:#C3E88D;"> install</span><span style="color:#C3E88D;"> -g</span><span style="color:#C3E88D;"> @webqit/webflo</span></span></code></pre></div><h3 id="option-2-local-installation" tabindex="-1">Option 2: Local Installation <a class="header-anchor" href="#option-2-local-installation" aria-label="Permalink to &quot;Option 2: Local Installation&quot;">​</a></h3><p>Install Webflo as a dependency in your project:</p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#FFCB6B;">npm</span><span style="color:#C3E88D;"> install</span><span style="color:#C3E88D;"> @webqit/webflo</span></span></code></pre></div><p>The scope you choose will determine how you run Webflo commands. The Webflo commands in the rest of this page will show in both <code>global</code> and <code>local</code> styles.</p><h2 id="creating-a-new-project" tabindex="-1">Creating a New Project <a class="header-anchor" href="#creating-a-new-project" aria-label="Permalink to &quot;Creating a New Project&quot;">​</a></h2><p>Webflo provides a CLI command to scaffold new projects:</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-Tz9C0" id="tab-ffVczHY" checked><label data-title="global" for="tab-ffVczHY">global</label><input type="radio" name="group-Tz9C0" id="tab-JiNrZ2l"><label data-title="local" for="tab-JiNrZ2l">local</label></div><div class="blocks"><div class="language-bash active"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#FFCB6B;">webflo</span><span style="color:#C3E88D;"> init</span><span style="color:#C3E88D;"> my-webflo-app</span></span></code></pre></div><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#FFCB6B;">npx</span><span style="color:#C3E88D;"> webflo</span><span style="color:#C3E88D;"> init</span><span style="color:#C3E88D;"> my-webflo-app</span></span></code></pre></div></div></div><p>This will create a new directory called <code>my-webflo-app</code> with a basic Webflo project structure.</p><div class="tip custom-block"><p class="custom-block-title">What happens?</p><ul><li>A starter project is scaffolded from the selected template</li><li>Minimal scripts are added to <code>package.json</code></li><li>Public assets and the <code>app/</code> directory are created</li></ul></div><h3 id="create-options" tabindex="-1">Create Options <a class="header-anchor" href="#create-options" aria-label="Permalink to &quot;Create Options&quot;">​</a></h3><p>The above command could take a project title and project description too:</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-_OZ2U" id="tab-weBcCBV" checked><label data-title="global" for="tab-weBcCBV">global</label><input type="radio" name="group-_OZ2U" id="tab-ntmpLtq"><label data-title="local" for="tab-ntmpLtq">local</label></div><div class="blocks"><div class="language-bash active"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#FFCB6B;">webflo</span><span style="color:#C3E88D;"> init</span><span style="color:#C3E88D;"> my-webflo-app</span><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">My Webflo App</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">My first ever Webflo app</span><span style="color:#89DDFF;">&quot;</span></span></code></pre></div><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#FFCB6B;">npx</span><span style="color:#C3E88D;"> webflo</span><span style="color:#C3E88D;"> init</span><span style="color:#C3E88D;"> my-webflo-app</span><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">My Webflo App</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">My first ever Webflo app</span><span style="color:#89DDFF;">&quot;</span></span></code></pre></div></div></div><p>And you can specify a template to use:</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-UtcW_" id="tab-94D3W5S" checked><label data-title="global" for="tab-94D3W5S">global</label><input type="radio" name="group-UtcW_" id="tab-Lr0TwED"><label data-title="local" for="tab-Lr0TwED">local</label></div><div class="blocks"><div class="language-bash active"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#FFCB6B;">webflo</span><span style="color:#C3E88D;"> init</span><span style="color:#C3E88D;"> my-webflo-app</span><span style="color:#C3E88D;"> --template=web</span></span></code></pre></div><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#FFCB6B;">npx</span><span style="color:#C3E88D;"> webflo</span><span style="color:#C3E88D;"> init</span><span style="color:#C3E88D;"> my-webflo-app</span><span style="color:#C3E88D;"> --template=web</span></span></code></pre></div></div></div><p>The default is: <code>web</code>.</p><h3 id="available-templates" tabindex="-1">Available Templates <a class="header-anchor" href="#available-templates" aria-label="Permalink to &quot;Available Templates&quot;">​</a></h3><p>Webflo comes with built-in templates:</p><ul><li><strong>web</strong> - Standard web application template.<br>Choose for a minimal, conventional web app</li><li><strong>pwa</strong> - Progressive Web App template with service worker.<br>Choose if you want service worker and offline features from the start</li></ul><p>Templates are just starting points — they can evolve and expand freely as your project grows.</p><h3 id="project-structure" tabindex="-1">Project Structure <a class="header-anchor" href="#project-structure" aria-label="Permalink to &quot;Project Structure&quot;">​</a></h3><p>After initialization, your project will have the following structure:</p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span>my-webflo-app/</span></span>
52
+ <span class="line"><span>├── app/</span></span>
53
+ <span class="line"><span>│ ├── handler.server.js # Server-side route handlers</span></span>
54
+ <span class="line"><span>│ └── page.html # Page template</span></span>
55
+ <span class="line"><span>├── public/</span></span>
56
+ <span class="line"><span>│ ├── assets/</span></span>
57
+ <span class="line"><span>│ │ └── app.css # Styles</span></span>
58
+ <span class="line"><span>│ ├── index.html # Entry point</span></span>
59
+ <span class="line"><span>│ └── manifest.json # PWA manifest (if using PWA template)</span></span>
60
+ <span class="line"><span>├── package.json</span></span>
61
+ <span class="line"><span>└── .webflo/ # Webflo configuration (generated)</span></span></code></pre></div><p>Note that this is only typical. A few things will vary depending on your chosen template.</p><h3 id="example-package-json-structure" tabindex="-1">Example <code>package.json</code> Structure <a class="header-anchor" href="#example-package-json-structure" aria-label="Permalink to &quot;Example `package.json` Structure&quot;">​</a></h3><p>The generated <code>package.json</code> for your project will include scripts like <code>dev</code>, <code>build</code>, <code>start</code>, among others:</p><div class="language-json"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#89DDFF;">{</span></span>
62
+ <span class="line"><span style="color:#89DDFF;"> &quot;</span><span style="color:#C792EA;">scripts</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">:</span><span style="color:#89DDFF;"> {</span></span>
63
+ <span class="line"><span style="color:#89DDFF;"> &quot;</span><span style="color:#FFCB6B;">dev</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">:</span><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">webflo start --dev</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>
64
+ <span class="line"><span style="color:#89DDFF;"> &quot;</span><span style="color:#FFCB6B;">build</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">:</span><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">webflo build</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>
65
+ <span class="line"><span style="color:#89DDFF;"> &quot;</span><span style="color:#FFCB6B;">start</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">:</span><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">webflo start</span><span style="color:#89DDFF;">&quot;</span></span>
66
+ <span class="line"><span style="color:#89DDFF;"> }</span></span>
67
+ <span class="line"><span style="color:#89DDFF;">}</span></span></code></pre></div><details><summary>Click here to see a more typical <code>package.json</code> that may be generated for you.</summary><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#89DDFF;">{</span></span>
68
+ <span class="line"><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">title</span><span style="color:#89DDFF;">&quot;</span><span style="color:#F07178;">: </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">My Webflo App</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#676E95;font-style:italic;"> // Human-readable title; set during init, auto-derived from name if omitted; used in templates/UI</span></span>
69
+ <span class="line"><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">name</span><span style="color:#89DDFF;">&quot;</span><span style="color:#F07178;">: </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">my-webflo-app</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#676E95;font-style:italic;"> // npm package name; set during init</span></span>
70
+ <span class="line"><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">description</span><span style="color:#89DDFF;">&quot;</span><span style="color:#F07178;">: </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">My first ever Webflo app</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#676E95;font-style:italic;"> // Shown in package managers and can be surfaced in UI</span></span>
71
+ <span class="line"><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">version</span><span style="color:#89DDFF;">&quot;</span><span style="color:#F07178;">: </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">1.0.0</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#676E95;font-style:italic;"> // Your app version; semver recommended</span></span>
72
+ <span class="line"><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">type</span><span style="color:#89DDFF;">&quot;</span><span style="color:#F07178;">: </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">module</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span><span style="color:#676E95;font-style:italic;"> // Use ES modules; Webflo tooling expects ESM</span></span>
73
+ <span class="line"><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">scripts</span><span style="color:#89DDFF;">&quot;</span><span style="color:#F07178;">: </span><span style="color:#89DDFF;">{</span></span>
74
+ <span class="line"><span style="color:#676E95;font-style:italic;"> // Builds HTML templates and client bundles into public/assets</span></span>
75
+ <span class="line"><span style="color:#89DDFF;"> &quot;</span><span style="color:#F07178;">build:html</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">:</span><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">oohtml bundle --recursive --outdir=public/assets --auto-embed=app</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>
76
+ <span class="line"><span style="color:#89DDFF;"> &quot;</span><span style="color:#F07178;">build:js</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">:</span><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">webflo generate::client --recursive --outdir=public/assets --auto-embed</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>
77
+ <span class="line"><span style="color:#676E95;font-style:italic;"> // Production build: runs both steps</span></span>
78
+ <span class="line"><span style="color:#89DDFF;"> &quot;</span><span style="color:#F07178;">build</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">:</span><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">npm run build:html &amp;&amp; npm run build:js</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>
79
+ <span class="line"><span style="color:#676E95;font-style:italic;"> // Development server with auto-rebuilds and fine-grained HMR</span></span>
80
+ <span class="line"><span style="color:#89DDFF;"> &quot;</span><span style="color:#F07178;">dev</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">:</span><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">webflo start --dev --build-sensitivity=2</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">,</span></span>
81
+ <span class="line"><span style="color:#676E95;font-style:italic;"> // Production server</span></span>
82
+ <span class="line"><span style="color:#89DDFF;"> &quot;</span><span style="color:#F07178;">start</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">:</span><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">webflo start</span><span style="color:#89DDFF;">&quot;</span></span>
83
+ <span class="line"><span style="color:#89DDFF;"> },</span></span>
84
+ <span class="line"><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">dependencies</span><span style="color:#89DDFF;">&quot;</span><span style="color:#F07178;">: </span><span style="color:#89DDFF;">{</span></span>
85
+ <span class="line"><span style="color:#676E95;font-style:italic;"> // Use a semver range for stability in standalone apps</span></span>
86
+ <span class="line"><span style="color:#89DDFF;"> &quot;</span><span style="color:#F07178;">@webqit/webflo</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">:</span><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">^1</span><span style="color:#89DDFF;">&quot;</span></span>
87
+ <span class="line"><span style="color:#89DDFF;"> },</span></span>
88
+ <span class="line"><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">devDependencies</span><span style="color:#89DDFF;">&quot;</span><span style="color:#F07178;">: </span><span style="color:#89DDFF;">{</span></span>
89
+ <span class="line"><span style="color:#676E95;font-style:italic;"> // CLI used to bundle HTML templates; semver range preferred over &quot;latest&quot;</span></span>
90
+ <span class="line"><span style="color:#89DDFF;"> &quot;</span><span style="color:#F07178;">@webqit/oohtml-cli</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">:</span><span style="color:#89DDFF;"> &quot;</span><span style="color:#C3E88D;">^2</span><span style="color:#89DDFF;">&quot;</span></span>
91
+ <span class="line"><span style="color:#89DDFF;"> },</span></span>
92
+ <span class="line"><span style="color:#676E95;font-style:italic;"> // Optional: constrain Node.js versions used to run your app</span></span>
93
+ <span class="line"><span style="color:#676E95;font-style:italic;"> // &quot;engines&quot;: { &quot;node&quot;: &quot;&gt;=18&quot; }</span></span>
94
+ <span class="line"><span style="color:#89DDFF;">}</span></span></code></pre></div><blockquote><p>Note that this is only typical. A few things will vary depending on your chosen template.</p></blockquote></details><p>You can customize as necessary.</p><div class="info custom-block"><p class="custom-block-title">Scripts &amp; customization</p><ul><li>You can customize <code>build:html</code> or <code>build:js</code> scripts if you need finer control</li><li>Add a <code>build:css</code> script if your CSS requires a build step; it&#39;ll be called in dev mode as necessary on CSS file changes</li><li>Adjust dev mode&#39;s rebuild frequency for assets with <code>--build-sensitivity</code> (e.g., <code>--build-sensitivity=2</code> — to defer rebuild until page reload; <code>0</code> — to turn off)</li></ul></div><h2 id="running-your-application" tabindex="-1">Running Your Application <a class="header-anchor" href="#running-your-application" aria-label="Permalink to &quot;Running Your Application&quot;">​</a></h2><p>Your Webflo app will run in either <em>dev</em> mode or <em>production</em> mode.</p><h3 id="development-mode" tabindex="-1">Development Mode <a class="header-anchor" href="#development-mode" aria-label="Permalink to &quot;Development Mode&quot;">​</a></h3><p>Start the development server:</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-bG4RF" id="tab-gjaRY2K" checked><label data-title="global" for="tab-gjaRY2K">global</label><input type="radio" name="group-bG4RF" id="tab-rlR2K54"><label data-title="npm" for="tab-rlR2K54">npm</label></div><div class="blocks"><div class="language-bash active"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#FFCB6B;">webflo</span><span style="color:#C3E88D;"> start</span><span style="color:#C3E88D;"> --dev</span></span></code></pre></div><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#FFCB6B;">npm</span><span style="color:#C3E88D;"> run</span><span style="color:#C3E88D;"> dev</span></span></code></pre></div></div></div><p>The server starts on <code>http://localhost:3000</code> by default.</p><div class="tip custom-block"><p class="custom-block-title">What happens? (dev)</p><ul><li>Webflo runs in development mode (with smart, incremental rebuilds on relevant file changes)</li><li>Fine-grained HMR applies updates without full page reloads when possible</li><li>Static assets are served from <code>public/</code>; routes resolve from <code>app/</code></li><li>Logs and errors appear in your terminal</li></ul></div><h3 id="development-options" tabindex="-1">Development Options <a class="header-anchor" href="#development-options" aria-label="Permalink to &quot;Development Options&quot;">​</a></h3><ul><li><code>--open</code> - Automatically open the browser</li><li><code>--port &lt;port&gt;</code> - Specify a different port</li></ul><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-yfp2Q" id="tab-TDXms6-" checked><label data-title="global" for="tab-TDXms6-">global</label><input type="radio" name="group-yfp2Q" id="tab-9pPBqPg"><label data-title="npm" for="tab-9pPBqPg">npm</label></div><div class="blocks"><div class="language-bash active"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#FFCB6B;">webflo</span><span style="color:#C3E88D;"> start</span><span style="color:#C3E88D;"> --dev</span><span style="color:#C3E88D;"> --open</span><span style="color:#C3E88D;"> --port</span><span style="color:#F78C6C;"> 8080</span></span></code></pre></div><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#FFCB6B;">npm</span><span style="color:#C3E88D;"> run</span><span style="color:#C3E88D;"> dev</span><span style="color:#C3E88D;"> --</span><span style="color:#C3E88D;"> --open</span><span style="color:#C3E88D;"> --port</span><span style="color:#F78C6C;"> 8080</span></span></code></pre></div></div></div><h3 id="webflo-build" tabindex="-1">Webflo Build <a class="header-anchor" href="#webflo-build" aria-label="Permalink to &quot;Webflo Build&quot;">​</a></h3><p>Build your application&#39;s client-side assets — <code>.js</code>, <code>.html</code>, and optionally <code>.css</code> (if <code>build:css</code> is configured above in <code>package.json</code>):</p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#FFCB6B;">npm</span><span style="color:#C3E88D;"> run</span><span style="color:#C3E88D;"> build</span></span></code></pre></div><p>This generates optimized static assets and bundles for the client-side of your app.</p><div class="tip custom-block"><p class="custom-block-title">What happens? (build)</p><ul><li>Client bundles are generated — <code>.js</code>→<code>public/app.js</code>, <code>.html</code>→<code>public/app.html</code></li><li>Asset references are injected into <code>public/index.html</code></li><li>Output is optimized for production</li></ul></div><p>In <em>dev</em> mode, this is not required as Webflo already kicks in Hot Module Replacement (HMR) as you make changes to JS, HTML, and CSS files. But feel free to build as you deem fit.</p><h3 id="production-mode" tabindex="-1">Production Mode <a class="header-anchor" href="#production-mode" aria-label="Permalink to &quot;Production Mode&quot;">​</a></h3><p>Start the production server when ready:</p><div class="vp-code-group"><div class="tabs"><input type="radio" name="group-eVEsf" id="tab--9XXpNC" checked><label data-title="global" for="tab--9XXpNC">global</label><input type="radio" name="group-eVEsf" id="tab-UaGKsFq"><label data-title="npm" for="tab-UaGKsFq">npm</label></div><div class="blocks"><div class="language-bash active"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#FFCB6B;">webflo</span><span style="color:#C3E88D;"> start</span></span></code></pre></div><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#FFCB6B;">npm</span><span style="color:#C3E88D;"> start</span></span></code></pre></div><p>Your app runs in production mode. Production can be in any filesystem-enabled JavaScript runtime.</p><div class="warning custom-block"><p class="custom-block-title">Production differences</p><ul><li>No HMR; assets are cached aggressively by browsers/CDNs</li><li>Ensure environment variables are set (e.g., via <code>.env</code> or host config)</li><li>Re-run <code>webflo build</code> after code changes intended for production</li></ul></div></div></div><hr><div class="tip custom-block"><p class="custom-block-title">Good Progress</p><p>At this point, your app is open in the browser — time to actually build what we&#39;ll see!</p></div><h2 id="your-first-route-handler" tabindex="-1">Your First Route Handler <a class="header-anchor" href="#your-first-route-handler" aria-label="Permalink to &quot;Your First Route Handler&quot;">​</a></h2><p>Open <code>app/handler.server.js</code> — the default handler file generated for you. You’ll see something like:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#89DDFF;font-style:italic;">export</span><span style="color:#89DDFF;font-style:italic;"> default</span><span style="color:#C792EA;"> async</span><span style="color:#C792EA;"> function</span><span style="color:#89DDFF;"> (</span><span style="color:#BABED8;font-style:italic;">event</span><span style="color:#89DDFF;">,</span><span style="color:#BABED8;font-style:italic;"> next</span><span style="color:#89DDFF;">,</span><span style="color:#BABED8;font-style:italic;"> fetch</span><span style="color:#89DDFF;">)</span><span style="color:#89DDFF;"> {</span></span>
95
+ <span class="line"><span style="color:#89DDFF;font-style:italic;"> if</span><span style="color:#F07178;"> (</span><span style="color:#BABED8;">next</span><span style="color:#89DDFF;">.</span><span style="color:#BABED8;">stepname</span><span style="color:#F07178;">) </span><span style="color:#89DDFF;font-style:italic;">return</span><span style="color:#89DDFF;font-style:italic;"> await</span><span style="color:#82AAFF;"> next</span><span style="color:#F07178;">()</span><span style="color:#89DDFF;">;</span></span>
96
+ <span class="line"><span style="color:#89DDFF;font-style:italic;"> return</span><span style="color:#89DDFF;"> {</span></span>
97
+ <span class="line"><span style="color:#F07178;"> title</span><span style="color:#89DDFF;">:</span><span style="color:#89DDFF;"> &#39;</span><span style="color:#C3E88D;">Webflo Web</span><span style="color:#89DDFF;">&#39;</span><span style="color:#89DDFF;">,</span></span>
98
+ <span class="line"><span style="color:#F07178;"> greeting</span><span style="color:#89DDFF;">:</span><span style="color:#89DDFF;"> &#39;</span><span style="color:#C3E88D;">Hello World!</span><span style="color:#89DDFF;">&#39;</span><span style="color:#89DDFF;">,</span></span>
99
+ <span class="line"><span style="color:#F07178;"> menu</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> [</span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> title</span><span style="color:#89DDFF;">:</span><span style="color:#89DDFF;"> &#39;</span><span style="color:#C3E88D;">Home</span><span style="color:#89DDFF;">&#39;</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> href</span><span style="color:#89DDFF;">:</span><span style="color:#89DDFF;"> &#39;</span><span style="color:#C3E88D;">/</span><span style="color:#89DDFF;">&#39;</span><span style="color:#89DDFF;"> }</span><span style="color:#F07178;">]</span><span style="color:#89DDFF;">,</span></span>
100
+ <span class="line"><span style="color:#89DDFF;"> };</span></span>
101
+ <span class="line"><span style="color:#89DDFF;">}</span></span></code></pre></div><p><strong>What’s it doing?</strong></p><ul><li>This function handles requests to <code>/</code> (the root URL).</li><li>If there’s a deeper route, it delegates to a sub-handler with <code>next()</code>.</li><li>Otherwise, it returns data for the root page.</li></ul><p>You can build from here — and make it your own:</p><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#89DDFF;font-style:italic;">export</span><span style="color:#89DDFF;font-style:italic;"> default</span><span style="color:#C792EA;"> async</span><span style="color:#C792EA;"> function</span><span style="color:#89DDFF;"> (</span><span style="color:#BABED8;font-style:italic;">event</span><span style="color:#89DDFF;">,</span><span style="color:#BABED8;font-style:italic;"> next</span><span style="color:#89DDFF;">,</span><span style="color:#BABED8;font-style:italic;"> fetch</span><span style="color:#89DDFF;">)</span><span style="color:#89DDFF;"> {</span></span>
102
+ <span class="line"><span style="color:#89DDFF;font-style:italic;"> if</span><span style="color:#F07178;"> (</span><span style="color:#BABED8;">next</span><span style="color:#89DDFF;">.</span><span style="color:#BABED8;">stepname</span><span style="color:#F07178;">) </span><span style="color:#89DDFF;font-style:italic;">return</span><span style="color:#89DDFF;font-style:italic;"> await</span><span style="color:#82AAFF;"> next</span><span style="color:#F07178;">()</span><span style="color:#89DDFF;">;</span></span>
103
+ <span class="line"><span style="color:#C792EA;"> const</span><span style="color:#BABED8;"> name</span><span style="color:#89DDFF;"> =</span><span style="color:#BABED8;"> event</span><span style="color:#89DDFF;">.</span><span style="color:#BABED8;">url</span><span style="color:#89DDFF;">.</span><span style="color:#BABED8;">searchParams</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">get</span><span style="color:#F07178;">(</span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">name</span><span style="color:#89DDFF;">&#39;</span><span style="color:#F07178;">) </span><span style="color:#89DDFF;">||</span><span style="color:#89DDFF;"> &#39;</span><span style="color:#C3E88D;">World</span><span style="color:#89DDFF;">&#39;</span><span style="color:#89DDFF;">;</span></span>
104
+ <span class="line"><span style="color:#89DDFF;font-style:italic;"> return</span><span style="color:#89DDFF;"> {</span></span>
105
+ <span class="line"><span style="color:#F07178;"> title</span><span style="color:#89DDFF;">:</span><span style="color:#89DDFF;"> &#39;</span><span style="color:#C3E88D;">Webflo Web</span><span style="color:#89DDFF;">&#39;</span><span style="color:#89DDFF;">,</span></span>
106
+ <span class="line"><span style="color:#F07178;"> greeting</span><span style="color:#89DDFF;">:</span><span style="color:#89DDFF;"> `</span><span style="color:#C3E88D;">Hello </span><span style="color:#89DDFF;">${</span><span style="color:#BABED8;">name</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">!</span><span style="color:#89DDFF;">`</span><span style="color:#89DDFF;">,</span></span>
107
+ <span class="line"><span style="color:#F07178;"> menu</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> [</span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> title</span><span style="color:#89DDFF;">:</span><span style="color:#89DDFF;"> &#39;</span><span style="color:#C3E88D;">Home</span><span style="color:#89DDFF;">&#39;</span><span style="color:#89DDFF;">,</span><span style="color:#F07178;"> href</span><span style="color:#89DDFF;">:</span><span style="color:#89DDFF;"> &#39;</span><span style="color:#C3E88D;">/</span><span style="color:#89DDFF;">&#39;</span><span style="color:#89DDFF;"> }</span><span style="color:#F07178;">]</span><span style="color:#89DDFF;">,</span></span>
108
+ <span class="line"><span style="color:#89DDFF;"> };</span></span>
109
+ <span class="line"><span style="color:#89DDFF;">}</span></span></code></pre></div><p>Visit <code>http://localhost:3000/?name=Webflo</code> to see the response.</p><p>If that worked, then we&#39;re ready to build! 🚀 We&#39;ll build on this foundation incrementally.</p><h2 id="working-with-static-files" tabindex="-1">Working with Static Files <a class="header-anchor" href="#working-with-static-files" aria-label="Permalink to &quot;Working with Static Files&quot;">​</a></h2><p>Place static files in the <code>public/</code> directory. They&#39;ll be served automatically by Webflo&#39;s static file server. Directory stucture automatically maps to URL paths:</p><ul><li><code>public/index.html</code> → <code>http://localhost:3000/index.html</code></li><li><code>public/assets/logo.png</code> → <code>http://localhost:3000/assets/logo.png</code></li><li><code>public/style.css</code> → <code>http://localhost:3000/style.css</code></li></ul><p>Webflo automatically adds appropriate content and caching headers depending on the request. Not found files generate a <code>404</code> response.</p><div class="warning custom-block"><p class="custom-block-title">Static file handoff</p><ul><li>To leverage Webflo&#39;s static file serving, ensure that route handlers are appropriately delegating incoming requests that they&#39;re not specifically designed to handle</li><li>This is the handoff line — <code>if (next.stepname) return next()</code> — you see in our handler above</li><li>This design, however, ensures route handlers are first in control</li></ul></div><h2 id="next-steps" tabindex="-1">Next Steps <a class="header-anchor" href="#next-steps" aria-label="Permalink to &quot;Next Steps&quot;">​</a></h2><p>You’ve:</p><ul><li>Scaffolded a project</li><li>Started the dev server</li><li>Written your first handler</li><li>Rendered data in the UI</li></ul><p><strong>Where to go from here?</strong></p><ul><li><a href="/docs/concepts">Core Concepts</a> — Mental model for how everything fits together</li><li><a href="/docs/concepts/routing">Routing</a> — How URLs map to files and handlers</li><li><a href="/docs/concepts/rendering">Rendering</a> — How data becomes UI</li><li><a href="/docs/concepts/templates">Templates</a> — Composing and reusing HTML</li><li><a href="/api/webflo-routing/handler">API Reference</a> — Formal handler contract</li></ul><h2 id="common-commands" tabindex="-1">Common Commands <a class="header-anchor" href="#common-commands" aria-label="Permalink to &quot;Common Commands&quot;">​</a></h2><details><summary>Here&#39;s a quick reference (Click to show)</summary><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight vp-code" tabindex="0"><code><span class="line"><span style="color:#676E95;font-style:italic;"># Initialize a new project</span></span>
110
+ <span class="line"><span style="color:#FFCB6B;">webflo</span><span style="color:#C3E88D;"> init</span><span style="color:#89DDFF;"> &lt;</span><span style="color:#C3E88D;">project-nam</span><span style="color:#BABED8;">e</span><span style="color:#89DDFF;">&gt;</span></span>
111
+ <span class="line"></span>
112
+ <span class="line"><span style="color:#676E95;font-style:italic;"># Start development server</span></span>
113
+ <span class="line"><span style="color:#FFCB6B;">webflo</span><span style="color:#C3E88D;"> start</span><span style="color:#C3E88D;"> --dev</span></span>
114
+ <span class="line"></span>
115
+ <span class="line"><span style="color:#676E95;font-style:italic;"># Start production server</span></span>
116
+ <span class="line"><span style="color:#FFCB6B;">webflo</span><span style="color:#C3E88D;"> start</span></span>
117
+ <span class="line"></span>
118
+ <span class="line"><span style="color:#676E95;font-style:italic;"># Build for production</span></span>
119
+ <span class="line"><span style="color:#FFCB6B;">webflo</span><span style="color:#C3E88D;"> build</span></span>
120
+ <span class="line"></span>
121
+ <span class="line"><span style="color:#676E95;font-style:italic;"># Configure Webflo</span></span>
122
+ <span class="line"><span style="color:#FFCB6B;">webflo</span><span style="color:#C3E88D;"> config</span></span>
123
+ <span class="line"></span>
124
+ <span class="line"><span style="color:#676E95;font-style:italic;"># View help</span></span>
125
+ <span class="line"><span style="color:#FFCB6B;">webflo</span><span style="color:#C3E88D;"> --help</span></span></code></pre></div></details><h2 id="troubleshooting" tabindex="-1">Troubleshooting <a class="header-anchor" href="#troubleshooting" aria-label="Permalink to &quot;Troubleshooting&quot;">​</a></h2><ul><li>Port already in use?: pass <code>--port &lt;port&gt;</code> (e.g., <code>webflo start --dev --port 8080</code>)</li><li>Global install issues?: use local CLI via <code>npx webflo ...</code> or <code>npm run</code> scripts</li><li>Permission problems on Unix?: try <code>corepack enable</code> or use a node version manager (nvm)</li><li>Edits not reflecting?: ensure you reloaded or are running dev mode; for production, run <code>webflo build</code> again</li></ul><h2 id="getting-help" tabindex="-1">Getting Help <a class="header-anchor" href="#getting-help" aria-label="Permalink to &quot;Getting Help&quot;">​</a></h2><ul><li>Browse the <a href="/docs">Documentation</a></li><li>Visit <a href="https://github.com/webqit/webflo/issues" target="_blank" rel="noreferrer">GitHub Issues</a></li><li>Review the <a href="/api">API Reference</a></li></ul><p>Happy coding with Webflo! 🚀</p></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/docs" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Previous page</span><span class="title" data-v-e257564d>Welcome</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/docs/concepts" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>Concepts Overview</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-5d98c3a5 data-v-e315a0ad><div class="container" data-v-e315a0ad><p class="message" data-v-e315a0ad>MIT Licensed</p><p class="copyright" data-v-e315a0ad>© webqit</p></div></footer><!--[--><!--]--></div></div>
126
+ <script>window.__VP_HASH_MAP__=JSON.parse("{\"-__.md\":\"wD5kDRhS\",\"-_docs.old.md\":\"CiqucE_1\",\"api.md\":\"C9KRNLi_\",\"api_webflo-fetch_fetch.md\":\"Bc9r3Q9I\",\"api_webflo-fetch_formdata.md\":\"CDuexUTz\",\"api_webflo-fetch_headers.md\":\"Cl_4-FUP\",\"api_webflo-fetch_liveresponse.md\":\"BMidKMB1\",\"api_webflo-fetch_request.md\":\"DPwZCPmi\",\"api_webflo-fetch_response.md\":\"BaSyoOLE\",\"api_webflo-routing_handler.md\":\"B0eVFluL\",\"api_webflo-routing_handler_fetch.md\":\"CpwUMFMz\",\"api_webflo-routing_handler_next.md\":\"CA4tDXtV\",\"api_webflo-routing_httpcookies.md\":\"B5ok3jrM\",\"api_webflo-routing_httpevent.md\":\"DBkSQRTa\",\"api_webflo-routing_httpevent_respondwith.md\":\"aAxq-5Ie\",\"api_webflo-routing_httpevent_waituntil.md\":\"DyQZLhPR\",\"api_webflo-routing_httpevent_waituntilnavigate.md\":\"DKLylwhl\",\"api_webflo-routing_httpsession.md\":\"bkeCy7_Q\",\"api_webflo-routing_httpstate.md\":\"DO53IAM1\",\"api_webflo-routing_httpuser.md\":\"CfsaBFdl\",\"contributing.md\":\"gqIMCtVI\",\"docs.md\":\"hvbqYbFY\",\"docs_advanced.md\":\"D048cxnq\",\"docs_advanced_lifecycles.md\":\"BICPL-da\",\"docs_advanced_redirects.md\":\"BMha6D3W\",\"docs_advanced_routing.md\":\"Cv63UDJF\",\"docs_concepts.md\":\"Clwx81Hz\",\"docs_concepts_realtime.md\":\"CBrMq5Ln\",\"docs_concepts_rendering.md\":\"BWr5Lxgn\",\"docs_concepts_request-response.md\":\"DhplzNqt\",\"docs_concepts_routing.md\":\"C2KO1eAu\",\"docs_concepts_state.md\":\"CtbMVS_K\",\"docs_concepts_templates.md\":\"4i6jQcYw\",\"docs_getting-started.md\":\"CNGtwB_L\",\"docs_tech-stack.md\":\"xiWGQstL\",\"examples.md\":\"BqDfJd4G\",\"examples_pwa.md\":\"DREN7J2F\",\"examples_web.md\":\"DUhZ0IQL\",\"faq.md\":\"DtfXaXUI\",\"guides.md\":\"BVdQyeU-\",\"guides_guide-auth.md\":\"DNFuRudp\",\"guides_guide-file-upload.md\":\"DRbRLk7h\",\"guides_guide-service-worker.md\":\"B0wEVcQw\",\"guides_tutorial-1-todo.md\":\"D9ket3Re\",\"index.md\":\"DB-CsGEX\",\"recipes_realtime.md\":\"CX1Vs2FD\",\"recipes_streaming.md\":\"C7GFShgF\",\"reference_cli.md\":\"DERqaQJm\",\"reference_config.md\":\"DI_yG-7N\",\"reference_tools.md\":\"DZxjdVFX\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Webflo\",\"description\":\"A universal, standards-first web framework for building web-native apps.\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":\"force-dark\",\"themeConfig\":{\"logo\":false,\"siteTitle\":\"Webflo\",\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/webqit/webflo\"}],\"nav\":[{\"text\":\"Docs\",\"link\":\"/docs\",\"activeMatch\":\"/docs\"},{\"text\":\"API\",\"link\":\"/api\",\"activeMatch\":\"/api/webflo-routing/handler\"},{\"text\":\"Guides\",\"link\":\"/guides\",\"activeMatch\":\"/guides\"},{\"text\":\"Examples\",\"link\":\"/examples\",\"activeMatch\":\"/examples\"}],\"sidebar\":{\"/\":[{\"text\":\"Getting Started\",\"items\":[{\"text\":\"Welcome\",\"link\":\"/docs\"},{\"text\":\"Quickstart\",\"link\":\"/docs/getting-started\"}]},{\"text\":\"Concepts\",\"items\":[{\"text\":\"Concepts Overview\",\"link\":\"/docs/concepts\"},{\"text\":\"Webflo Routing\",\"link\":\"/docs/concepts/routing\"},{\"text\":\"Rendering\",\"link\":\"/docs/concepts/rendering\"},{\"text\":\"Templates\",\"link\":\"/docs/concepts/templates\"},{\"text\":\"State Management\",\"link\":\"/docs/concepts/state\"},{\"text\":\"Request/Response Lifecycle\",\"link\":\"/docs/concepts/request-response\"},{\"text\":\"Webflo Realtime\",\"link\":\"/docs/concepts/realtime\"}]},{\"text\":\"Advanced\",\"items\":[{\"text\":\"Advanced Overview\",\"link\":\"/docs/advanced\"},{\"text\":\"Redirects\",\"link\":\"/docs/advanced/redirects\"}]},{\"text\":\"API Reference\",\"items\":[{\"text\":\"Webflo Routing\",\"collapsed\":true,\"items\":[{\"text\":\"Handler\",\"link\":\"/api/webflo-routing/handler\"},{\"text\":\"HttpEvent\",\"link\":\"/api/webflo-routing/HttpEvent\"},{\"text\":\"next\",\"link\":\"/api/webflo-routing/handler/next\"},{\"text\":\"fetch\",\"link\":\"/api/webflo-routing/handler/fetch\"}]},{\"text\":\"Webflo Fetch\",\"collapsed\":true,\"items\":[{\"text\":\"fetch\",\"link\":\"/api/webflo-fetch/fetch\"},{\"text\":\"Request\",\"link\":\"/api/webflo-fetch/Request\"},{\"text\":\"Response\",\"link\":\"/api/webflo-fetch/Response\"},{\"text\":\"LiveResponse\",\"link\":\"/api/webflo-fetch/LiveResponse\"},{\"text\":\"FormData\",\"link\":\"/api/webflo-fetch/FormData\"},{\"text\":\"Headers\",\"link\":\"/api/webflo-fetch/Headers\"}]},{\"text\":\"Webflo Messaging\",\"collapsed\":true,\"items\":[{\"text\":\"MessageChannel\",\"link\":\"/api/webflo-messaging/MessageChannel\"},{\"text\":\"MessagePort\",\"link\":\"/api/webflo-messaging/MessagePort\"},{\"text\":\"MessageEvent\",\"link\":\"/api/webflo-messaging/MessageEvent\"}]}]},{\"text\":\"Guides & Recipes\",\"items\":[{\"text\":\"Tutorial: Todo App\",\"link\":\"/guides/tutorial-1-todo\"},{\"text\":\"Auth\",\"link\":\"/guides/guide-auth\"},{\"text\":\"File Upload\",\"link\":\"/guides/guide-file-upload\"},{\"text\":\"Service Worker\",\"link\":\"/guides/guide-service-worker\"},{\"text\":\"Streaming\",\"link\":\"/recipes/streaming\"},{\"text\":\"Realtime Patterns\",\"link\":\"/recipes/realtime\"}]},{\"text\":\"Examples\",\"items\":[{\"text\":\"Web Example\",\"link\":\"/examples/web\"},{\"text\":\"PWA Example\",\"link\":\"/examples/pwa\"}]},{\"text\":\"Reference\",\"items\":[{\"text\":\"CLI\",\"link\":\"/reference/cli\"},{\"text\":\"Config\",\"link\":\"/reference/config\"},{\"text\":\"Tools\",\"link\":\"/reference/tools\"},{\"text\":\"FAQ\",\"link\":\"/faq\"},{\"text\":\"Contributing\",\"link\":\"/contributing\"}]}]},\"footer\":{\"message\":\"MIT Licensed\",\"copyright\":\"© webqit\"},\"search\":{\"provider\":\"local\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true}");</script>
127
+
128
+ </body>
129
+ </html>
@@ -0,0 +1,55 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-US" dir="ltr">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>The Technology Stack | Webflo</title>
7
+ <meta name="description" content="A universal, standards-first web framework for building web-native apps.">
8
+ <meta name="generator" content="VitePress v1.6.4">
9
+ <link rel="preload stylesheet" href="/assets/style.BD0LzINo.css" as="style">
10
+ <link rel="preload stylesheet" href="/vp-icons.css" as="style">
11
+
12
+ <script type="module" src="/assets/app.B989j-Lw.js"></script>
13
+ <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
14
+ <link rel="modulepreload" href="/assets/chunks/framework.9Uv4PgnO.js">
15
+ <link rel="modulepreload" href="/assets/chunks/theme.Jp0RA4YE.js">
16
+ <link rel="modulepreload" href="/assets/chunks/katex.BbEIqZs1.js">
17
+ <link rel="modulepreload" href="/assets/chunks/dagre-6UL2VRFP.D__9IqfC.js">
18
+ <link rel="modulepreload" href="/assets/chunks/cose-bilkent-S5V4N54A.TlhUFBAR.js">
19
+ <link rel="modulepreload" href="/assets/chunks/c4Diagram-YG6GDRKO.BI_5dKaW.js">
20
+ <link rel="modulepreload" href="/assets/chunks/flowDiagram-NV44I4VS.C_6PWuGm.js">
21
+ <link rel="modulepreload" href="/assets/chunks/erDiagram-Q2GNP2WA.CNdrcxqE.js">
22
+ <link rel="modulepreload" href="/assets/chunks/gitGraphDiagram-NY62KEGX.BmQODSWS.js">
23
+ <link rel="modulepreload" href="/assets/chunks/ganttDiagram-LVOFAZNH._TBJejxF.js">
24
+ <link rel="modulepreload" href="/assets/chunks/infoDiagram-ER5ION4S.CbdOaGtv.js">
25
+ <link rel="modulepreload" href="/assets/chunks/pieDiagram-ADFJNKIX.BSTQM2Ms.js">
26
+ <link rel="modulepreload" href="/assets/chunks/quadrantDiagram-AYHSOK5B.CkEJjNYC.js">
27
+ <link rel="modulepreload" href="/assets/chunks/xychartDiagram-PRI3JC2R.CF4KVQhG.js">
28
+ <link rel="modulepreload" href="/assets/chunks/requirementDiagram-UZGBJVZJ.QsTahBza.js">
29
+ <link rel="modulepreload" href="/assets/chunks/sequenceDiagram-WL72ISMW.rq-YLOb-.js">
30
+ <link rel="modulepreload" href="/assets/chunks/classDiagram-2ON5EDUG._0fUH5ha.js">
31
+ <link rel="modulepreload" href="/assets/chunks/classDiagram-v2-WZHVMYZB._0fUH5ha.js">
32
+ <link rel="modulepreload" href="/assets/chunks/stateDiagram-FKZM4ZOC.BseVQjcW.js">
33
+ <link rel="modulepreload" href="/assets/chunks/stateDiagram-v2-4FDKWEC3.CH4mdaj_.js">
34
+ <link rel="modulepreload" href="/assets/chunks/journeyDiagram-XKPGCS4Q.B-PjYmDZ.js">
35
+ <link rel="modulepreload" href="/assets/chunks/timeline-definition-IT6M3QCI.N8DNMk16.js">
36
+ <link rel="modulepreload" href="/assets/chunks/mindmap-definition-VGOIOE7T.CvIaZI8e.js">
37
+ <link rel="modulepreload" href="/assets/chunks/kanban-definition-3W4ZIXB7.Bc_8e9KR.js">
38
+ <link rel="modulepreload" href="/assets/chunks/sankeyDiagram-TZEHDZUN.NRsUNMzF.js">
39
+ <link rel="modulepreload" href="/assets/chunks/diagram-S2PKOQOG.D-Xxss9Z.js">
40
+ <link rel="modulepreload" href="/assets/chunks/diagram-QEK2KX5R.FZi2c8WB.js">
41
+ <link rel="modulepreload" href="/assets/chunks/blockDiagram-VD42YOAC.BcpiarhA.js">
42
+ <link rel="modulepreload" href="/assets/chunks/architectureDiagram-VXUJARFQ.DCLYhNHD.js">
43
+ <link rel="modulepreload" href="/assets/chunks/diagram-PSM6KHXK.DYSDWndU.js">
44
+ <link rel="modulepreload" href="/assets/chunks/virtual_mermaid-config.DDnGl6nM.js">
45
+ <link rel="modulepreload" href="/assets/docs_tech-stack.md.xiWGQstL.lean.js">
46
+ <meta name="theme-color" content="#0f172a">
47
+ <script id="check-dark-mode">document.documentElement.classList.add("dark");</script>
48
+ <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
49
+ </head>
50
+ <body>
51
+ <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0b0ada53></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0b0ada53>Skip to content</a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/" data-v-1168a8e4><!--[--><!--]--><!----><span data-v-1168a8e4>Webflo</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink active" href="/docs" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Docs</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/api" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>API</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/guides" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Guides</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/examples" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Examples</span><!--]--></a><!--]--><!--]--></nav><!----><!----><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/webqit/webflo" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><!----><!----><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/webqit/webflo" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-8a42e2b4><button data-v-8a42e2b4>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>Getting Started</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Welcome</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/getting-started" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Quickstart</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>Concepts</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/concepts" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Concepts Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/concepts/routing" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Webflo Routing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/concepts/rendering" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Rendering</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/concepts/templates" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Templates</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/concepts/state" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>State Management</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/concepts/request-response" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Request/Response Lifecycle</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/concepts/realtime" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Webflo Realtime</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>Advanced</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/advanced" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Advanced Overview</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/docs/advanced/redirects" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Redirects</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>API Reference</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><section class="VPSidebarItem level-1 collapsible collapsed" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h3 class="text" data-v-b3fd67f8>Webflo Routing</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b3fd67f8><span class="vpi-chevron-right caret-icon" data-v-b3fd67f8></span></div></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-routing/handler" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Handler</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-routing/HttpEvent" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>HttpEvent</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-routing/handler/next" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>next</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-routing/handler/fetch" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>fetch</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h3 class="text" data-v-b3fd67f8>Webflo Fetch</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b3fd67f8><span class="vpi-chevron-right caret-icon" data-v-b3fd67f8></span></div></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-fetch/fetch" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>fetch</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-fetch/Request" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Request</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-fetch/Response" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Response</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-fetch/LiveResponse" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>LiveResponse</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-fetch/FormData" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>FormData</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-fetch/Headers" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Headers</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h3 class="text" data-v-b3fd67f8>Webflo Messaging</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-b3fd67f8><span class="vpi-chevron-right caret-icon" data-v-b3fd67f8></span></div></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-messaging/MessageChannel" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>MessageChannel</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-messaging/MessagePort" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>MessagePort</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/api/webflo-messaging/MessageEvent" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>MessageEvent</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>Guides & Recipes</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/guides/tutorial-1-todo" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Tutorial: Todo App</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/guides/guide-auth" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Auth</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/guides/guide-file-upload" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>File Upload</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/guides/guide-service-worker" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Service Worker</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/recipes/streaming" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Streaming</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/recipes/realtime" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Realtime Patterns</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>Examples</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/examples/web" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Web Example</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/examples/pwa" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>PWA Example</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>Reference</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/reference/cli" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>CLI</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/reference/config" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Config</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/reference/tools" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Tools</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/faq" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>FAQ</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8 data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/contributing" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Contributing</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _docs_tech-stack" data-v-39a288b8><div><h1 id="the-technology-stack" tabindex="-1">The Technology Stack <a class="header-anchor" href="#the-technology-stack" aria-label="Permalink to &quot;The Technology Stack&quot;">​</a></h1><p>This part covers the technologies that make up the Webflo stack.</p><h2 id="platform-apis" tabindex="-1">Platform APIs <a class="header-anchor" href="#platform-apis" aria-label="Permalink to &quot;Platform APIs&quot;">​</a></h2><p>Webflo is <em>deeply</em> integrated with how the web already works. It leans on standard web platform APIs so your code stays portable and predictable. Key platform APIs used by Webflo include:</p><table tabindex="0"><thead><tr><th style="text-align:left;">Feature</th><th style="text-align:left;">Why it matters</th><th style="text-align:left;">Link</th></tr></thead><tbody><tr><td style="text-align:left;">Request</td><td style="text-align:left;">Network primitive for making outgoing requests.</td><td style="text-align:left;"><a href="https://developer.mozilla.org/en-US/docs/Web/API/Request" target="_blank" rel="noreferrer">MDN</a></td></tr><tr><td style="text-align:left;">Response</td><td style="text-align:left;">Representation of responses returned from network requests.</td><td style="text-align:left;"><a href="https://developer.mozilla.org/en-US/docs/Web/API/Response" target="_blank" rel="noreferrer">MDN</a></td></tr><tr><td style="text-align:left;">Headers</td><td style="text-align:left;">Structured metadata for requests and responses.</td><td style="text-align:left;"><a href="https://developer.mozilla.org/en-US/docs/Web/API/Headers" target="_blank" rel="noreferrer">MDN</a></td></tr><tr><td style="text-align:left;">Streams</td><td style="text-align:left;">Enables streaming bodies for incremental rendering and transfer.</td><td style="text-align:left;"><a href="https://developer.mozilla.org/en-US/docs/Web/API/Streams_API" target="_blank" rel="noreferrer">MDN</a></td></tr><tr><td style="text-align:left;">URL</td><td style="text-align:left;">Robust URL parsing for canonicalization and routing.</td><td style="text-align:left;"><a href="https://developer.mozilla.org/en-US/docs/Web/API/URL" target="_blank" rel="noreferrer">MDN</a></td></tr><tr><td style="text-align:left;">URLPattern</td><td style="text-align:left;">Route pattern matching for routing logic.</td><td style="text-align:left;"><a href="https://developer.mozilla.org/en-US/docs/Web/API/URLPattern" target="_blank" rel="noreferrer">MDN</a></td></tr><tr><td style="text-align:left;">DOM</td><td style="text-align:left;">Native markup primitives for composing and rendering UI.</td><td style="text-align:left;"><a href="https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model" target="_blank" rel="noreferrer">MDN</a></td></tr><tr><td style="text-align:left;">&lt;template&gt; element</td><td style="text-align:left;">Reusable template primitive for composition and SSR/CSR.</td><td style="text-align:left;"><a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template" target="_blank" rel="noreferrer">MDN</a></td></tr><tr><td style="text-align:left;">ReadableStream</td><td style="text-align:left;">Incremental consumption of streaming data.</td><td style="text-align:left;"><a href="https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream" target="_blank" rel="noreferrer">MDN</a></td></tr><tr><td style="text-align:left;">WritableStream</td><td style="text-align:left;">Incremental production of streaming data.</td><td style="text-align:left;"><a href="https://developer.mozilla.org/en-US/docs/Web/API/WritableStream" target="_blank" rel="noreferrer">MDN</a></td></tr><tr><td style="text-align:left;">Service Worker API</td><td style="text-align:left;">Background routing, caching, and offline capabilities.</td><td style="text-align:left;"><a href="https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API" target="_blank" rel="noreferrer">MDN</a></td></tr><tr><td style="text-align:left;">MessageChannel</td><td style="text-align:left;">Bidirectional messaging for realtime/background features.</td><td style="text-align:left;"><a href="https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel" target="_blank" rel="noreferrer">MDN</a></td></tr><tr><td style="text-align:left;">FormData</td><td style="text-align:left;">Native type for multipart form uploads and form handling.</td><td style="text-align:left;"><a href="https://developer.mozilla.org/en-US/docs/Web/API/FormData" target="_blank" rel="noreferrer">MDN</a></td></tr><tr><td style="text-align:left;">Blob</td><td style="text-align:left;">Binary data container for transfers and file blobs.</td><td style="text-align:left;"><a href="https://developer.mozilla.org/en-US/docs/Web/API/Blob" target="_blank" rel="noreferrer">MDN</a></td></tr><tr><td style="text-align:left;">File</td><td style="text-align:left;">Represents filesystem-backed file uploads.</td><td style="text-align:left;"><a href="https://developer.mozilla.org/en-US/docs/Web/API/File" target="_blank" rel="noreferrer">MDN</a></td></tr></tbody></table><h2 id="the-observer-api" tabindex="-1">The Observer API <a class="header-anchor" href="#the-observer-api" aria-label="Permalink to &quot;The Observer API&quot;">​</a></h2><p>Reactivity in Webflo is powered by the <a href="https://github.com/webqit/observer" target="_blank" rel="noreferrer">Observer API</a> — a lightweight, general-purpose API for observing JavaScript objects and arrays.</p><p>With the Observer API unlocking observability at the object and array level, no special interfaces or wrappers are needed for reactivity anywhere in the stack. Webflo simply runs on bare objects, bare arrays, and the concept of mutation — all plain JavaScript primitives. For a framework, this sets a new benchmark in <em>just using the language</em> — one we intend to preserve.</p><p>As a developer, you get a clean technology stack that&#39;s all just plain objects and arrays too - stripped of special programming interfaces like WebfloStore, WebfloReduxAdapter, WebfloReactiveProxyThingAdapter, etc. Often these exist in other frameworks as a means to reactivity, guarded with measures against mutability since that breaks their reactive model.</p><p>By making mutation a first-class concept, as it is in JavaScript itself, Webflo helps you see the world as it is — dynamic, mutable, powerful, free.</p><p>Meet the <a href="https://github.com/webqit/observer" target="_blank" rel="noreferrer">Observer API →</a></p><h2 id="oohtml" tabindex="-1">OOHTML <a class="header-anchor" href="#oohtml" aria-label="Permalink to &quot;OOHTML&quot;">​</a></h2><p>OOHTML is the lightweight, buildless markup layer Webflo uses for composing UI. Its role in the stack is simple and decisive: make HTML modular, importable, and data-aware so authors can ship interactive apps without a heavy toolchain.</p><p>How it simplifies everything:</p><ul><li>Buildless composition: authors write plain HTML (templates + imports) instead of compiling a new component language — fewer build steps, fewer surprises.</li><li>Portable markup: the same template files work for SSR and CSR, so your UI source is the single truth.</li><li>Low cognitive load: conventional HTML authoring, with a few additive conventions (imports, <code>def</code>/<code>ref</code>, scoped styles/scripts) instead of an entire framework DSL.</li><li>First-class data plumbing: OOHTML directly binds to your app&#39;s <code>document.bindings</code> and the Observer API for hydration and reactive updates.</li></ul><p>What OOHTML gives you (at a glance):</p><ul><li>Declarative HTML imports and modular templates — reuse without build tooling.</li><li>Namespacing, and style and script scoping to avoid global collisions.</li><li>Comment-based and inline data binding that degrades cleanly in SSR.</li><li>Imperative import APIs for dynamic or lazy module loading.</li></ul><p>Meet <a href="https://github.com/webqit/oohtml" target="_blank" rel="noreferrer">OOHTML →</a></p></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><!----></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/docs" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>Welcome</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-5d98c3a5 data-v-e315a0ad><div class="container" data-v-e315a0ad><p class="message" data-v-e315a0ad>MIT Licensed</p><p class="copyright" data-v-e315a0ad>© webqit</p></div></footer><!--[--><!--]--></div></div>
52
+ <script>window.__VP_HASH_MAP__=JSON.parse("{\"-__.md\":\"wD5kDRhS\",\"-_docs.old.md\":\"CiqucE_1\",\"api.md\":\"C9KRNLi_\",\"api_webflo-fetch_fetch.md\":\"Bc9r3Q9I\",\"api_webflo-fetch_formdata.md\":\"CDuexUTz\",\"api_webflo-fetch_headers.md\":\"Cl_4-FUP\",\"api_webflo-fetch_liveresponse.md\":\"BMidKMB1\",\"api_webflo-fetch_request.md\":\"DPwZCPmi\",\"api_webflo-fetch_response.md\":\"BaSyoOLE\",\"api_webflo-routing_handler.md\":\"B0eVFluL\",\"api_webflo-routing_handler_fetch.md\":\"CpwUMFMz\",\"api_webflo-routing_handler_next.md\":\"CA4tDXtV\",\"api_webflo-routing_httpcookies.md\":\"B5ok3jrM\",\"api_webflo-routing_httpevent.md\":\"DBkSQRTa\",\"api_webflo-routing_httpevent_respondwith.md\":\"aAxq-5Ie\",\"api_webflo-routing_httpevent_waituntil.md\":\"DyQZLhPR\",\"api_webflo-routing_httpevent_waituntilnavigate.md\":\"DKLylwhl\",\"api_webflo-routing_httpsession.md\":\"bkeCy7_Q\",\"api_webflo-routing_httpstate.md\":\"DO53IAM1\",\"api_webflo-routing_httpuser.md\":\"CfsaBFdl\",\"contributing.md\":\"gqIMCtVI\",\"docs.md\":\"hvbqYbFY\",\"docs_advanced.md\":\"D048cxnq\",\"docs_advanced_lifecycles.md\":\"BICPL-da\",\"docs_advanced_redirects.md\":\"BMha6D3W\",\"docs_advanced_routing.md\":\"Cv63UDJF\",\"docs_concepts.md\":\"Clwx81Hz\",\"docs_concepts_realtime.md\":\"CBrMq5Ln\",\"docs_concepts_rendering.md\":\"BWr5Lxgn\",\"docs_concepts_request-response.md\":\"DhplzNqt\",\"docs_concepts_routing.md\":\"C2KO1eAu\",\"docs_concepts_state.md\":\"CtbMVS_K\",\"docs_concepts_templates.md\":\"4i6jQcYw\",\"docs_getting-started.md\":\"CNGtwB_L\",\"docs_tech-stack.md\":\"xiWGQstL\",\"examples.md\":\"BqDfJd4G\",\"examples_pwa.md\":\"DREN7J2F\",\"examples_web.md\":\"DUhZ0IQL\",\"faq.md\":\"DtfXaXUI\",\"guides.md\":\"BVdQyeU-\",\"guides_guide-auth.md\":\"DNFuRudp\",\"guides_guide-file-upload.md\":\"DRbRLk7h\",\"guides_guide-service-worker.md\":\"B0wEVcQw\",\"guides_tutorial-1-todo.md\":\"D9ket3Re\",\"index.md\":\"DB-CsGEX\",\"recipes_realtime.md\":\"CX1Vs2FD\",\"recipes_streaming.md\":\"C7GFShgF\",\"reference_cli.md\":\"DERqaQJm\",\"reference_config.md\":\"DI_yG-7N\",\"reference_tools.md\":\"DZxjdVFX\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Webflo\",\"description\":\"A universal, standards-first web framework for building web-native apps.\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":\"force-dark\",\"themeConfig\":{\"logo\":false,\"siteTitle\":\"Webflo\",\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/webqit/webflo\"}],\"nav\":[{\"text\":\"Docs\",\"link\":\"/docs\",\"activeMatch\":\"/docs\"},{\"text\":\"API\",\"link\":\"/api\",\"activeMatch\":\"/api/webflo-routing/handler\"},{\"text\":\"Guides\",\"link\":\"/guides\",\"activeMatch\":\"/guides\"},{\"text\":\"Examples\",\"link\":\"/examples\",\"activeMatch\":\"/examples\"}],\"sidebar\":{\"/\":[{\"text\":\"Getting Started\",\"items\":[{\"text\":\"Welcome\",\"link\":\"/docs\"},{\"text\":\"Quickstart\",\"link\":\"/docs/getting-started\"}]},{\"text\":\"Concepts\",\"items\":[{\"text\":\"Concepts Overview\",\"link\":\"/docs/concepts\"},{\"text\":\"Webflo Routing\",\"link\":\"/docs/concepts/routing\"},{\"text\":\"Rendering\",\"link\":\"/docs/concepts/rendering\"},{\"text\":\"Templates\",\"link\":\"/docs/concepts/templates\"},{\"text\":\"State Management\",\"link\":\"/docs/concepts/state\"},{\"text\":\"Request/Response Lifecycle\",\"link\":\"/docs/concepts/request-response\"},{\"text\":\"Webflo Realtime\",\"link\":\"/docs/concepts/realtime\"}]},{\"text\":\"Advanced\",\"items\":[{\"text\":\"Advanced Overview\",\"link\":\"/docs/advanced\"},{\"text\":\"Redirects\",\"link\":\"/docs/advanced/redirects\"}]},{\"text\":\"API Reference\",\"items\":[{\"text\":\"Webflo Routing\",\"collapsed\":true,\"items\":[{\"text\":\"Handler\",\"link\":\"/api/webflo-routing/handler\"},{\"text\":\"HttpEvent\",\"link\":\"/api/webflo-routing/HttpEvent\"},{\"text\":\"next\",\"link\":\"/api/webflo-routing/handler/next\"},{\"text\":\"fetch\",\"link\":\"/api/webflo-routing/handler/fetch\"}]},{\"text\":\"Webflo Fetch\",\"collapsed\":true,\"items\":[{\"text\":\"fetch\",\"link\":\"/api/webflo-fetch/fetch\"},{\"text\":\"Request\",\"link\":\"/api/webflo-fetch/Request\"},{\"text\":\"Response\",\"link\":\"/api/webflo-fetch/Response\"},{\"text\":\"LiveResponse\",\"link\":\"/api/webflo-fetch/LiveResponse\"},{\"text\":\"FormData\",\"link\":\"/api/webflo-fetch/FormData\"},{\"text\":\"Headers\",\"link\":\"/api/webflo-fetch/Headers\"}]},{\"text\":\"Webflo Messaging\",\"collapsed\":true,\"items\":[{\"text\":\"MessageChannel\",\"link\":\"/api/webflo-messaging/MessageChannel\"},{\"text\":\"MessagePort\",\"link\":\"/api/webflo-messaging/MessagePort\"},{\"text\":\"MessageEvent\",\"link\":\"/api/webflo-messaging/MessageEvent\"}]}]},{\"text\":\"Guides & Recipes\",\"items\":[{\"text\":\"Tutorial: Todo App\",\"link\":\"/guides/tutorial-1-todo\"},{\"text\":\"Auth\",\"link\":\"/guides/guide-auth\"},{\"text\":\"File Upload\",\"link\":\"/guides/guide-file-upload\"},{\"text\":\"Service Worker\",\"link\":\"/guides/guide-service-worker\"},{\"text\":\"Streaming\",\"link\":\"/recipes/streaming\"},{\"text\":\"Realtime Patterns\",\"link\":\"/recipes/realtime\"}]},{\"text\":\"Examples\",\"items\":[{\"text\":\"Web Example\",\"link\":\"/examples/web\"},{\"text\":\"PWA Example\",\"link\":\"/examples/pwa\"}]},{\"text\":\"Reference\",\"items\":[{\"text\":\"CLI\",\"link\":\"/reference/cli\"},{\"text\":\"Config\",\"link\":\"/reference/config\"},{\"text\":\"Tools\",\"link\":\"/reference/tools\"},{\"text\":\"FAQ\",\"link\":\"/faq\"},{\"text\":\"Contributing\",\"link\":\"/contributing\"}]}]},\"footer\":{\"message\":\"MIT Licensed\",\"copyright\":\"© webqit\"},\"search\":{\"provider\":\"local\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true}");</script>
53
+
54
+ </body>
55
+ </html>