Suave.DotLiquid
3.7.1
See the version list below for details.
dotnet add package Suave.DotLiquid --version 3.7.1
NuGet\Install-Package Suave.DotLiquid -Version 3.7.1
<PackageReference Include="Suave.DotLiquid" Version="3.7.1" />
<PackageVersion Include="Suave.DotLiquid" Version="3.7.1" />
<PackageReference Include="Suave.DotLiquid" />
paket add Suave.DotLiquid --version 3.7.1
#r "nuget: Suave.DotLiquid, 3.7.1"
#:package Suave.DotLiquid@3.7.1
#addin nuget:?package=Suave.DotLiquid&version=3.7.1
#tool nuget:?package=Suave.DotLiquid&version=3.7.1
Suave.DotLiquid provides Liquid templates for Suave web server.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- DotLiquid (>= 2.3.197)
- FSharp.Core (>= 10.0.102)
- Suave (>= 3.2.0 && < 4.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 3.7.2 | 44 | 10/15/2026 |
| 3.7.1 | 41 | 10/15/2026 |
| 3.7.0 | 42 | 10/15/2026 |
| 3.6.1 | 98 | 10/7/2026 |
| 3.6.0 | 89 | 10/5/2026 |
| 3.5.0 | 134 | 9/9/2026 |
| 3.4.6 | 116 | 8/29/2026 |
| 3.4.5 | 120 | 8/26/2026 |
| 3.4.4 | 163 | 7/13/2026 |
| 3.2.2 | 1,025 | 1/16/2026 |
| 3.2.1 | 1,096 | 1/10/2026 |
| 2.7.0-beta1 | 290 | 7/3/2023 |
| 2.7.0-beta | 300 | 3/3/2023 |
| 2.6.2 | 3,419 | 1/26/2022 |
| 2.6.1 | 2,326 | 5/15/2021 |
| 2.6.0 | 6,036 | 12/8/2020 |
| 2.6.0-beta | 678 | 7/18/2020 |
| 2.5.6 | 5,355 | 9/7/2019 |
| 2.5.5 | 3,355 | 6/5/2019 |
| 2.5.4 | 3,655 | 4/14/2019 |
Security: a client that opened a connection to an HTTPS binding and never completed the TLS handshake stopped that binding from accepting anyone else (with the default `acceptorCount = 1`, one idle TCP connection made the HTTPS site unreachable until it closed). The handshake now runs on the connection's own task instead of the accept loop, and is bounded by the new process-wide `Tcp.tlsHandshakeTimeout` (default 10 seconds; set it before starting the server). A connection whose handshake fails or times out now has its socket closed; previously the socket was left open
`Proxy.proxy` forwards requests faithfully: the target is built from `rawPath` and `rawQuery` (it used the decoded `path` and dropped the query, so `/a/b%2Fc?x=1` arrived as `/a/b/c`), and a path on the upstream URI is kept as a prefix (`proxy (Uri "http://backend/api")` maps `/users` to `/api/users`). A request path with a `.` or `..` segment (also percent-encoded) is answered with 400 instead of being able to leave that prefix
`Proxy.proxy` forwards every request header except hop-by-hop ones (RFC 9110 §7.6.1: `Connection`, `Keep-Alive`, `Proxy-Connection`, `TE`, `Trailer`, `Transfer-Encoding`, `Upgrade`, `Proxy-Authorization`, `Proxy-Authenticate` and any named in `Connection`), `Host`, `Content-Length` and `Expect`; it used to forward only `User-Agent`, `Accept`, `Date`, `Content-Type` and `Content-Length`, so `Authorization`, `Cookie`, API keys and the like were lost. The request body is forwarded whenever there is one (it was only forwarded for POST and PUT, so PATCH and DELETE lost theirs). `multipart/form-data` bodies are parsed by Suave before any WebPart runs and still cannot be forwarded
`Proxy.proxy` passes any upstream status through with its reason phrase; statuses Suave has no `HttpCode` for (e.g. 207, 418) used to become 502 while the upstream body was still sent. Response headers are forwarded without hop-by-hop headers and without `Date`/`Server` (Suave writes its own), and repeated headers such as `Set-Cookie` are kept as separate headers instead of being joined with commas
Behaviour change:** `Proxy.proxy` no longer trusts `X-Forwarded-For`, `X-Forwarded-Proto`, `X-Forwarded-Host`, `Forwarded` or `X-Real-IP` sent by the client: `X-Forwarded-For` is the connection's address, `-Proto` and `-Host` are the scheme and `Host` the proxy received, and `Forwarded`/`X-Real-IP` are dropped. A client could send `X-Forwarded-Proto: https` over plain HTTP, or any address in `X-Forwarded-For`, and have it passed on. Behind another reverse proxy, list its address in `ProxyOptions.trustedProxies` to keep its headers and extend its `X-Forwarded-For` chain
Security: the `HttpClient` shared by all proxies no longer keeps a cookie container. Upstream `Set-Cookie` responses were stored in it and sent with later proxied requests from every client
Add `Proxy.proxyWith options upstream` and `Proxy.defaultProxyOptions` (`timeout`, `trustedProxies`, `dropRequestHeaders`, `onError`). The proxy answers 504 when the upstream has not sent its response headers within the timeout (30 seconds by default; there was none) and 502 when it cannot be reached; `onError` is called with the exception first. `proxy` and `proxyWith` throw `ArgumentException` straight away for an upstream that is not an absolute http/https URI