-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmiddleware.html
More file actions
65 lines (63 loc) · 82.6 KB
/
Copy pathmiddleware.html
File metadata and controls
65 lines (63 loc) · 82.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Middleware (core) | Vix.cpp</title>
<meta name="description" content="Modern C++ backend runtime for offline-first, P2P, and high-performance applications.">
<meta name="generator" content="VitePress v1.6.4">
<link rel="preload stylesheet" href="/docs/assets/style.CoVHTybu.css" as="style">
<link rel="preload stylesheet" href="/docs/vp-icons.css" as="style">
<script type="module" src="/docs/assets/app.DzD_rsuH.js"></script>
<link rel="preload" href="/docs/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/docs/assets/chunks/theme.CYllfLRE.js">
<link rel="modulepreload" href="/docs/assets/chunks/framework.jUmBZPH5.js">
<link rel="modulepreload" href="/docs/assets/modules_core_middleware.md.kWMBRpYJ.lean.js">
<link rel="icon" href="/assets/pwa/icon-192.png">
<meta name="theme-color" content="#0b0e14">
<meta name="mobile-web-app-capable" content="yes">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<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="/docs/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/docs/assets/pwa/icon-192.png" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vix.cpp</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 vp-external-link-icon VPNavBarMenuLink" href="https://vixcpp.com/" target="_blank" rel="noreferrer" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Home</span><!--]--></a><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://vixcpp.com/registry/" target="_blank" rel="noreferrer" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Registry</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><!--]--></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 appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><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><!--[--><!--]--></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>Back 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 collapsible" 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>Get started</h2><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-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/quick-start.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Quick Start</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/install.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Installation</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/project-setup.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Project Setup</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/guide.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Guides</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible 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>Modules</h2><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><!--[--><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>cli</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="/docs/modules/cli/index.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</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="/docs/modules/cli/repl.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix repl</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-2 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><h4 class="text" data-v-b3fd67f8>Project</h4><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-3 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/modules/cli/new.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix new</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 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/modules/cli/build.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix build</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 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/modules/cli/run.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix run</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 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/modules/cli/dev.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix dev</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 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/modules/cli/tests.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix tests</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-2 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><h4 class="text" data-v-b3fd67f8>Registry</h4><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-3 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/modules/cli/search.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix search</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 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/modules/cli/add.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix add</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 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/modules/cli/remove.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix remove</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 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/modules/cli/list.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix list</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 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/modules/cli/publish.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix publish</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 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/modules/cli/registry.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix registry</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-2 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><h4 class="text" data-v-b3fd67f8>Packaging</h4><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-3 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/modules/cli/pack.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix pack</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 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/modules/cli/verify.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix verify</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 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/modules/cli/install.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix install</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-2 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><h4 class="text" data-v-b3fd67f8>Database</h4><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-3 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/modules/cli/orm.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix orm</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-2 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><h4 class="text" data-v-b3fd67f8>Network</h4><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-3 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/modules/cli/p2p.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix p2p</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed has-active" 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>core</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="/docs/modules/core/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</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="/docs/modules/core/app.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>App</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="/docs/modules/core/http.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>HTTP</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="/docs/modules/core/router.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Router</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="/docs/modules/core/server.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Server</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="/docs/modules/core/session.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Session</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="/docs/modules/core/middleware.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Middleware</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="/docs/modules/core/threadpool.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>ThreadPool</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="/docs/modules/core/timers.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Timers</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="/docs/modules/core/executor.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Executor</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="/docs/modules/core/openapi.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>OpenAPI</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="/docs/modules/core/config.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Config</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="/docs/modules/core/console.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Console</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="/docs/modules/core/example.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Examples</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="/docs/modules/core/guide.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Guide</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>net</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="/docs/modules/net/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</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>json</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="/docs/modules/json/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</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>middleware</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="/docs/modules/middleware/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</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>db</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="/docs/modules/db/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</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>orm</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="/docs/modules/orm/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</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>websocket</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="/docs/modules/websocket/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</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>async</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="/docs/modules/async/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</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>p2p</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="/docs/modules/p2p/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</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>p2p_http</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="/docs/modules/p2p_http/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</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>crypto</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="/docs/modules/crypto/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</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>time</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="/docs/modules/time/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</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>conversion</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="/docs/modules/conversion/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</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>validation</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="/docs/modules/validation/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</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>cache</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="/docs/modules/cache/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</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>sync</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="/docs/modules/sync/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</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>utils</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="/docs/modules/utils/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</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>webrpc</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="/docs/modules/webrpc/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</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>deploy</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="/docs/modules/deploy/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Overview</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible collapsed" 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>Fundamentals</h2><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-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/fundamentals.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Core Concepts</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/fundamentals/lifecycle.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>App 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/fundamentals/errors.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Error Handling</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/fundamentals/logging.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Logging</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/fundamentals/performance.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Performance</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/fundamentals/security.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Security</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible collapsed" 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>Inference</h2><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-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/inference.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>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/inference/providers.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Providers</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/inference/routing.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Routing and Policies</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/inference/streaming.html" 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="/docs/inference/reliability.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Reliability</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible collapsed" 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 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-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/api/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>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/api/http.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>HTTP</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/api/websocket.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>WebSocket</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/api/json.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Json</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/api/async.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Async</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/api/p2p.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>P2P</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/api/middleware.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Middleware</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/api/config.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Config</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0 collapsible collapsed" 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 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-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/examples/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>All Examples</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/examples/hello-http.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Hello HTTP</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/examples/auth.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Auth Middleware</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/examples/ws-chat.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>WebSocket Chat</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/examples/async.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Async Worker</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_modules_core_middleware" data-v-39a288b8><div><h1 id="middleware-core" tabindex="-1">Middleware (core) <a class="header-anchor" href="#middleware-core" aria-label="Permalink to "Middleware (core)""></a></h1><p>The middleware system in Vix provides a structured way to:</p><ul><li>intercept requests before they reach the handler</li><li>share data across layers (auth, logging, rate limiting, etc.)</li><li>standardize error handling</li><li>manage cross-cutting concerns cleanly</li></ul><p>It is built around five core concepts:</p><ul><li><code>Context</code></li><li><code>Services</code></li><li><code>Next</code></li><li><code>Hooks</code></li><li><code>Result</code> / <code>Error</code></li></ul><p>This document explains how they fit together.</p><hr><h2 id="_1-context" tabindex="-1">1. Context <a class="header-anchor" href="#_1-context" aria-label="Permalink to "1. Context""></a></h2><p><code>vix::mw::Context</code> is the object passed through the middleware pipeline.</p><p>It wraps:</p><ul><li>the current <code>Request</code></li><li>the current <code>ResponseWrapper</code></li><li>a shared <code>Services</code> container</li></ul><p>You use it to:</p><ul><li>read request data</li><li>write responses</li><li>access shared services</li><li>manage request-scoped state</li></ul><p>Example usage inside middleware:</p><div class="language-cpp vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">cpp</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> my_middleware</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Context</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> ctx</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Next</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> next</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> auto&</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> req </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ctx.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">req</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">();</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> auto&</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> res </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ctx.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">res</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">();</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">req.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">has_header</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"Authorization"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)) {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ctx.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">send_error</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">401</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"unauthorized"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"Missing token"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> next</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">();</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // continue pipeline</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>The context is the single source of truth for the current request lifecycle.</p><hr><h2 id="_2-services" tabindex="-1">2. Services <a class="header-anchor" href="#_2-services" aria-label="Permalink to "2. Services""></a></h2><p><code>vix::mw::Services</code> is a lightweight dependency container.</p><p>It allows registering shared services by type:</p><div class="language-cpp vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">cpp</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">services.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">provide</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">std</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">make_shared</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"><</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">MyDatabase</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">>(...));</span></span></code></pre></div><p>And retrieving them inside middleware or handlers:</p><div class="language-cpp vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">cpp</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">auto</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> db </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ctx.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">services</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">().get</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"><</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">MyDatabase</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">();</span></span></code></pre></div><p>Characteristics:</p><ul><li>type-safe</li><li>shared ownership via <code>std::shared_ptr</code></li><li>no string keys</li><li>minimal overhead</li></ul><p>It is designed for runtime services such as:</p><ul><li>database connections</li><li>configuration</li><li>external clients</li><li>caches</li></ul><hr><h2 id="_3-request-scoped-state" tabindex="-1">3. Request-Scoped State <a class="header-anchor" href="#_3-request-scoped-state" aria-label="Permalink to "3. Request-Scoped State""></a></h2><p>Request-scoped data should not live in global services.</p><p>Use <code>RequestState</code> through <code>Context</code>:</p><div class="language-cpp vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">cpp</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">ctx.emplace_state</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"><</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">User</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(User{</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">42</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"Ada"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">});</span></span></code></pre></div><p>Later in the pipeline:</p><div class="language-cpp vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">cpp</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">auto&</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> user </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ctx.state</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"><</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">User</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">();</span></span></code></pre></div><p>This is ideal for:</p><ul><li>authenticated user info</li><li>correlation IDs</li><li>rate-limit metadata</li><li>validation results</li></ul><p>State is strongly typed and stored using <code>std::any</code> internally.</p><hr><h2 id="_4-next-continuation-control" tabindex="-1">4. Next (Continuation Control) <a class="header-anchor" href="#_4-next-continuation-control" aria-label="Permalink to "4. Next (Continuation Control)""></a></h2><p><code>vix::mw::Next</code> is a call-once continuation object.</p><p>It guarantees that the next middleware in the chain can only be invoked once.</p><div class="language-cpp vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">cpp</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> middleware</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Context</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> ctx</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Next</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> next</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // pre logic</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> next</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">();</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // continue</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // post logic (optional)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>Important properties:</p><ul><li>call-once semantics</li><li>safe against double invocation</li><li>explicit pipeline control</li></ul><p>If <code>next()</code> is not called, the pipeline stops.</p><hr><h2 id="_5-hooks" tabindex="-1">5. Hooks <a class="header-anchor" href="#_5-hooks" aria-label="Permalink to "5. Hooks""></a></h2><p><code>vix::mw::Hooks</code> provides lifecycle integration points:</p><ul><li><code>on_begin</code></li><li><code>on_end</code></li><li><code>on_error</code></li></ul><p>Hooks can be merged using <code>merge_hooks(...)</code>.</p><p>Execution order:</p><ul><li><code>on_begin</code>: forward order</li><li><code>on_end</code>: reverse order</li><li><code>on_error</code>: reverse order</li></ul><p>This ensures predictable stacking behavior similar to nested middleware layers.</p><p>Hooks are ideal for:</p><ul><li>logging</li><li>metrics</li><li>tracing</li><li>performance measurement</li></ul><hr><h2 id="_6-result-and-error" tabindex="-1">6. Result and Error <a class="header-anchor" href="#_6-result-and-error" aria-label="Permalink to "6. Result and Error""></a></h2><p><code>vix::mw::Result<T></code> is a typed result container that holds either:</p><ul><li>a value of type <code>T</code></li><li>an <code>Error</code></li></ul><p><code>Error</code> contains:</p><ul><li>HTTP status</li><li>machine-readable code</li><li>human-readable message</li><li>optional details map</li></ul><p>Example:</p><div class="language-cpp vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">cpp</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">return</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> vix</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">mw</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">fail</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">401</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"unauthorized"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"Invalid token"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span></code></pre></div><p>Or:</p><div class="language-cpp vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">cpp</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">return</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> vix</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">mw</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">ok</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(User{...});</span></span></code></pre></div><p>This pattern encourages explicit error handling without exceptions.</p><p><code>Result<void></code> is supported for side-effect operations.</p><hr><h2 id="_7-standard-error-model" tabindex="-1">7. Standard Error Model <a class="header-anchor" href="#_7-standard-error-model" aria-label="Permalink to "7. Standard Error Model""></a></h2><p>The middleware error model standardizes JSON error responses:</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "status"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">401</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "code"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"unauthorized"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "message"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"Invalid token"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "details"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {}</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>Helper constructors exist for common HTTP errors:</p><ul><li><code>bad_request()</code></li><li><code>unauthorized()</code></li><li><code>forbidden()</code></li><li><code>not_found()</code></li><li><code>conflict()</code></li><li><code>internal()</code></li><li>etc.</li></ul><p>Errors are normalized to ensure valid status codes.</p><hr><h2 id="_8-typical-middleware-flow" tabindex="-1">8. Typical Middleware Flow <a class="header-anchor" href="#_8-typical-middleware-flow" aria-label="Permalink to "8. Typical Middleware Flow""></a></h2><ol><li>Request arrives.</li><li>Context is created.</li><li><code>on_begin</code> hooks execute.</li><li>Middleware chain runs.</li><li>Handler executes.</li><li><code>on_end</code> hooks execute.</li><li>If an error occurs, <code>on_error</code> hooks run.</li></ol><p>This guarantees structured lifecycle behavior.</p><hr><h2 id="design-philosophy" tabindex="-1">Design Philosophy <a class="header-anchor" href="#design-philosophy" aria-label="Permalink to "Design Philosophy""></a></h2><p>The Vix middleware layer is:</p><ul><li>explicit</li><li>minimal</li><li>strongly typed</li><li>deterministic in order</li><li>safe under composition</li></ul><p>It avoids:</p><ul><li>hidden global state</li><li>magic injection</li><li>implicit execution order</li><li>runtime reflection</li></ul><p>The result is a predictable pipeline suitable for both small services and large structured systems.</p><hr><h2 id="when-to-use-middleware" tabindex="-1">When to Use Middleware <a class="header-anchor" href="#when-to-use-middleware" aria-label="Permalink to "When to Use Middleware""></a></h2><p>Use middleware for:</p><ul><li>authentication</li><li>authorization</li><li>request validation</li><li>rate limiting</li><li>logging</li><li>tracing</li><li>CORS handling</li><li>request enrichment</li></ul><p>Avoid putting business logic in middleware. Keep it in handlers.</p><hr><h2 id="summary" tabindex="-1">Summary <a class="header-anchor" href="#summary" aria-label="Permalink to "Summary""></a></h2><p>The middleware system provides:</p><ul><li>structured request lifecycle control</li><li>typed dependency injection</li><li>typed request-scoped storage</li><li>explicit continuation control</li><li>standardized error handling</li></ul><p>It is designed to remain simple while scaling to complex applications.</p></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><div class="edit-link" data-v-e257564d><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/vixcpp/vixcpp.github.io/edit/dev/vix-site/docs/modules/core/middleware.md" target="_blank" rel="noreferrer" data-v-e257564d><!--[--><span class="vpi-square-pen edit-link-icon" data-v-e257564d></span> Edit this page on GitHub<!--]--></a></div><!----></div><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/modules/core/session.html" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Previous page</span><span class="title" data-v-e257564d>Session</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/docs/modules/core/threadpool.html" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>ThreadPool</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><!----><!----></div></footer><!--[--><footer class="vix-footerbar" role="contentinfo"><div class="vix-footerbar__inner"><div class="vix-footerbar__brand">Vix.cpp</div><nav class="vix-footerbar__nav" aria-label="Footer"><!--[--><a class="vix-footerbar__link" href="/docs">Docs</a><a class="vix-footerbar__link" href="/docs/guide">Guides</a><a class="vix-footerbar__link" href="/registry">Registry</a><a class="vix-footerbar__link" href="/docs/examples">Examples</a><a class="vix-footerbar__link" href="/services">Services</a><!--]--></nav><div class="vix-footerbar__social" aria-label="Social links"><a class="vix-footerbar__icon" href="https://github.com/vixcpp" target="_blank" rel="noreferrer" aria-label="GitHub"><svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true"><path d="M12 2C6.48 2 2 6.58 2 12.26c0 4.54 2.87 8.39 6.84 9.75.5.1.68-.22.68-.48
0-.24-.01-.88-.01-1.73-2.78.62-3.37-1.37-3.37-1.37-.45-1.18-1.11-1.49-1.11-1.49
-.9-.64.07-.63.07-.63 1 .07 1.53 1.06 1.53 1.06.89 1.57 2.34 1.12 2.91.86
.09-.66.35-1.12.63-1.38-2.22-.26-4.56-1.14-4.56-5.06 0-1.12.39-2.04 1.03-2.76
-.1-.26-.45-1.3.1-2.71 0 0 .84-.27 2.75 1.05A9.2 9.2 0 0 1 12 7.07c.85 0 1.71.12
2.51.35 1.9-1.32 2.74-1.05 2.74-1.05.55 1.41.2 2.45.1 2.71.64.72 1.03 1.64 1.03 2.76
0 3.93-2.34 4.79-4.57 5.05.36.32.68.95.68 1.92 0 1.38-.01 2.5-.01 2.84
0 .27.18.59.69.48A10.04 10.04 0 0 0 22 12.26C22 6.58 17.52 2 12 2z"></path></svg></a><a class="vix-footerbar__icon" href="https://discord.gg/XXXX" target="_blank" rel="noreferrer" aria-label="Discord"><svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true"><path d="M20 4.5a16.3 16.3 0 0 0-4-1.3l-.2.4a15.5 15.5 0 0 1 3 1.2
11.9 11.9 0 0 0-3.7-1.1c-.6.8-1 1.7-1.2 2.1a14.5 14.5 0 0 0-3.8 0
c-.2-.4-.6-1.3-1.2-2.1A11.9 11.9 0 0 0 5.2 4.8a15.5 15.5 0 0 1 3-1.2l-.2-.4
a16.3 16.3 0 0 0-4 1.3C2.4 7 1.8 9.4 2 12c1.3 2 3.3 3.2 5.6 3.7
l.4-.6a9.4 9.4 0 0 1-1.8-.9l.4-.3c1.1.5 2.3.9 3.5 1.1a13 13 0 0 0 4.8 0
c1.2-.2 2.4-.6 3.5-1.1l.4.3c-.6.4-1.2.7-1.8.9l.4.6c2.3-.5 4.3-1.7 5.6-3.7
.3-2.6-.4-5-2-7.5ZM9.2 12.9c-.7 0-1.3-.6-1.3-1.4s.6-1.4 1.3-1.4
1.3.6 1.3 1.4-.6 1.4-1.3 1.4Zm5.6 0c-.7 0-1.3-.6-1.3-1.4s.6-1.4 1.3-1.4
1.3.6 1.3 1.4-.6 1.4-1.3 1.4Z"></path></svg></a><a class="vix-footerbar__icon" href="https://x.com/vixcpp" target="_blank" rel="noreferrer" aria-label="X"><svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true"><path d="M18.9 2H22l-6.8 7.8L23 22h-6.7l-5.2-6.8L5.3 22H2l7.3-8.4L1.7 2h6.9l4.7 6.1L18.9 2Zm-1.2 18h1.7L7.7 3.9H5.9L17.7 20Z"></path></svg></a><a class="vix-footerbar__icon" href="https://www.youtube.com/@vixcpp" target="_blank" rel="noreferrer" aria-label="YouTube"><svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true"><path d="M21.6 7.2a2.7 2.7 0 0 0-1.9-1.9C18 4.9 12 4.9 12 4.9s-6 0-7.7.4
A2.7 2.7 0 0 0 2.4 7.2 28.3 28.3 0 0 0 2 12a28.3 28.3 0 0 0 .4 4.8
2.7 2.7 0 0 0 1.9 1.9c1.7.4 7.7.4 7.7.4s6 0 7.7-.4a2.7 2.7 0 0 0 1.9-1.9
A28.3 28.3 0 0 0 22 12a28.3 28.3 0 0 0-.4-4.8ZM10 15.5v-7l6 3.5-6 3.5Z"></path></svg></a></div></div></footer><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"api.md\":\"DPZyJPoT\",\"api_async.md\":\"D-gqSopA\",\"api_config.md\":\"CSROQcmc\",\"api_http.md\":\"CqECDlrv\",\"api_index.md\":\"CrqOQBb_\",\"api_json.md\":\"CWpGS7a_\",\"api_middleware.md\":\"B9uldjbl\",\"api_p2p.md\":\"11AL4zie\",\"api_websocket.md\":\"Dk_6OgmJ\",\"examples_async.md\":\"DC-C3EKa\",\"examples_auth.md\":\"O7WdPNBR\",\"examples_hello-http.md\":\"Bs36fnd8\",\"examples_index.md\":\"CrxQfvun\",\"examples_ws-chat.md\":\"eDbQjLWx\",\"fundamentals_errors.md\":\"CbEZeIqV\",\"fundamentals_index.md\":\"BZGGmGIw\",\"fundamentals_lifecycle.md\":\"Cc4uOTIK\",\"fundamentals_logging.md\":\"B-jikizr\",\"fundamentals_performance.md\":\"DPHEfGaR\",\"fundamentals_security.md\":\"BxSXY79x\",\"guide.md\":\"CSYCL_01\",\"index.md\":\"BqjVkdBh\",\"inference_index.md\":\"CPSHgl8p\",\"inference_providers.md\":\"DNBRKKVi\",\"inference_reliability.md\":\"DSHpFJl4\",\"inference_routing.md\":\"CI_DheLZ\",\"inference_streaming.md\":\"BZGaEXyE\",\"install.md\":\"T1PZj5vZ\",\"modules_async_api.md\":\"kfA574cs\",\"modules_async_example.md\":\"Cw48IPlQ\",\"modules_async_guide.md\":\"Da2LEsgM\",\"modules_async_index.md\":\"DmqdB3H-\",\"modules_cache_guide.md\":\"DElCExp9\",\"modules_cache_index.md\":\"Cs9PvDQM\",\"modules_cli_commands_build.md\":\"Dg08vAVb\",\"modules_cli_commands_dev.md\":\"BULdG2aa\",\"modules_cli_commands_new.md\":\"MeHmPVZ5\",\"modules_cli_commands_run.md\":\"DWge70uW\",\"modules_cli_commands_tests.md\":\"CfNsP6Qi\",\"modules_cli_extras_orm.md\":\"DeYZTOzV\",\"modules_cli_extras_p2p.md\":\"CYBUIKVI\",\"modules_cli_index.md\":\"EAGt8RMj\",\"modules_cli_packaging_install.md\":\"Ct8ALnKY\",\"modules_cli_packaging_pack.md\":\"BGyyTeP3\",\"modules_cli_packaging_verify.md\":\"XPNTRqgM\",\"modules_cli_registry_add.md\":\"CWt21p6x\",\"modules_cli_registry_list.md\":\"CQAG-5CY\",\"modules_cli_registry_publish.md\":\"CJqbPsuu\",\"modules_cli_registry_registry.md\":\"BZCFpJE-\",\"modules_cli_registry_remove.md\":\"BjsMQNKw\",\"modules_cli_registry_search.md\":\"I6GCFzGx\",\"modules_cli_repl.md\":\"BXuKpEyc\",\"modules_conversion_guide.md\":\"BamEiujU\",\"modules_conversion_index.md\":\"DEWhRPse\",\"modules_core_api.md\":\"BbsUZ1SP\",\"modules_core_app.md\":\"C1supGhj\",\"modules_core_config.md\":\"B1mOmTE3\",\"modules_core_console.md\":\"CydlS58g\",\"modules_core_example.md\":\"BLpJxPzf\",\"modules_core_executor.md\":\"DpwifgZB\",\"modules_core_experimental.md\":\"C_DmqMFd\",\"modules_core_guide.md\":\"4tll-nJ1\",\"modules_core_http.md\":\"DVyBwQtC\",\"modules_core_index.md\":\"TF2x0a-Q\",\"modules_core_middleware.md\":\"kWMBRpYJ\",\"modules_core_openapi.md\":\"DeqU5R4g\",\"modules_core_router.md\":\"CXCzMEVA\",\"modules_core_routing.md\":\"HsdCAFVu\",\"modules_core_server.md\":\"DDt4bnG_\",\"modules_core_session.md\":\"BR1LcMfs\",\"modules_core_threadpool.md\":\"DPg8uS7f\",\"modules_core_timers.md\":\"DPXObfyk\",\"modules_crypto_guide.md\":\"DsSikr4k\",\"modules_crypto_index.md\":\"-VrCImDm\",\"modules_db_guide.md\":\"DMSRMu_1\",\"modules_db_index.md\":\"DEWYiZ5i\",\"modules_deploy_guide.md\":\"BK450i19\",\"modules_deploy_index.md\":\"DPOp5iMh\",\"modules_json_guide.md\":\"DyRsYhel\",\"modules_json_index.md\":\"8gDvXYa3\",\"modules_middleware_guide.md\":\"p0MrRzn5\",\"modules_middleware_index.md\":\"DrAWdL99\",\"modules_net_guide.md\":\"BilUZWek\",\"modules_net_index.md\":\"B2TTD1jE\",\"modules_orm_guide.md\":\"eYjboWMG\",\"modules_orm_index.md\":\"D51CAnWI\",\"modules_p2p_api.md\":\"C5Nl_qqY\",\"modules_p2p_guide.md\":\"Da6LvVfn\",\"modules_p2p_http_guide.md\":\"D1x4sCG3\",\"modules_p2p_http_index.md\":\"DXm1oEWV\",\"modules_p2p_index.md\":\"DB6ma7CV\",\"modules_sync_guide.md\":\"BQIeNLbG\",\"modules_sync_index.md\":\"zqzLdUFH\",\"modules_time_guide.md\":\"C10Wr28a\",\"modules_time_index.md\":\"BD2PYxKm\",\"modules_utils_guide.md\":\"ceCAjZia\",\"modules_utils_index.md\":\"CQNocCMH\",\"modules_validation_guide.md\":\"BsGfgOh5\",\"modules_validation_index.md\":\"CbXoKqq_\",\"modules_webrpc_guide.md\":\"DlP70gdU\",\"modules_webrpc_index.md\":\"DnAv0KkP\",\"modules_websocket_api.md\":\"CjOYJ8HE\",\"modules_websocket_example-chat.md\":\"BykPYTdW\",\"modules_websocket_guide.md\":\"6Zo_4_Sb\",\"modules_websocket_index.md\":\"B_6WmSsD\",\"project-setup.md\":\"BjyQZ3-_\",\"quick-start.md\":\"Of-POqD6\",\"services_consulting.md\":\"BMWbz75F\",\"services_index.md\":\"BP9fJoln\",\"services_support.md\":\"CTKmdQvf\",\"services_training.md\":\"DBZxrqun\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Vix.cpp\",\"description\":\"Modern C++ backend runtime for offline-first, P2P, and high-performance applications.\",\"base\":\"/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"siteTitle\":\"Vix.cpp\",\"logo\":\"/assets/pwa/icon-192.png\",\"appearance\":true,\"nav\":[{\"text\":\"Home\",\"link\":\"https://vixcpp.com/\"},{\"text\":\"Registry\",\"link\":\"https://vixcpp.com/registry/\"}],\"sidebar\":[{\"text\":\"Get started\",\"collapsed\":false,\"items\":[{\"text\":\"Quick Start\",\"link\":\"/quick-start\"},{\"text\":\"Installation\",\"link\":\"/install\"},{\"text\":\"Project Setup\",\"link\":\"/project-setup\"},{\"text\":\"Guides\",\"link\":\"/guide\"}]},{\"text\":\"Modules\",\"collapsed\":false,\"items\":[{\"text\":\"cli\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/cli/index\"},{\"text\":\"vix repl\",\"link\":\"/modules/cli/repl\"},{\"text\":\"Project\",\"collapsed\":true,\"items\":[{\"text\":\"vix new\",\"link\":\"/modules/cli/new\"},{\"text\":\"vix build\",\"link\":\"/modules/cli/build\"},{\"text\":\"vix run\",\"link\":\"/modules/cli/run\"},{\"text\":\"vix dev\",\"link\":\"/modules/cli/dev\"},{\"text\":\"vix tests\",\"link\":\"/modules/cli/tests\"}]},{\"text\":\"Registry\",\"collapsed\":true,\"items\":[{\"text\":\"vix search\",\"link\":\"/modules/cli/search\"},{\"text\":\"vix add\",\"link\":\"/modules/cli/add\"},{\"text\":\"vix remove\",\"link\":\"/modules/cli/remove\"},{\"text\":\"vix list\",\"link\":\"/modules/cli/list\"},{\"text\":\"vix publish\",\"link\":\"/modules/cli/publish\"},{\"text\":\"vix registry\",\"link\":\"/modules/cli/registry\"}]},{\"text\":\"Packaging\",\"collapsed\":true,\"items\":[{\"text\":\"vix pack\",\"link\":\"/modules/cli/pack\"},{\"text\":\"vix verify\",\"link\":\"/modules/cli/verify\"},{\"text\":\"vix install\",\"link\":\"/modules/cli/install\"}]},{\"text\":\"Database\",\"collapsed\":true,\"items\":[{\"text\":\"vix orm\",\"link\":\"/modules/cli/orm\"}]},{\"text\":\"Network\",\"collapsed\":true,\"items\":[{\"text\":\"vix p2p\",\"link\":\"/modules/cli/p2p\"}]}]},{\"text\":\"core\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/core/\"},{\"text\":\"App\",\"link\":\"/modules/core/app\"},{\"text\":\"HTTP\",\"link\":\"/modules/core/http\"},{\"text\":\"Router\",\"link\":\"/modules/core/router\"},{\"text\":\"Server\",\"link\":\"/modules/core/server\"},{\"text\":\"Session\",\"link\":\"/modules/core/session\"},{\"text\":\"Middleware\",\"link\":\"/modules/core/middleware\"},{\"text\":\"ThreadPool\",\"link\":\"/modules/core/threadpool\"},{\"text\":\"Timers\",\"link\":\"/modules/core/timers\"},{\"text\":\"Executor\",\"link\":\"/modules/core/executor\"},{\"text\":\"OpenAPI\",\"link\":\"/modules/core/openapi\"},{\"text\":\"Config\",\"link\":\"/modules/core/config\"},{\"text\":\"Console\",\"link\":\"/modules/core/console\"},{\"text\":\"Examples\",\"link\":\"/modules/core/example\"},{\"text\":\"Guide\",\"link\":\"/modules/core/guide\"}]},{\"text\":\"net\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/net/\"}]},{\"text\":\"json\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/json/\"}]},{\"text\":\"middleware\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/middleware/\"}]},{\"text\":\"db\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/db/\"}]},{\"text\":\"orm\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/orm/\"}]},{\"text\":\"websocket\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/websocket/\"}]},{\"text\":\"async\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/async/\"}]},{\"text\":\"p2p\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/p2p/\"}]},{\"text\":\"p2p_http\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/p2p_http/\"}]},{\"text\":\"crypto\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/crypto/\"}]},{\"text\":\"time\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/time/\"}]},{\"text\":\"conversion\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/conversion/\"}]},{\"text\":\"validation\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/validation/\"}]},{\"text\":\"cache\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/cache/\"}]},{\"text\":\"sync\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/sync/\"}]},{\"text\":\"utils\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/utils/\"}]},{\"text\":\"webrpc\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/webrpc/\"}]},{\"text\":\"deploy\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/deploy/\"}]}]},{\"text\":\"Fundamentals\",\"collapsed\":true,\"items\":[{\"text\":\"Core Concepts\",\"link\":\"/fundamentals\"},{\"text\":\"App Lifecycle\",\"link\":\"/fundamentals/lifecycle\"},{\"text\":\"Error Handling\",\"link\":\"/fundamentals/errors\"},{\"text\":\"Logging\",\"link\":\"/fundamentals/logging\"},{\"text\":\"Performance\",\"link\":\"/fundamentals/performance\"},{\"text\":\"Security\",\"link\":\"/fundamentals/security\"}]},{\"text\":\"Inference\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/inference\"},{\"text\":\"Providers\",\"link\":\"/inference/providers\"},{\"text\":\"Routing and Policies\",\"link\":\"/inference/routing\"},{\"text\":\"Streaming\",\"link\":\"/inference/streaming\"},{\"text\":\"Reliability\",\"link\":\"/inference/reliability\"}]},{\"text\":\"API Reference\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/api/\"},{\"text\":\"HTTP\",\"link\":\"/api/http\"},{\"text\":\"WebSocket\",\"link\":\"/api/websocket\"},{\"text\":\"Json\",\"link\":\"/api/json\"},{\"text\":\"Async\",\"link\":\"/api/async\"},{\"text\":\"P2P\",\"link\":\"/api/p2p\"},{\"text\":\"Middleware\",\"link\":\"/api/middleware\"},{\"text\":\"Config\",\"link\":\"/api/config\"}]},{\"text\":\"Examples\",\"collapsed\":true,\"items\":[{\"text\":\"All Examples\",\"link\":\"/examples/\"},{\"text\":\"Hello HTTP\",\"link\":\"/examples/hello-http\"},{\"text\":\"Auth Middleware\",\"link\":\"/examples/auth\"},{\"text\":\"WebSocket Chat\",\"link\":\"/examples/ws-chat\"},{\"text\":\"Async Worker\",\"link\":\"/examples/async\"}]}],\"search\":{\"provider\":\"local\",\"options\":{\"miniSearch\":{\"searchOptions\":{\"fuzzy\":0.2,\"prefix\":true}}}},\"socialLinks\":[],\"outline\":\"deep\",\"returnToTopLabel\":\"Back to top\",\"lastUpdated\":{\"text\":\"Last updated\"},\"editLink\":{\"pattern\":\"https://github.com/vixcpp/vixcpp.github.io/edit/dev/vix-site/docs/:path\",\"text\":\"Edit this page on GitHub\"},\"footer\":{\"message\":\"\",\"copyright\":\"\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
</body>
</html>