-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy paththreadpool.html
More file actions
132 lines (130 loc) · 117 KB
/
Copy paththreadpool.html
File metadata and controls
132 lines (130 loc) · 117 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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>thread_pool (async/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.BYybgkFJ.js"></script>
<link rel="modulepreload" href="/docs/assets/chunks/markjs.l6TISjdC.js">
<link rel="modulepreload" href="/docs/assets/chunks/minisearch.DigTKvvb.js">
<link rel="modulepreload" href="/docs/assets/chunks/@localSearchIndexroot.BQXDtRpN.js">
<link rel="modulepreload" href="/docs/assets/app.BYybgkFJ.js">
<link rel="modulepreload" href="/docs/assets/modules_async_threadpool.md.BuaQkRGD.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 VPNavBarMenuLink" href="/docs/quick-start.html" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>Docs</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><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://github.com/vixcpp/vix" target="_blank" rel="noreferrer" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>GitHub</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><!--[--><a class="VPSocialLink no-icon" href="https://github.com/vixcpp/vix" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><a class="VPSocialLink no-icon" href="https://x.com/" aria-label="x" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-x"></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 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><!--[--><a class="VPSocialLink no-icon" href="https://github.com/vixcpp/vix" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><a class="VPSocialLink no-icon" href="https://x.com/" aria-label="x" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-x"></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>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" 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" 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><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>CLI</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/modules/cli/index.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/modules/cli/repl.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix repl</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/modules/cli/modules.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix modules</p><!--]--></a><!----></div><!----></div><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>Project</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/new.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix new</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/build.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix build</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/run.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix run</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/dev.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix dev</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/tests.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix tests</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>Registry</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/search.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix search</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/add.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix add</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/remove.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix remove</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/list.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix list</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/publish.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix publish</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/registry.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix registry</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/deps.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix deps</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>Packaging</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/pack.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix pack</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/verify.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix verify</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/install.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix install</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>Database</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/orm.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix orm</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>Network</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/p2p.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>vix p2p</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></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>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/config.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Configuration</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/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/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/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/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/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/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/threadpool.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Thread Pool</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/guide.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Guide</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></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 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>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 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/task.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Task</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/async/scheduler.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Scheduler</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/async/io.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>IO Context</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/async/threadpool.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Thread Pool</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/async/spawn.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Spawn</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/async/when.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>When</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/async/timer.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Timer</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/async/signal.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Signal Handling</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/async/cancel.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Cancellation</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/async/error.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Async Errors</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/async/tcp.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>TCP</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/async/udp.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>UDP</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/async/dns.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>DNS Resolver</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/async/asio.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Asio Network Service</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/async/example.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Examples</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>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>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 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/simple.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Quick Start</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/json/build.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Building JSON</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/json/loads.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Parsing JSON</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/json/dumps.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Serialization</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/json/convert.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Type Conversion</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/json/jpath.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>JPath</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 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/parse.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Parsing API</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/conversion/to_bool.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>to_bool</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/conversion/to_int.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>to_int</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/conversion/to_float.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>to_float</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/conversion/to_string.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>to_string</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/conversion/to_enum.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>to_enum</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/conversion/expected.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Expected<T></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/conversion/error.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>ConversionError</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>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 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/logger.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Logger</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/utils/prettylogs.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Pretty Logs</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/utils/result.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Result</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/utils/validation.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Validation</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/utils/env.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Environment</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/utils/time.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Time</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/utils/string.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>String</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/utils/uuid.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>UUID</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 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/examples.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Examples</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 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/engine.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Engine</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/sync/outbox.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Outbox</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/sync/wal.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>WAL</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/sync/retry_policy.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Retry Policy</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/sync/operation.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Operation Model</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/sync/examples.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Examples</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>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 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/examples.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>Examples</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>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><!--]--><!--[--><!--]--></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_async_threadpool" data-v-39a288b8><div><h1 id="thread-pool-async-core" tabindex="-1">thread_pool (async/core) <a class="header-anchor" href="#thread-pool-async-core" aria-label="Permalink to "thread_pool (async/core)""></a></h1><p><code>vix::async::core::thread_pool</code> is a small CPU thread pool designed to work with <code>io_context</code>. It runs submitted jobs on worker threads and resumes awaiting coroutines back onto the <code>io_context</code> scheduler thread.</p><p>This gives you a clean split:</p><ul><li>Worker threads: do compute work (hashing, parsing, compression, DB client CPU work, etc.)</li><li>Scheduler thread: resumes coroutines and continues async flows</li></ul><h2 id="header" tabindex="-1">Header <a class="header-anchor" href="#header" aria-label="Permalink to "Header""></a></h2><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;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> <vix/async/core/thread_pool.hpp></span></span></code></pre></div><h2 id="concepts" tabindex="-1">Concepts <a class="header-anchor" href="#concepts" aria-label="Permalink to "Concepts""></a></h2><h3 id="two-submission-styles" tabindex="-1">Two submission styles <a class="header-anchor" href="#two-submission-styles" aria-label="Permalink to "Two submission styles""></a></h3><ol><li>Fire-and-forget</li></ol><ul><li><code>submit(std::function<void()>)</code></li><li>No result</li><li>Useful for background work where you do not need to await completion</li></ul><ol start="2"><li>Coroutine-friendly submission</li></ol><ul><li><code>submit(Fn, cancel_token) -> task<R></code></li><li>Lets you <code>co_await</code> the result</li><li>Captures exceptions from the worker and rethrows them when resuming</li></ul><h3 id="cancellation-model" tabindex="-1">Cancellation model <a class="header-anchor" href="#cancellation-model" aria-label="Permalink to "Cancellation model""></a></h3><p>The coroutine-friendly overload accepts a <code>cancel_token</code>.</p><ul><li>If cancellation is already requested when the worker starts executing the job, the job fails with a cancellation error.</li><li>That cancellation error is <code>std::system_error(cancelled_ec())</code> where <code>cancelled_ec()</code> is the async cancellation error code.</li></ul><p>Important: cancellation here is cooperative and checked only at job start. If your job is long-running, you should also check <code>ct.is_cancelled()</code> inside the job body and return early.</p><h3 id="exception-model" tabindex="-1">Exception model <a class="header-anchor" href="#exception-model" aria-label="Permalink to "Exception model""></a></h3><ul><li>Any exception thrown by the job on a worker thread is captured.</li><li>When the awaiting coroutine resumes, <code>await_resume()</code> rethrows that exception.</li></ul><p>That means your coroutine can use normal <code>try/catch</code> around <code>co_await pool.submit(...)</code>.</p><h2 id="api" tabindex="-1">API <a class="header-anchor" href="#api" aria-label="Permalink to "API""></a></h2><h3 id="construction" tabindex="-1">Construction <a class="header-anchor" href="#construction" aria-label="Permalink to "Construction""></a></h3><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;">explicit</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> thread_pool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(io_context</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ctx,</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> std</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">::</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">size_t</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> threads </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</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;">thread</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">hardware_concurrency</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">());</span></span></code></pre></div><ul><li><code>ctx</code> is used to post coroutine continuations back to the scheduler.</li><li><code>threads</code> controls the number of worker threads.</li></ul><h3 id="destruction" tabindex="-1">Destruction <a class="header-anchor" href="#destruction" aria-label="Permalink to "Destruction""></a></h3><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;">~</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">thread_pool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">();</span></span></code></pre></div><ul><li>Requests stop and joins all worker threads.</li></ul><h3 id="fire-and-forget" tabindex="-1">Fire-and-forget <a class="header-anchor" href="#fire-and-forget" aria-label="Permalink to "Fire-and-forget""></a></h3><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;"> submit</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;">function</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"><</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()> </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">fn</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span></code></pre></div><h3 id="awaitable-submission" tabindex="-1">Awaitable submission <a class="header-anchor" href="#awaitable-submission" aria-label="Permalink to "Awaitable submission""></a></h3><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;">template</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> <</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">typename</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Fn</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:#6F42C1;--shiki-dark:#B392F0;"> submit</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Fn</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&&</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> fn</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cancel_token</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> ct</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {})</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> -> </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">task</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:#005CC5;--shiki-dark:#79B8FF;">invoke_result_t</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"><</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Fn</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">>>;</span></span></code></pre></div><ul><li><code>Fn</code> runs on a worker thread.</li><li>The awaiting coroutine resumes on the <code>io_context</code> scheduler thread.</li></ul><h3 id="stop" tabindex="-1">Stop <a class="header-anchor" href="#stop" aria-label="Permalink to "Stop""></a></h3><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;"> stop</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">noexcept</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span></code></pre></div><p>Requests workers to exit.</p><h3 id="size" tabindex="-1">Size <a class="header-anchor" href="#size" aria-label="Permalink to "Size""></a></h3><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:#6F42C1;--shiki-dark:#B392F0;">std</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">::</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">size_t</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> size</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> noexcept</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span></code></pre></div><p>Returns number of worker threads.</p><h2 id="usage" tabindex="-1">Usage <a class="header-anchor" href="#usage" aria-label="Permalink to "Usage""></a></h2><h3 id="example-1-await-a-compute-result" tabindex="-1">Example 1: Await a compute result <a class="header-anchor" href="#example-1-await-a-compute-result" aria-label="Permalink to "Example 1: Await a compute result""></a></h3><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;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> <iostream></span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> <string></span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> <vix/async/core/io_context.hpp></span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> <vix/async/core/thread_pool.hpp></span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> <vix/async/core/task.hpp></span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">using</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> namespace</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;">async</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">core</span><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;">task</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"><</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">> </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">app</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">io_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>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Lazily creates the pool in io_context in your codebase,</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // but you can also create it directly.</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> auto&</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> pool </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;">cpu_pool</span><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;"> std</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">::string input </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "hello"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Run on worker threads</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> auto</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> out </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> co_await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> pool.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">submit</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">([</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">s</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> input</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]() {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Heavy compute goes here</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> std</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">::string r </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> s;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">auto&</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> c : r) c </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> static_cast<char></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(c </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 32</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;"> r;</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:#6A737D;--shiki-dark:#6A737D;"> // Resumed on scheduler thread here</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> std</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">::cout </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"><<</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> out </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"><<</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> co_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:#D73A49;--shiki-dark:#F97583;">int</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> main</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 style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> io_context ctx;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Run the coroutine on the scheduler thread</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> auto</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> t </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> app</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(ctx);</span></span>
<span class="line"><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;">move</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(t).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">start</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(ctx.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">get_scheduler</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">());</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ctx.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">run</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><h3 id="example-2-cancellation" tabindex="-1">Example 2: Cancellation <a class="header-anchor" href="#example-2-cancellation" aria-label="Permalink to "Example 2: Cancellation""></a></h3><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;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> <vix/async/core/io_context.hpp></span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> <vix/async/core/thread_pool.hpp></span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> <vix/async/core/cancel.hpp></span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">using</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> namespace</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;">async</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">::</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">core</span><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;">task</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"><</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">> </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">work</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">io_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>
<span class="line"><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;"> pool </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;">cpu_pool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">();</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> cancel_source cs;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> auto</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ct </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> cs.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">token</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">();</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Request cancellation before scheduling</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> cs.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">request_cancel</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;"> try</span></span>
<span class="line"><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;"> v </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> co_await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> pool.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">submit</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;">]() -> </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">int</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // This will not run if cancellation is observed at start</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 42</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }, ct);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)v;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> catch</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> std</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">::system_error</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> e)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // e.code() should equal cancelled_ec()</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:#D73A49;--shiki-dark:#F97583;"> co_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></code></pre></div><p>If you want deeper cooperative cancellation for long jobs, check the token inside the job:</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;"> v </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> co_await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> pool.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">submit</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">([</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">ct</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]() -> </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">int</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">int</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> i </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">; i </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"><</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 10'000'000</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;">i)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (ct.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">is_cancelled</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">())</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> throw</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;">system_error</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">cancelled_ec</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">());</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // do work...</span></span>
<span class="line"><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:#005CC5;--shiki-dark:#79B8FF;"> 1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}, ct);</span></span></code></pre></div><h3 id="example-3-fire-and-forget" tabindex="-1">Example 3: Fire-and-forget <a class="header-anchor" href="#example-3-fire-and-forget" aria-label="Permalink to "Example 3: Fire-and-forget""></a></h3><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;"> pool </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;">cpu_pool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">();</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">pool.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">submit</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">([] {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // runs on a worker thread</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // no awaiting, no result</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">});</span></span></code></pre></div><h2 id="notes" tabindex="-1">Notes <a class="header-anchor" href="#notes" aria-label="Permalink to "Notes""></a></h2><ul><li><code>thread_pool</code> is intended for CPU-bound work. For I/O-bound work, prefer your async networking and timers services.</li><li>Awaited jobs always resume on the <code>io_context</code> scheduler thread. This keeps coroutine code deterministic and reduces locking in user code.</li><li>The pool uses a single mutex and a FIFO job queue. This keeps behavior explicit and simple.</li></ul><h2 id="related" tabindex="-1">Related <a class="header-anchor" href="#related" aria-label="Permalink to "Related""></a></h2><ul><li><code>cancel_source</code>, <code>cancel_token</code> in <code>vix::async::core::cancel</code></li><li><code>scheduler</code> in <code>vix::async::core::scheduler</code></li><li><code>task<T></code> in <code>vix::async::core::task</code></li><li><code>io_context</code> in <code>vix::async::core::io_context</code></li></ul></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/async/threadpool.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 class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>Last updated: <time datetime="2026-02-12T17:54:27.000Z" data-v-e98dd255></time></p></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/async/io.html" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Previous page</span><span class="title" data-v-e257564d>IO Context</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/docs/modules/async/spawn.html" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>Spawn</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\":\"CVJdr-eN\",\"api_async.md\":\"T-h93m4E\",\"api_config.md\":\"D1ZrU3I-\",\"api_http.md\":\"Cu6IcBbZ\",\"api_index.md\":\"BW-LD6ZJ\",\"api_json.md\":\"BNJkYYYC\",\"api_middleware.md\":\"BLpQXhS5\",\"api_p2p.md\":\"CYB3Moad\",\"api_websocket.md\":\"WPnZd0iU\",\"examples_async.md\":\"CYRqsL5r\",\"examples_auth.md\":\"CgElZaK2\",\"examples_hello-http.md\":\"BEf9uPoV\",\"examples_index.md\":\"DPfJojLT\",\"examples_ws-chat.md\":\"HMvyKNE_\",\"fundamentals_errors.md\":\"CKqZQisS\",\"fundamentals_index.md\":\"DlOPBm_y\",\"fundamentals_lifecycle.md\":\"BdTmKarV\",\"fundamentals_logging.md\":\"EdECFWjO\",\"fundamentals_performance.md\":\"C-jWstpX\",\"fundamentals_security.md\":\"bAQnvSYa\",\"guide.md\":\"BwxMTnfu\",\"index.md\":\"DpgZ_kGK\",\"inference_index.md\":\"DWGy9uNN\",\"inference_providers.md\":\"CHOD8HLE\",\"inference_reliability.md\":\"D5UpzuBY\",\"inference_routing.md\":\"BQCjVlll\",\"inference_streaming.md\":\"DXA_Ltlu\",\"install.md\":\"D8fkr2ls\",\"modules_async_api.md\":\"D827Gq6h\",\"modules_async_asio.md\":\"Bsgq9u72\",\"modules_async_cancel.md\":\"BEL027yq\",\"modules_async_dns.md\":\"K54qDAiB\",\"modules_async_error.md\":\"DDFpXxgq\",\"modules_async_example.md\":\"DvBEIddd\",\"modules_async_index.md\":\"Duci8b_Q\",\"modules_async_io.md\":\"nWfUc4dk\",\"modules_async_scheduler.md\":\"CuyRQcwC\",\"modules_async_signal.md\":\"BstbyWYL\",\"modules_async_spawn.md\":\"Cg5_83J6\",\"modules_async_task.md\":\"mGpBxUHC\",\"modules_async_tcp.md\":\"FPY9UMv7\",\"modules_async_threadpool.md\":\"BuaQkRGD\",\"modules_async_timer.md\":\"Box51WSH\",\"modules_async_udp.md\":\"D_6r8ACo\",\"modules_async_when.md\":\"ZzMz6UdY\",\"modules_cache_guide.md\":\"DOdFN22S\",\"modules_cache_index.md\":\"9-JGe5nQ\",\"modules_cli_add.md\":\"C6fDVReL\",\"modules_cli_build.md\":\"CaGQ3TGZ\",\"modules_cli_deps.md\":\"-zhh57cO\",\"modules_cli_dev.md\":\"Chf2fWNI\",\"modules_cli_index.md\":\"BQ5oOyda\",\"modules_cli_install.md\":\"MeguFU09\",\"modules_cli_list.md\":\"B33Jyujx\",\"modules_cli_modules.md\":\"-1Z4WyCg\",\"modules_cli_new.md\":\"Ck2bvgek\",\"modules_cli_orm.md\":\"DCvX6uTf\",\"modules_cli_p2p.md\":\"D1r7loys\",\"modules_cli_pack.md\":\"uo9HnDO2\",\"modules_cli_publish.md\":\"BXzn09wt\",\"modules_cli_registry.md\":\"BtRGA52T\",\"modules_cli_remove.md\":\"DWyVAWBf\",\"modules_cli_repl.md\":\"DdLFhj6c\",\"modules_cli_run.md\":\"BpedUxL4\",\"modules_cli_search.md\":\"CYhejKRR\",\"modules_cli_tests.md\":\"Coxnd4_C\",\"modules_cli_verify.md\":\"vhHUHivE\",\"modules_conversion_error.md\":\"VHV7LHeU\",\"modules_conversion_expected.md\":\"C49ixy1V\",\"modules_conversion_index.md\":\"BINl9IJE\",\"modules_conversion_parse.md\":\"Btbwr_6K\",\"modules_conversion_to_bool.md\":\"DtoX76ig\",\"modules_conversion_to_enum.md\":\"CxUDoY24\",\"modules_conversion_to_float.md\":\"DqU7Fpyb\",\"modules_conversion_to_int.md\":\"COFqEJde\",\"modules_conversion_to_string.md\":\"BG3HJ06l\",\"modules_core_api.md\":\"LouFtZGp\",\"modules_core_app.md\":\"TkIlM-6q\",\"modules_core_config.md\":\"B2U8OuTc\",\"modules_core_console.md\":\"CifUgNpe\",\"modules_core_example.md\":\"BOCl1fwq\",\"modules_core_executor.md\":\"DR0MZmw1\",\"modules_core_experimental.md\":\"8MGM-V3E\",\"modules_core_guide.md\":\"BvajaPmN\",\"modules_core_http.md\":\"Gz1OQYD1\",\"modules_core_index.md\":\"-jVG9D4L\",\"modules_core_middleware.md\":\"DiEG-jj7\",\"modules_core_openapi.md\":\"DAsMivtz\",\"modules_core_router.md\":\"CDI5Qz9L\",\"modules_core_routing.md\":\"DhgGkAb8\",\"modules_core_server.md\":\"CfbMyTAs\",\"modules_core_session.md\":\"y7iQf0Jp\",\"modules_core_threadpool.md\":\"HhQ5lJOP\",\"modules_core_timers.md\":\"BM3bKY3s\",\"modules_crypto_guide.md\":\"WXCpSF2o\",\"modules_crypto_index.md\":\"DtN-eWmL\",\"modules_db_guide.md\":\"Cic66hEE\",\"modules_db_index.md\":\"CEDxezRn\",\"modules_deploy_guide.md\":\"C1tyiBpZ\",\"modules_deploy_index.md\":\"CCrSFIVB\",\"modules_json_build.md\":\"2SIc2Cdy\",\"modules_json_convert.md\":\"CG5ISLgZ\",\"modules_json_dumps.md\":\"3V4gNQyh\",\"modules_json_guide.md\":\"-kol65xQ\",\"modules_json_index.md\":\"BHFTvdrD\",\"modules_json_jpath.md\":\"BieLnQ0x\",\"modules_json_loads.md\":\"DYBzBK6C\",\"modules_json_simple.md\":\"DGDMKLyh\",\"modules_middleware_guide.md\":\"9KPPtECC\",\"modules_middleware_index.md\":\"xeaBcSN0\",\"modules_net_guide.md\":\"CCIeAGSO\",\"modules_net_index.md\":\"CpzKor4-\",\"modules_orm_examples.md\":\"CLJTyAfR\",\"modules_orm_index.md\":\"CoxB_AMo\",\"modules_p2p_api.md\":\"Tiz912Jo\",\"modules_p2p_guide.md\":\"CIiyxlHt\",\"modules_p2p_http_guide.md\":\"CSqZCvE5\",\"modules_p2p_http_index.md\":\"B4i7PWrx\",\"modules_p2p_index.md\":\"C8PPPjgZ\",\"modules_sync_engine.md\":\"CQqU3KEJ\",\"modules_sync_examples.md\":\"B9fTZdsk\",\"modules_sync_index.md\":\"w4MN-qOC\",\"modules_sync_operation.md\":\"ChVsXl6u\",\"modules_sync_outbox.md\":\"-vriT0_u\",\"modules_sync_retry_policy.md\":\"Bvr4t1e1\",\"modules_sync_wal.md\":\"7scFFzCt\",\"modules_time_guide.md\":\"w4VdKYSN\",\"modules_time_index.md\":\"B4jgBuJn\",\"modules_utils_env.md\":\"xvlt-P5t\",\"modules_utils_index.md\":\"B73MNLN3\",\"modules_utils_logger.md\":\"DiEv86_c\",\"modules_utils_prettylogs.md\":\"D8mNu3ee\",\"modules_utils_result.md\":\"C-gzo_Se\",\"modules_utils_string.md\":\"B_PjzPbc\",\"modules_utils_time.md\":\"4H6XLGdj\",\"modules_utils_uuid.md\":\"DSaVBViv\",\"modules_utils_validation.md\":\"DnV-1MH0\",\"modules_validation_guide.md\":\"BTF6R-XX\",\"modules_validation_index.md\":\"BcpwyGV1\",\"modules_webrpc_examples.md\":\"DqzOtYRB\",\"modules_webrpc_index.md\":\"CnK8TKrJ\",\"modules_websocket_api.md\":\"DuYNb75w\",\"modules_websocket_example-chat.md\":\"DxLD4eMF\",\"modules_websocket_guide.md\":\"FOvYLyAR\",\"modules_websocket_index.md\":\"BabQZJDy\",\"project-setup.md\":\"CqDTPKhT\",\"quick-start.md\":\"BzLiiEmy\",\"services_consulting.md\":\"Cw7SBfSH\",\"services_index.md\":\"BOjWW12H\",\"services_support.md\":\"ClroRHqx\",\"services_training.md\":\"wb5wPsY4\"}");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\":\"Docs\",\"link\":\"/quick-start\"},{\"text\":\"Registry\",\"link\":\"https://vixcpp.com/registry/\"},{\"text\":\"GitHub\",\"link\":\"https://github.com/vixcpp/vix\"}],\"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\":\"Fundamentals\",\"collapsed\":false,\"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\":\"Examples\",\"collapsed\":false,\"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\"}]},{\"text\":\"CLI\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/cli/index\"},{\"text\":\"vix repl\",\"link\":\"/modules/cli/repl\"},{\"text\":\"vix modules\",\"link\":\"/modules/cli/modules\"},{\"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\":\"vix deps\",\"link\":\"/modules/cli/deps\"}]},{\"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\":\"Modules\",\"collapsed\":false,\"items\":[{\"text\":\"Core\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/core/\"},{\"text\":\"App\",\"link\":\"/modules/core/app\"},{\"text\":\"Configuration\",\"link\":\"/modules/core/config\"},{\"text\":\"Console\",\"link\":\"/modules/core/console\"},{\"text\":\"HTTP\",\"link\":\"/modules/core/http\"},{\"text\":\"Router\",\"link\":\"/modules/core/router\"},{\"text\":\"Middleware\",\"link\":\"/modules/core/middleware\"},{\"text\":\"Session\",\"link\":\"/modules/core/session\"},{\"text\":\"OpenAPI\",\"link\":\"/modules/core/openapi\"},{\"text\":\"Server\",\"link\":\"/modules/core/server\"},{\"text\":\"Executor\",\"link\":\"/modules/core/executor\"},{\"text\":\"Thread Pool\",\"link\":\"/modules/core/threadpool\"},{\"text\":\"Timers\",\"link\":\"/modules/core/timers\"},{\"text\":\"Guide\",\"link\":\"/modules/core/guide\"},{\"text\":\"Examples\",\"link\":\"/modules/core/example\"}]},{\"text\":\"Middleware\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/middleware/\"}]},{\"text\":\"Async\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/async/\"},{\"text\":\"Task\",\"link\":\"/modules/async/task\"},{\"text\":\"Scheduler\",\"link\":\"/modules/async/scheduler\"},{\"text\":\"IO Context\",\"link\":\"/modules/async/io\"},{\"text\":\"Thread Pool\",\"link\":\"/modules/async/threadpool\"},{\"text\":\"Spawn\",\"link\":\"/modules/async/spawn\"},{\"text\":\"When\",\"link\":\"/modules/async/when\"},{\"text\":\"Timer\",\"link\":\"/modules/async/timer\"},{\"text\":\"Signal Handling\",\"link\":\"/modules/async/signal\"},{\"text\":\"Cancellation\",\"link\":\"/modules/async/cancel\"},{\"text\":\"Async Errors\",\"link\":\"/modules/async/error\"},{\"text\":\"TCP\",\"link\":\"/modules/async/tcp\"},{\"text\":\"UDP\",\"link\":\"/modules/async/udp\"},{\"text\":\"DNS Resolver\",\"link\":\"/modules/async/dns\"},{\"text\":\"Asio Network Service\",\"link\":\"/modules/async/asio\"},{\"text\":\"Examples\",\"link\":\"/modules/async/example\"}]},{\"text\":\"Net\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/net/\"}]},{\"text\":\"WebSocket\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/websocket/\"}]},{\"text\":\"JSON\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/json/\"},{\"text\":\"Quick Start\",\"link\":\"/modules/json/simple\"},{\"text\":\"Building JSON\",\"link\":\"/modules/json/build\"},{\"text\":\"Parsing JSON\",\"link\":\"/modules/json/loads\"},{\"text\":\"Serialization\",\"link\":\"/modules/json/dumps\"},{\"text\":\"Type Conversion\",\"link\":\"/modules/json/convert\"},{\"text\":\"JPath\",\"link\":\"/modules/json/jpath\"}]},{\"text\":\"Conversion\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/conversion/\"},{\"text\":\"Parsing API\",\"link\":\"/modules/conversion/parse\"},{\"text\":\"to_bool\",\"link\":\"/modules/conversion/to_bool\"},{\"text\":\"to_int\",\"link\":\"/modules/conversion/to_int\"},{\"text\":\"to_float\",\"link\":\"/modules/conversion/to_float\"},{\"text\":\"to_string\",\"link\":\"/modules/conversion/to_string\"},{\"text\":\"to_enum\",\"link\":\"/modules/conversion/to_enum\"},{\"text\":\"Expected<T>\",\"link\":\"/modules/conversion/expected\"},{\"text\":\"ConversionError\",\"link\":\"/modules/conversion/error\"}]},{\"text\":\"Validation\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/validation/\"}]},{\"text\":\"Utils\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/utils/\"},{\"text\":\"Logger\",\"link\":\"/modules/utils/logger\"},{\"text\":\"Pretty Logs\",\"link\":\"/modules/utils/prettylogs\"},{\"text\":\"Result\",\"link\":\"/modules/utils/result\"},{\"text\":\"Validation\",\"link\":\"/modules/utils/validation\"},{\"text\":\"Environment\",\"link\":\"/modules/utils/env\"},{\"text\":\"Time\",\"link\":\"/modules/utils/time\"},{\"text\":\"String\",\"link\":\"/modules/utils/string\"},{\"text\":\"UUID\",\"link\":\"/modules/utils/uuid\"}]},{\"text\":\"DB\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/db/\"}]},{\"text\":\"ORM\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/orm/\"},{\"text\":\"Examples\",\"link\":\"/modules/orm/examples\"}]},{\"text\":\"Cache\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/cache/\"}]},{\"text\":\"Sync\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/sync/\"},{\"text\":\"Engine\",\"link\":\"/modules/sync/engine\"},{\"text\":\"Outbox\",\"link\":\"/modules/sync/outbox\"},{\"text\":\"WAL\",\"link\":\"/modules/sync/wal\"},{\"text\":\"Retry Policy\",\"link\":\"/modules/sync/retry_policy\"},{\"text\":\"Operation Model\",\"link\":\"/modules/sync/operation\"},{\"text\":\"Examples\",\"link\":\"/modules/sync/examples\"}]},{\"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\":\"WebRPC\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/webrpc/\"},{\"text\":\"Examples\",\"link\":\"/modules/webrpc/examples\"}]},{\"text\":\"Deploy\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/modules/deploy/\"}]}]},{\"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\"}]}],\"search\":{\"provider\":\"local\",\"options\":{\"miniSearch\":{\"searchOptions\":{\"fuzzy\":0.2,\"prefix\":true}}}},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/vixcpp/vix\"},{\"icon\":\"x\",\"link\":\"https://x.com/\"}],\"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>