diff --git a/Cargo.lock b/Cargo.lock
index 969a94e..8ab6ede 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -351,6 +351,12 @@ dependencies = [
"typenum",
]
+[[package]]
+name = "data-encoding"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2"
+
[[package]]
name = "debounced"
version = "0.2.0"
@@ -765,6 +771,21 @@ dependencies = [
"tokio",
]
+[[package]]
+name = "hyper-tungstenite"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0110a0487cbc65c3d1f38c2ef851dbf8bee8c2761e5a96be6a59ba84412b4752"
+dependencies = [
+ "http-body-util",
+ "hyper",
+ "hyper-util",
+ "pin-project-lite",
+ "tokio",
+ "tokio-tungstenite",
+ "tungstenite",
+]
+
[[package]]
name = "hyper-util"
version = "0.1.10"
@@ -1597,6 +1618,17 @@ dependencies = [
"serde",
]
+[[package]]
+name = "sha1"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
[[package]]
name = "sha2"
version = "0.10.8"
@@ -1713,6 +1745,12 @@ dependencies = [
"unicode-ident",
]
+[[package]]
+name = "sync_wrapper"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
+
[[package]]
name = "synstructure"
version = "0.13.1"
@@ -1842,6 +1880,18 @@ dependencies = [
"tokio",
]
+[[package]]
+name = "tokio-tungstenite"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4bf6fecd69fcdede0ec680aaf474cdab988f9de6bc73d3758f0160e3b7025a"
+dependencies = [
+ "futures-util",
+ "log",
+ "tokio",
+ "tungstenite",
+]
+
[[package]]
name = "tokio-util"
version = "0.7.13"
@@ -1895,6 +1945,10 @@ version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project-lite",
+ "sync_wrapper",
"tower-layer",
"tower-service",
]
@@ -1952,6 +2006,24 @@ version = "0.1.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
+[[package]]
+name = "tungstenite"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "413083a99c579593656008130e29255e54dcaae495be556cc26888f211648c24"
+dependencies = [
+ "byteorder",
+ "bytes",
+ "data-encoding",
+ "http",
+ "httparse",
+ "log",
+ "rand",
+ "sha1",
+ "thiserror",
+ "utf-8",
+]
+
[[package]]
name = "typenum"
version = "1.17.0"
@@ -2091,7 +2163,11 @@ dependencies = [
"grass",
"grass_compiler",
"html5ever",
+ "http",
+ "http-body",
+ "http-body-util",
"hyper",
+ "hyper-tungstenite",
"hyper-util",
"log",
"markup5ever_rcdom",
diff --git a/Cargo.toml b/Cargo.toml
index e631834..25cc831 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -29,7 +29,11 @@ grass_compiler = { version = "0.13.4", features = [
"custom-builtin-fns",
], git = "https://git.shadowfacts.net/shadowfacts/grass.git", branch = "custom-global-variables" }
html5ever = "0.27.0"
+http = "1.2.0"
+http-body = "1.0.1"
+http-body-util = "0.1.2"
hyper = { version = "1.5.2", features = ["server", "http1"] }
+hyper-tungstenite = "0.17.0"
hyper-util = { version = "0.1.10", features = ["tokio", "service"] }
log = "0.4.22"
markup5ever_rcdom = "0.3.0"
@@ -42,7 +46,7 @@ tera = "1.20.0"
tokio = { version = "1.42.0", features = ["full"] }
tokio-stream = "0.1.17"
toml = "0.8.19"
-tower = "0.5.2"
+tower = { version = "0.5.2", features = ["steer", "util"] }
tower-http = { version = "0.6.2", features = ["fs"] }
unicode-normalization = "0.1.24"
url = "2.5.4"
diff --git a/site_test/layout/default.html b/site_test/layout/default.html
index f1eec2c..f450589 100644
--- a/site_test/layout/default.html
+++ b/site_test/layout/default.html
@@ -36,5 +36,17 @@
{% block content %}{% endblock %}
+
+ {% if _development %}
+
+ {% endif %}