Changelogs
Every change made to Sisk is recorded through the changelog. You can view the changelogs for all Sisk versions here.
Migrating from 1.6 to 1.7 #
Sisk 1.7.0 ships Sisk.HttpServer, Sisk.Cadente, Sisk.Cadente.CoreEngine and Sisk.IniConfiguration 1.7.0. Sisk.Documenting, Sisk.Documenting.Html and Sisk.Monitoring ship as 1.7.0-rc3, and Sisk.ModelContextProtocol as 1.7.0-rc1. Read the full 1.7.0 changelog for every change.
Breaking changes #
Route.UseRegexcan no longer be set. The property is obsolete and only reports whether the route is aRegexRoute. Create a RegexRoute instead. Route attributes withUseRegex = trueand the[RegexRoute]attribute keep working. See regex routes.C# // before router.Map(new Route(RouteMethod.Get, @"^/items/(?<id>\d+)$", action) { UseRegex = true }); // after router.Map(new RegexRoute(RouteMethod.Get, @"^/items/(?<id>\d+)$", action));Request bodies are limited to 100 MB by default. The default value of HttpServerConfiguration.MaximumContentLength changed from
0(unlimited) to 100 MB. The limit also applies to request streams and to WebSocket messages. Set it to0to restore the previous behavior. See getting the request body.C# using var app = HttpServer.CreateBuilder() .UseConfiguration(config => config.MaximumContentLength = 0) .Build();Static routes are tested before dynamic routes. Regex routes, prefix routes (including file servers) and custom matching routes are tested after every static route, regardless of their registration order. See matching precedence.
Duplicate route names throw at startup. Two or more routes with the same
Namecause anArgumentExceptionwhen the server starts, while Router.CheckForRouteCollisions is enabled (the default).File server routes are prefix routes.
Router.MapFileSystemandHttpFileServer.CreateServingRoutecreate a PrefixRoute instead of a regex route, and are no longer affected byForceTrailingSlash.RouteMethod.AnyincludesQUERY. Routes mapped withMapAnyalso answerQUERYrequests. The numeric value ofRouteMethod.Anychanged, so recompile code that stores or compares it.CORS preflight respects
UseCors. The automaticOPTIONSresponse no longer sends CORS headers for routes withUseCors = false, and routes explicitly mapped forOPTIONShandle the request instead. See preflight requests.Cadente rejects malformed requests. Invalid request methods and targets, unsupported
Transfer-Encodingvalues and conflictingContent-Lengthheaders are rejected, and header blocks larger than 8 KB receive431 Request Header Fields Too Large. See Cadente request validation.
Discontinued packages #
Sisk.BasicAuth, Sisk.SslProxy and Sisk.ServiceProvider are no longer maintained and are deprecated on NuGet, with no replacement package. Remove them from your projects:
- Replace
Sisk.BasicAuthwith your own request handler that validates theAuthorizationheader. - Replace
Sisk.SslProxywith the native SSL support of the Cadente engine. - Replace
Sisk.ServiceProviderwith the portable configuration built intoSisk.HttpServerthroughUsePortableConfiguration.
New features #
- Custom route matching through
Route.Match,RouteMatch,Route.IsStaticandRoute.AllowRewrites, and the new prefix routes. - Support for the HTTP QUERY method with
MapQuery,Route.Query,[RouteQuery]and theAccept-Queryheader. - Atomic context values through
HttpContext.Interlocked. - The
%{$key}access log term, which prints values of the request bag, and the safe file writing helpersLogStream.SafeWriteToFileandLogStream.SafeAppendToFile. - In Cadente: pipelined keep-alive requests,
WriteInlineContentandWriteInlineContentAsync, and a redirect to HTTPS for plain HTTP requests received on an SSL port. - In the extensions: parameter examples and
LlmsApiExporter.FooterTextin Sisk.Documenting, skills and the2026-07-28protocol revision in Sisk.ModelContextProtocol, and HTTP traffic, latency, route and exception telemetry in the Sisk.Monitoring dashboard.
Other behavior changes #
- The
HttpListenerengine dispatches each request to the thread pool, so a slow request no longer delays the next accepted connection. ItsContextAbortedTokenreturnsCancellationToken.Noneinstead of throwing. - Exceptions thrown by server handlers at the end of a request, and while writing logs, are written to the error log instead of escaping to the HTTP engine. See exceptions thrown by handlers.
- CORS responses send
Vary: Originwhen the allowed origin depends on the request. - The
%riaccess log term uses the client address resolved at the start of the request. Sisk.HttpServertargets .NET 8, .NET 9 and .NET 10.Sisk.CadenteandSisk.Cadente.CoreEnginetarget .NET 9 and .NET 10 and publish their debug symbols as.snupkgpackages.