This repository has been archived by the owner on Oct 29, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
54 lines (54 loc) · 43.5 KB
/
index.html
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
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="VuePress 2.0.0-beta.53">
<style>
:root {
--c-bg: #fff;
}
html.dark {
--c-bg: #22272e;
}
html, body {
background-color: var(--c-bg);
}
</style>
<script>
const userMode = localStorage.getItem('vuepress-color-scheme');
const systemDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
if (userMode === 'dark' || (userMode !== 'light' && systemDarkMode)) {
document.documentElement.classList.toggle('dark', true);
}
</script>
<link rel="icon" type="image/png" sizes="16x16" href="/images/icons/favicon-16x16.png"><link rel="icon" type="image/png" sizes="32x32" href="/images/icons/favicon-32x32.png"><link rel="manifest" href="/manifest.webmanifest"><meta name="application-name" content="VuePress"><meta name="apple-mobile-web-app-title" content="VuePress"><meta name="apple-mobile-web-app-status-bar-style" content="black"><link rel="apple-touch-icon" href="/images/icons/apple-touch-icon.png"><link rel="mask-icon" href="/images/icons/safari-pinned-tab.svg" color="#3eaf7c"><meta name="msapplication-TileColor" content="#3eaf7c"><meta name="theme-color" content="#3eaf7c"><title>Home | Salvo</title><meta name="description" content="Salvo is a powerful and simplest web server framework in Rust world">
<link rel="preload" href="/assets/style.0d909b9e.css" as="style" /><link rel="stylesheet" href="/assets/style.0d909b9e.css" />
<link rel="modulepreload" href="/assets/app.3f2e9511.js"><link rel="modulepreload" href="/assets/index.html.f3a26357.js"><link rel="modulepreload" href="/assets/index.html.03a81ed3.js"><link rel="prefetch" href="/assets/donate.html.167e670d.js" as="script" /><link rel="prefetch" href="/assets/index.html.ef7487b6.js" as="script" /><link rel="prefetch" href="/assets/guide.html.eb7521b3.js" as="script" /><link rel="prefetch" href="/assets/index.html.57da109f.js" as="script" /><link rel="prefetch" href="/assets/donate.html.27fa3c65.js" as="script" /><link rel="prefetch" href="/assets/catcher.html.8de89355.js" as="script" /><link rel="prefetch" href="/assets/depot.html.ffa207bf.js" as="script" /><link rel="prefetch" href="/assets/handler.html.076016b3.js" as="script" /><link rel="prefetch" href="/assets/named-file.html.7b56fd97.js" as="script" /><link rel="prefetch" href="/assets/request.html.2a45957e.js" as="script" /><link rel="prefetch" href="/assets/response.html.e5f6558d.js" as="script" /><link rel="prefetch" href="/assets/router.html.3b43eba0.js" as="script" /><link rel="prefetch" href="/assets/testing.html.9c51ce16.js" as="script" /><link rel="prefetch" href="/assets/writer.html.24107c0c.js" as="script" /><link rel="prefetch" href="/assets/deploy.html.b05146ac.js" as="script" /><link rel="prefetch" href="/assets/graceful-shutdown.html.a9b2f1e4.js" as="script" /><link rel="prefetch" href="/assets/serve-file-download.html.322a56e1.js" as="script" /><link rel="prefetch" href="/assets/affix.html.88bbae12.js" as="script" /><link rel="prefetch" href="/assets/basic-auth.html.52647c24.js" as="script" /><link rel="prefetch" href="/assets/cache.html.c49e8486.js" as="script" /><link rel="prefetch" href="/assets/caching-headers.html.dd30b4ce.js" as="script" /><link rel="prefetch" href="/assets/compression.html.0b675114.js" as="script" /><link rel="prefetch" href="/assets/cors.html.5097fd3d.js" as="script" /><link rel="prefetch" href="/assets/csrf.html.d99a56fd.js" as="script" /><link rel="prefetch" href="/assets/flash.html.9a765080.js" as="script" /><link rel="prefetch" href="/assets/force-https.html.6c14bba7.js" as="script" /><link rel="prefetch" href="/assets/jwt-auth.html.5194ea00.js" as="script" /><link rel="prefetch" href="/assets/logging.html.44e5b8fa.js" as="script" /><link rel="prefetch" href="/assets/proxy.html.d5443545.js" as="script" /><link rel="prefetch" href="/assets/rate-limiter.html.ee6d1722.js" as="script" /><link rel="prefetch" href="/assets/serve-static.html.cc4900d1.js" as="script" /><link rel="prefetch" href="/assets/session.html.0eff1086.js" as="script" /><link rel="prefetch" href="/assets/size-limiter.html.faeb85c0.js" as="script" /><link rel="prefetch" href="/assets/sse.html.4a08f542.js" as="script" /><link rel="prefetch" href="/assets/timeout.html.c7de94f0.js" as="script" /><link rel="prefetch" href="/assets/trailing-slash.html.e86f104a.js" as="script" /><link rel="prefetch" href="/assets/ws.html.bcfcdcde.js" as="script" /><link rel="prefetch" href="/assets/file-upload.html.9b765bfa.js" as="script" /><link rel="prefetch" href="/assets/handle-error.html.b8d62ea5.js" as="script" /><link rel="prefetch" href="/assets/use-template-engine.html.a9792417.js" as="script" /><link rel="prefetch" href="/assets/working-with-database.html.36874b4b.js" as="script" /><link rel="prefetch" href="/assets/index.html.e89c3c62.js" as="script" /><link rel="prefetch" href="/assets/guide.html.733ec99f.js" as="script" /><link rel="prefetch" href="/assets/index.html.0a9e0171.js" as="script" /><link rel="prefetch" href="/assets/guide.html.0d6e85bd.js" as="script" /><link rel="prefetch" href="/assets/catcher.html.e2ee5061.js" as="script" /><link rel="prefetch" href="/assets/depot.html.1ca5ed7d.js" as="script" /><link rel="prefetch" href="/assets/handler.html.d45166aa.js" as="script" /><link rel="prefetch" href="/assets/named-file.html.7c200ef1.js" as="script" /><link rel="prefetch" href="/assets/request.html.75d9fde5.js" as="script" /><link rel="prefetch" href="/assets/response.html.c4195a1b.js" as="script" /><link rel="prefetch" href="/assets/router.html.c2a5de64.js" as="script" /><link rel="prefetch" href="/assets/testing.html.93582a98.js" as="script" /><link rel="prefetch" href="/assets/writer.html.6b203836.js" as="script" /><link rel="prefetch" href="/assets/_index.html.71a3590e.js" as="script" /><link rel="prefetch" href="/assets/deploy.html.03402b01.js" as="script" /><link rel="prefetch" href="/assets/graceful-shutdown.html.ed001fb7.js" as="script" /><link rel="prefetch" href="/assets/_index.html.35e1f863.js" as="script" /><link rel="prefetch" href="/assets/affix.html.b238eb6e.js" as="script" /><link rel="prefetch" href="/assets/basic-auth.html.204f815c.js" as="script" /><link rel="prefetch" href="/assets/cache.html.0d2d03af.js" as="script" /><link rel="prefetch" href="/assets/caching-headers.html.f64c6254.js" as="script" /><link rel="prefetch" href="/assets/compression.html.3ca9e4cf.js" as="script" /><link rel="prefetch" href="/assets/cors.html.76246068.js" as="script" /><link rel="prefetch" href="/assets/csrf.html.3f5f0bf8.js" as="script" /><link rel="prefetch" href="/assets/flash.html.1cc02bfb.js" as="script" /><link rel="prefetch" href="/assets/force-https.html.f8505b89.js" as="script" /><link rel="prefetch" href="/assets/jwt-auth.html.3af9777e.js" as="script" /><link rel="prefetch" href="/assets/logging.html.a408d7b6.js" as="script" /><link rel="prefetch" href="/assets/proxy.html.361e37d4.js" as="script" /><link rel="prefetch" href="/assets/rate-limiter.html.92db2c3e.js" as="script" /><link rel="prefetch" href="/assets/serve-static.html.64037969.js" as="script" /><link rel="prefetch" href="/assets/session.html.a01508ba.js" as="script" /><link rel="prefetch" href="/assets/size-limiter.html.76c8aa36.js" as="script" /><link rel="prefetch" href="/assets/sse.html.f69d91a4.js" as="script" /><link rel="prefetch" href="/assets/third-party.html.bc96b7f4.js" as="script" /><link rel="prefetch" href="/assets/timeout.html.67308645.js" as="script" /><link rel="prefetch" href="/assets/trailing-slash.html.6331161c.js" as="script" /><link rel="prefetch" href="/assets/ws.html.abb73f7d.js" as="script" /><link rel="prefetch" href="/assets/_index.html.318dd19d.js" as="script" /><link rel="prefetch" href="/assets/file-upload.html.181c527b.js" as="script" /><link rel="prefetch" href="/assets/handle-error.html.abda4ef6.js" as="script" /><link rel="prefetch" href="/assets/use-template-engine.html.513e70d0.js" as="script" /><link rel="prefetch" href="/assets/working-with-database.html.ff5f0298.js" as="script" /><link rel="prefetch" href="/assets/_index.html.03d7f61e.js" as="script" /><link rel="prefetch" href="/assets/catcher.html.3d182e75.js" as="script" /><link rel="prefetch" href="/assets/depot.html.24e98a6c.js" as="script" /><link rel="prefetch" href="/assets/handler.html.1d948127.js" as="script" /><link rel="prefetch" href="/assets/named-file.html.5d72dac2.js" as="script" /><link rel="prefetch" href="/assets/request.html.fa15c607.js" as="script" /><link rel="prefetch" href="/assets/response.html.c2d90011.js" as="script" /><link rel="prefetch" href="/assets/router.html.7e5cea55.js" as="script" /><link rel="prefetch" href="/assets/testing.html.2379c624.js" as="script" /><link rel="prefetch" href="/assets/writer.html.fd714753.js" as="script" /><link rel="prefetch" href="/assets/_index.html.cc5cd254.js" as="script" /><link rel="prefetch" href="/assets/deploy.html.c1b04f6e.js" as="script" /><link rel="prefetch" href="/assets/graceful-shutdown.html.036fb061.js" as="script" /><link rel="prefetch" href="/assets/_index.html.4702dc10.js" as="script" /><link rel="prefetch" href="/assets/hello_world.html.322554f7.js" as="script" /><link rel="prefetch" href="/assets/_index.html.d3c2fb6a.js" as="script" /><link rel="prefetch" href="/assets/affix.html.e4181d00.js" as="script" /><link rel="prefetch" href="/assets/basic-auth.html.5a2a9781.js" as="script" /><link rel="prefetch" href="/assets/cache.html.688212bf.js" as="script" /><link rel="prefetch" href="/assets/caching-headers.html.f04e04f3.js" as="script" /><link rel="prefetch" href="/assets/compression.html.4f83483a.js" as="script" /><link rel="prefetch" href="/assets/cors.html.b2821523.js" as="script" /><link rel="prefetch" href="/assets/csrf.html.f6692887.js" as="script" /><link rel="prefetch" href="/assets/flash.html.3462cd12.js" as="script" /><link rel="prefetch" href="/assets/force-https.html.f936e44e.js" as="script" /><link rel="prefetch" href="/assets/jwt-auth.html.c3dfcf84.js" as="script" /><link rel="prefetch" href="/assets/logging.html.9d5a67ba.js" as="script" /><link rel="prefetch" href="/assets/proxy.html.bf8be2e2.js" as="script" /><link rel="prefetch" href="/assets/rate-limiter.html.f3d034a7.js" as="script" /><link rel="prefetch" href="/assets/serve-static.html.2e00cc02.js" as="script" /><link rel="prefetch" href="/assets/session.html.c1014422.js" as="script" /><link rel="prefetch" href="/assets/size-limiter.html.6027dfc0.js" as="script" /><link rel="prefetch" href="/assets/sse.html.9f9035e4.js" as="script" /><link rel="prefetch" href="/assets/third-party.html.00e4fc99.js" as="script" /><link rel="prefetch" href="/assets/timeout.html.0997cf5a.js" as="script" /><link rel="prefetch" href="/assets/trailing-slash.html.85d17378.js" as="script" /><link rel="prefetch" href="/assets/ws.html.de8a9e87.js" as="script" /><link rel="prefetch" href="/assets/_index.html.741228a2.js" as="script" /><link rel="prefetch" href="/assets/file-upload.html.a76fa826.js" as="script" /><link rel="prefetch" href="/assets/handle-error.html.cef35c23.js" as="script" /><link rel="prefetch" href="/assets/use-template-engine.html.1fd1abb9.js" as="script" /><link rel="prefetch" href="/assets/working-with-database.html.f2d73c37.js" as="script" /><link rel="prefetch" href="/assets/404.html.98e87f94.js" as="script" /><link rel="prefetch" href="/assets/donate.html.3f24ef6b.js" as="script" /><link rel="prefetch" href="/assets/index.html.31422e2d.js" as="script" /><link rel="prefetch" href="/assets/guide.html.f22779d8.js" as="script" /><link rel="prefetch" href="/assets/index.html.252e13dc.js" as="script" /><link rel="prefetch" href="/assets/donate.html.4a9d7342.js" as="script" /><link rel="prefetch" href="/assets/catcher.html.57ef7d8c.js" as="script" /><link rel="prefetch" href="/assets/depot.html.87878d84.js" as="script" /><link rel="prefetch" href="/assets/handler.html.858f5d72.js" as="script" /><link rel="prefetch" href="/assets/named-file.html.70cbb8b3.js" as="script" /><link rel="prefetch" href="/assets/request.html.8b15265d.js" as="script" /><link rel="prefetch" href="/assets/response.html.649ea9a2.js" as="script" /><link rel="prefetch" href="/assets/router.html.8bc37cd3.js" as="script" /><link rel="prefetch" href="/assets/testing.html.28f16ff3.js" as="script" /><link rel="prefetch" href="/assets/writer.html.84fe08d9.js" as="script" /><link rel="prefetch" href="/assets/deploy.html.c91a4f73.js" as="script" /><link rel="prefetch" href="/assets/graceful-shutdown.html.b1c64c14.js" as="script" /><link rel="prefetch" href="/assets/serve-file-download.html.2c5c34b4.js" as="script" /><link rel="prefetch" href="/assets/affix.html.927bca95.js" as="script" /><link rel="prefetch" href="/assets/basic-auth.html.e3510158.js" as="script" /><link rel="prefetch" href="/assets/cache.html.056ecb97.js" as="script" /><link rel="prefetch" href="/assets/caching-headers.html.fe1c8a41.js" as="script" /><link rel="prefetch" href="/assets/compression.html.d8092482.js" as="script" /><link rel="prefetch" href="/assets/cors.html.fdb822d8.js" as="script" /><link rel="prefetch" href="/assets/csrf.html.89ec8c6b.js" as="script" /><link rel="prefetch" href="/assets/flash.html.e422334a.js" as="script" /><link rel="prefetch" href="/assets/force-https.html.784c16d9.js" as="script" /><link rel="prefetch" href="/assets/jwt-auth.html.56ed2d56.js" as="script" /><link rel="prefetch" href="/assets/logging.html.afe9b06e.js" as="script" /><link rel="prefetch" href="/assets/proxy.html.c3359dc6.js" as="script" /><link rel="prefetch" href="/assets/rate-limiter.html.200407be.js" as="script" /><link rel="prefetch" href="/assets/serve-static.html.1cd2a95c.js" as="script" /><link rel="prefetch" href="/assets/session.html.0776f353.js" as="script" /><link rel="prefetch" href="/assets/size-limiter.html.3ba408e9.js" as="script" /><link rel="prefetch" href="/assets/sse.html.cabf828b.js" as="script" /><link rel="prefetch" href="/assets/timeout.html.3ef0c411.js" as="script" /><link rel="prefetch" href="/assets/trailing-slash.html.a3c94f3c.js" as="script" /><link rel="prefetch" href="/assets/ws.html.4786918c.js" as="script" /><link rel="prefetch" href="/assets/file-upload.html.85b661f6.js" as="script" /><link rel="prefetch" href="/assets/handle-error.html.11b9b10d.js" as="script" /><link rel="prefetch" href="/assets/use-template-engine.html.66558d33.js" as="script" /><link rel="prefetch" href="/assets/working-with-database.html.b0c74bcd.js" as="script" /><link rel="prefetch" href="/assets/index.html.e636a116.js" as="script" /><link rel="prefetch" href="/assets/guide.html.b11197fd.js" as="script" /><link rel="prefetch" href="/assets/index.html.d182676e.js" as="script" /><link rel="prefetch" href="/assets/guide.html.c428c8b6.js" as="script" /><link rel="prefetch" href="/assets/catcher.html.45e14d40.js" as="script" /><link rel="prefetch" href="/assets/depot.html.7b210886.js" as="script" /><link rel="prefetch" href="/assets/handler.html.7847c345.js" as="script" /><link rel="prefetch" href="/assets/named-file.html.27303a22.js" as="script" /><link rel="prefetch" href="/assets/request.html.49489b31.js" as="script" /><link rel="prefetch" href="/assets/response.html.651b4c03.js" as="script" /><link rel="prefetch" href="/assets/router.html.6beab99c.js" as="script" /><link rel="prefetch" href="/assets/testing.html.b73ee1b1.js" as="script" /><link rel="prefetch" href="/assets/writer.html.6c334818.js" as="script" /><link rel="prefetch" href="/assets/_index.html.155ea707.js" as="script" /><link rel="prefetch" href="/assets/deploy.html.e18858cf.js" as="script" /><link rel="prefetch" href="/assets/graceful-shutdown.html.7b2d474f.js" as="script" /><link rel="prefetch" href="/assets/_index.html.66d51d96.js" as="script" /><link rel="prefetch" href="/assets/affix.html.8637647a.js" as="script" /><link rel="prefetch" href="/assets/basic-auth.html.7a4a3076.js" as="script" /><link rel="prefetch" href="/assets/cache.html.e07a0187.js" as="script" /><link rel="prefetch" href="/assets/caching-headers.html.950cf48c.js" as="script" /><link rel="prefetch" href="/assets/compression.html.4faaea43.js" as="script" /><link rel="prefetch" href="/assets/cors.html.6e56e05c.js" as="script" /><link rel="prefetch" href="/assets/csrf.html.0479b88b.js" as="script" /><link rel="prefetch" href="/assets/flash.html.b0187af4.js" as="script" /><link rel="prefetch" href="/assets/force-https.html.4dc7798b.js" as="script" /><link rel="prefetch" href="/assets/jwt-auth.html.2765559f.js" as="script" /><link rel="prefetch" href="/assets/logging.html.2444b833.js" as="script" /><link rel="prefetch" href="/assets/proxy.html.3667728e.js" as="script" /><link rel="prefetch" href="/assets/rate-limiter.html.3080b74e.js" as="script" /><link rel="prefetch" href="/assets/serve-static.html.13688ddc.js" as="script" /><link rel="prefetch" href="/assets/session.html.4e4a6d61.js" as="script" /><link rel="prefetch" href="/assets/size-limiter.html.e3330a17.js" as="script" /><link rel="prefetch" href="/assets/sse.html.0a0670b1.js" as="script" /><link rel="prefetch" href="/assets/third-party.html.9056bac6.js" as="script" /><link rel="prefetch" href="/assets/timeout.html.8869a5a8.js" as="script" /><link rel="prefetch" href="/assets/trailing-slash.html.fff20ef4.js" as="script" /><link rel="prefetch" href="/assets/ws.html.311e5374.js" as="script" /><link rel="prefetch" href="/assets/_index.html.28265731.js" as="script" /><link rel="prefetch" href="/assets/file-upload.html.85e7a0fc.js" as="script" /><link rel="prefetch" href="/assets/handle-error.html.72ba2c28.js" as="script" /><link rel="prefetch" href="/assets/use-template-engine.html.086de07d.js" as="script" /><link rel="prefetch" href="/assets/working-with-database.html.7a3ef4a9.js" as="script" /><link rel="prefetch" href="/assets/_index.html.8f4a1364.js" as="script" /><link rel="prefetch" href="/assets/catcher.html.f48b5396.js" as="script" /><link rel="prefetch" href="/assets/depot.html.19b24cbf.js" as="script" /><link rel="prefetch" href="/assets/handler.html.c03c50c6.js" as="script" /><link rel="prefetch" href="/assets/named-file.html.b1b1c34e.js" as="script" /><link rel="prefetch" href="/assets/request.html.fa95c5b1.js" as="script" /><link rel="prefetch" href="/assets/response.html.aed6499e.js" as="script" /><link rel="prefetch" href="/assets/router.html.06d9bcfd.js" as="script" /><link rel="prefetch" href="/assets/testing.html.0a2c0a1e.js" as="script" /><link rel="prefetch" href="/assets/writer.html.6526fb5a.js" as="script" /><link rel="prefetch" href="/assets/_index.html.88ef2bc5.js" as="script" /><link rel="prefetch" href="/assets/deploy.html.dcd617cc.js" as="script" /><link rel="prefetch" href="/assets/graceful-shutdown.html.3d1b3458.js" as="script" /><link rel="prefetch" href="/assets/_index.html.7a42a338.js" as="script" /><link rel="prefetch" href="/assets/hello_world.html.5cb09752.js" as="script" /><link rel="prefetch" href="/assets/_index.html.0ff6aae3.js" as="script" /><link rel="prefetch" href="/assets/affix.html.e0ee2443.js" as="script" /><link rel="prefetch" href="/assets/basic-auth.html.b5d05dfa.js" as="script" /><link rel="prefetch" href="/assets/cache.html.5108c040.js" as="script" /><link rel="prefetch" href="/assets/caching-headers.html.b5ed90d1.js" as="script" /><link rel="prefetch" href="/assets/compression.html.81adcc76.js" as="script" /><link rel="prefetch" href="/assets/cors.html.f9a207db.js" as="script" /><link rel="prefetch" href="/assets/csrf.html.f6ef61af.js" as="script" /><link rel="prefetch" href="/assets/flash.html.2f87a0b6.js" as="script" /><link rel="prefetch" href="/assets/force-https.html.3faaa044.js" as="script" /><link rel="prefetch" href="/assets/jwt-auth.html.56312656.js" as="script" /><link rel="prefetch" href="/assets/logging.html.bf82edc8.js" as="script" /><link rel="prefetch" href="/assets/proxy.html.aca1cce7.js" as="script" /><link rel="prefetch" href="/assets/rate-limiter.html.21ee8da9.js" as="script" /><link rel="prefetch" href="/assets/serve-static.html.154a6b22.js" as="script" /><link rel="prefetch" href="/assets/session.html.1e4fc298.js" as="script" /><link rel="prefetch" href="/assets/size-limiter.html.c4748311.js" as="script" /><link rel="prefetch" href="/assets/sse.html.69b18d66.js" as="script" /><link rel="prefetch" href="/assets/third-party.html.7c33d019.js" as="script" /><link rel="prefetch" href="/assets/timeout.html.c1a31739.js" as="script" /><link rel="prefetch" href="/assets/trailing-slash.html.cea14d62.js" as="script" /><link rel="prefetch" href="/assets/ws.html.16cf5998.js" as="script" /><link rel="prefetch" href="/assets/_index.html.d7dcd37e.js" as="script" /><link rel="prefetch" href="/assets/file-upload.html.17e6b2c1.js" as="script" /><link rel="prefetch" href="/assets/handle-error.html.b71e99f3.js" as="script" /><link rel="prefetch" href="/assets/use-template-engine.html.19f4f768.js" as="script" /><link rel="prefetch" href="/assets/working-with-database.html.ebdac1f5.js" as="script" /><link rel="prefetch" href="/assets/404.html.16811621.js" as="script" /><link rel="prefetch" href="/assets/NpmBadge.04062fae.js" as="script" />
</head>
<body>
<div id="app"><!--[--><div class="theme-container no-sidebar"><!--[--><header class="navbar"><div class="toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a aria-current="page" href="/" class="router-link-active router-link-exact-active"><img class="logo" src="/images/logo-text-h.svg" alt="Salvo"><span class="site-name can-hide">Salvo</span></a></span><div class="navbar-items-wrapper" style=""><!--[--><!--]--><nav class="navbar-items can-hide"><!--[--><div class="navbar-item"><a href="/book/" class="" aria-label="Book"><!--[--><!--]--> Book <!--[--><!--]--></a></div><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="Middlewares"><span class="title">Middlewares</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="Middlewares"><span class="title">Middlewares</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>Common Features</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/affix.html" class="" aria-label="Affix"><!--[--><!--]--> Affix <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/compression.html" class="" aria-label="Compression"><!--[--><!--]--> Compression <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/flash.html" class="" aria-label="Flash"><!--[--><!--]--> Flash <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/force-https.html" class="" aria-label="Force HTTPS"><!--[--><!--]--> Force HTTPS <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/logging.html" class="" aria-label="Logging"><!--[--><!--]--> Logging <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/proxy.html" class="" aria-label="Proxy"><!--[--><!--]--> Proxy <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/serve-static.html" class="" aria-label="Serve Static"><!--[--><!--]--> Serve Static <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/session.html" class="" aria-label="Session"><!--[--><!--]--> Session <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/sse.html" class="" aria-label="SSE"><!--[--><!--]--> SSE <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/timeout.html" class="" aria-label="Timeout"><!--[--><!--]--> Timeout <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/trailing-slash.html" class="" aria-label="Trailing Slash"><!--[--><!--]--> Trailing Slash <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/ws.html" class="" aria-label="WebSocket"><!--[--><!--]--> WebSocket <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>Authentication</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/basic-auth.html" class="" aria-label="Basic Auth"><!--[--><!--]--> Basic Auth <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/jwt-auth.html" class="" aria-label="JWT Auth"><!--[--><!--]--> JWT Auth <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>Security</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/cors.html" class="" aria-label="CORS"><!--[--><!--]--> CORS <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/csrf.html" class="" aria-label="CSRF"><!--[--><!--]--> CSRF <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/rate-limiter.html" class="" aria-label="Rate Limiter"><!--[--><!--]--> Rate Limiter <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>Caching</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/cache.html" class="" aria-label="Cache"><!--[--><!--]--> Cache <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/caching-headers.html" class="" aria-label="Caching Headers"><!--[--><!--]--> Caching Headers <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><!--]--></ul></div></div><div class="navbar-item"><a href="/donate.md" class="" aria-label="Donate"><!--[--><!--]--> Donate <!--[--><!--]--></a></div><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><a aria-current="page" href="/" class="router-link-active router-link-exact-active" aria-label="English"><!--[--><!--]--> English <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/zh-hans/" class="" aria-label="简体中文"><!--[--><!--]--> 简体中文 <!--[--><!--]--></a></li><!--]--></ul></div></div><div class="navbar-item"><a class="external-link" href="https://github.com/salvo-rs/salvo" rel="noopener noreferrer" target="_blank" aria-label="GitHub"><!--[--><!--]--> GitHub <span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button class="toggle-color-mode-button" title="toggle color mode"><svg style="" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg style="display:none;" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><div id="docsearch-container"></div></div></header><!--]--><div class="sidebar-mask"></div><!--[--><aside class="sidebar"><nav class="navbar-items"><!--[--><div class="navbar-item"><a href="/book/" class="" aria-label="Book"><!--[--><!--]--> Book <!--[--><!--]--></a></div><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="Middlewares"><span class="title">Middlewares</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="Middlewares"><span class="title">Middlewares</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>Common Features</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/affix.html" class="" aria-label="Affix"><!--[--><!--]--> Affix <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/compression.html" class="" aria-label="Compression"><!--[--><!--]--> Compression <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/flash.html" class="" aria-label="Flash"><!--[--><!--]--> Flash <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/force-https.html" class="" aria-label="Force HTTPS"><!--[--><!--]--> Force HTTPS <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/logging.html" class="" aria-label="Logging"><!--[--><!--]--> Logging <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/proxy.html" class="" aria-label="Proxy"><!--[--><!--]--> Proxy <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/serve-static.html" class="" aria-label="Serve Static"><!--[--><!--]--> Serve Static <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/session.html" class="" aria-label="Session"><!--[--><!--]--> Session <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/sse.html" class="" aria-label="SSE"><!--[--><!--]--> SSE <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/timeout.html" class="" aria-label="Timeout"><!--[--><!--]--> Timeout <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/trailing-slash.html" class="" aria-label="Trailing Slash"><!--[--><!--]--> Trailing Slash <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/ws.html" class="" aria-label="WebSocket"><!--[--><!--]--> WebSocket <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>Authentication</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/basic-auth.html" class="" aria-label="Basic Auth"><!--[--><!--]--> Basic Auth <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/jwt-auth.html" class="" aria-label="JWT Auth"><!--[--><!--]--> JWT Auth <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>Security</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/cors.html" class="" aria-label="CORS"><!--[--><!--]--> CORS <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/csrf.html" class="" aria-label="CSRF"><!--[--><!--]--> CSRF <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/rate-limiter.html" class="" aria-label="Rate Limiter"><!--[--><!--]--> Rate Limiter <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>Caching</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/cache.html" class="" aria-label="Cache"><!--[--><!--]--> Cache <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/zh-hans/book/middlewares/caching-headers.html" class="" aria-label="Caching Headers"><!--[--><!--]--> Caching Headers <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><!--]--></ul></div></div><div class="navbar-item"><a href="/donate.md" class="" aria-label="Donate"><!--[--><!--]--> Donate <!--[--><!--]--></a></div><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><a aria-current="page" href="/" class="router-link-active router-link-exact-active" aria-label="English"><!--[--><!--]--> English <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a href="/zh-hans/" class="" aria-label="简体中文"><!--[--><!--]--> 简体中文 <!--[--><!--]--></a></li><!--]--></ul></div></div><div class="navbar-item"><a class="external-link" href="https://github.com/salvo-rs/salvo" rel="noopener noreferrer" target="_blank" aria-label="GitHub"><!--[--><!--]--> GitHub <span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><!----><!--[--><!--]--></aside><!--]--><!--[--><main class="home"><header class="hero"><img src="/images/logo-text.svg" alt="hero" height="280"><!----><p class="description">Salvo is a powerful and simplest web server framework in Rust world</p><p class="actions"><!--[--><a href="/book/guid.md" class="action-button primary" aria-label="Get Started"><!--[--><!--]--> Get Started <!--[--><!--]--></a><a href="/donate.md" class="action-button secondary" aria-label="Donate"><!--[--><!--]--> Donate <!--[--><!--]--></a><!--]--></p></header><div class="features"><!--[--><div class="feature"><h2>Simplicity First</h2><p>You just need the basic knowledge of Rust, you can write a powerful and efficient server, which is comparable to the development speed of some Go web server frameworks.</p></div><div class="feature"><h2>Powerful features</h2><p>Although it is simple, it is still powerful, with built-in Multipart, extract data from request, etc., which can meet the needs of most business scenarios.</p></div><div class="feature"><h2>Performance</h2><p>Thanks to the performance advantages of Rust, you can write extremely high-performance server-side applications very easily.</p></div><div class="feature"><h2>Chainable tree router</h2><p>Chainable tree routing system let you write routing rules easily and chains. You can use regex to constraint parameters.</p></div><div class="feature"><h2>Middlewares</h2><p>Flexible plugin API, allowing plugins to provide lots of plug-and-play features for your site.</p></div><div class="feature"><h2>Stable after online</h2><p>Rust's extremely secure mechanism allows you to have no worries after your website is online. You have more time to enjoy your life!</p></div><!--]--></div><div class="theme-default-content"><div><h3 id="hello-world" tabindex="-1"><a class="header-anchor" href="#hello-world" aria-hidden="true">#</a> Hello world!</h3><div class="code-group"><div class="code-group__nav"><ul class="code-group__ul"><li class="code-group__li"><button class="code-group__nav-tab code-group__nav-tab-active" ariapressed="true" ariaexpanded="true">main.rs</button></li><li class="code-group__li"><button class="code-group__nav-tab" ariapressed="false" ariaexpanded="false">Cargo.toml</button></li></ul></div><!--[--><div class="code-group-item code-group-item__active" aria-selected="true"><!--[--><div class="language-rust line-numbers-mode" data-ext="rs"><pre class="shiki" style="background-color:#1E1E1E;"><code><span class="line"><span style="color:#569CD6;">use</span><span style="color:#D4D4D4;"> </span><span style="color:#4EC9B0;">salvo</span><span style="color:#D4D4D4;">::</span><span style="color:#4EC9B0;">prelude</span><span style="color:#D4D4D4;">::*;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#D4D4D4;">#[handler]</span></span>
<span class="line"><span style="color:#569CD6;">async</span><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">fn</span><span style="color:#D4D4D4;"> </span><span style="color:#DCDCAA;">hello_world</span><span style="color:#D4D4D4;">(</span><span style="color:#9CDCFE;">res</span><span style="color:#D4D4D4;">: &</span><span style="color:#569CD6;">mut</span><span style="color:#D4D4D4;"> </span><span style="color:#4EC9B0;">Response</span><span style="color:#D4D4D4;">) {</span></span>
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#9CDCFE;">res</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">render</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">"Hello world!"</span><span style="color:#D4D4D4;">);</span></span>
<span class="line"><span style="color:#D4D4D4;">}</span></span>
<span class="line"><span style="color:#D4D4D4;">#[tokio::main]</span></span>
<span class="line"><span style="color:#569CD6;">async</span><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">fn</span><span style="color:#D4D4D4;"> </span><span style="color:#DCDCAA;">main</span><span style="color:#D4D4D4;">() {</span></span>
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">let</span><span style="color:#D4D4D4;"> </span><span style="color:#9CDCFE;">router</span><span style="color:#D4D4D4;"> = </span><span style="color:#4EC9B0;">Router</span><span style="color:#D4D4D4;">::</span><span style="color:#DCDCAA;">new</span><span style="color:#D4D4D4;">().</span><span style="color:#DCDCAA;">get</span><span style="color:#D4D4D4;">(</span><span style="color:#9CDCFE;">hello_world</span><span style="color:#D4D4D4;">);</span></span>
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#569CD6;">let</span><span style="color:#D4D4D4;"> </span><span style="color:#9CDCFE;">acceptor</span><span style="color:#D4D4D4;"> = </span><span style="color:#4EC9B0;">TcpListener</span><span style="color:#D4D4D4;">::</span><span style="color:#DCDCAA;">new</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">"127.0.0.1:7878"</span><span style="color:#D4D4D4;">).</span><span style="color:#DCDCAA;">bind</span><span style="color:#D4D4D4;">().</span><span style="color:#C586C0;">await</span><span style="color:#D4D4D4;">;</span></span>
<span class="line"><span style="color:#D4D4D4;"> </span><span style="color:#4EC9B0;">Server</span><span style="color:#D4D4D4;">::</span><span style="color:#DCDCAA;">new</span><span style="color:#D4D4D4;">(</span><span style="color:#9CDCFE;">acceptor</span><span style="color:#D4D4D4;">).</span><span style="color:#DCDCAA;">serve</span><span style="color:#D4D4D4;">(</span><span style="color:#9CDCFE;">router</span><span style="color:#D4D4D4;">).</span><span style="color:#C586C0;">await</span><span style="color:#D4D4D4;">;</span></span>
<span class="line"><span style="color:#D4D4D4;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><!--]--></div><div class="code-group-item" aria-selected="false"><!--[--><div class="language-toml line-numbers-mode" data-ext="toml"><pre class="shiki" style="background-color:#1E1E1E;"><code><span class="line"><span style="color:#D4D4D4;">[package]</span></span>
<span class="line"><span style="color:#9CDCFE;">name</span><span style="color:#D4D4D4;"> = </span><span style="color:#CE9178;">"example-hello"</span></span>
<span class="line"><span style="color:#9CDCFE;">version</span><span style="color:#D4D4D4;"> = </span><span style="color:#CE9178;">"0.1.0"</span></span>
<span class="line"><span style="color:#9CDCFE;">edition</span><span style="color:#D4D4D4;"> = </span><span style="color:#CE9178;">"2021"</span></span>
<span class="line"><span style="color:#9CDCFE;">publish</span><span style="color:#D4D4D4;"> = </span><span style="color:#569CD6;">false</span></span>
<span class="line"></span>
<span class="line"><span style="color:#D4D4D4;">[dependencies]</span></span>
<span class="line"><span style="color:#9CDCFE;">salvo</span><span style="color:#D4D4D4;"> = { </span><span style="color:#9CDCFE;">version</span><span style="color:#D4D4D4;"> = </span><span style="color:#CE9178;">"0.37"</span><span style="color:#D4D4D4;"> }</span></span>
<span class="line"><span style="color:#9CDCFE;">tokio</span><span style="color:#D4D4D4;"> = { </span><span style="color:#9CDCFE;">version</span><span style="color:#D4D4D4;"> = </span><span style="color:#CE9178;">"1"</span><span style="color:#D4D4D4;">, </span><span style="color:#9CDCFE;">features</span><span style="color:#D4D4D4;"> = [</span><span style="color:#CE9178;">"macros"</span><span style="color:#D4D4D4;">] }</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><!--]--></div><!--]--></div></div></div><!--[--><div class="footer">MIT Licensed | Copyright © 2019-present Salvo Team</div><!--]--></main><!--]--></div><!----><!--]--></div>
<script type="module" src="/assets/app.3f2e9511.js" defer></script>
</body>
</html>