Changelog
Notes :
- It does not strictly follow the semver convention.
- No technical debt : code that needs to be refactored/broken, will be.
- When something breaks, it's documented and a migration guide is provided.
- No long-term support or backports for major versions, just stick to the latest update.
- Found a bug or a way to optimize? Feel free to submit a patch.
Roadmap - (2026)
- docker template
- captcha module
- HTTP/2
v26.0.0 - (2026-04-26)
After months of rewrite, testing, release candidates, breaking changes, documentation work, and a few painful but necessary design decisions, SimpleW v26 is finally ready.
This release is not just an update. It is a complete rewrite of SimpleW.
The old version was built on top of NetCoreServer, mostly through overrides and custom extensions. It worked, it was fast, and it served the project well for a long time. But over time, SimpleW needed its own HTTP architecture: something simpler, cleaner, easier to extend, and easier to maintain.
So v26 was rebuilt from scratch.
The result is a smaller and more explicit core, still focused on performance, but now designed around SimpleW's own model: middleware, modules, addons, a cleaner request/response lifecycle, better routing, better observability, stronger request protection, and a much better foundation for real applications.
Highlights
- Complete rewrite from scratch
- New middleware and module architecture
- New addon ecosystem
- Cleaner routing, including host-based routing
- Sync and async handlers with request cancellation
- Better static files support with cache, Last-Modified, ETag and Content-Range
- WebSocket and SSE modules with room-based broadcasting
- New Principal / Identity authentication model
- Logging, traces, metrics and enrichment per server instance
- Better malformed request protection
- Easier extensibility with custom router and engine support
- Updated documentation and migration guide
Several addons are already available, including BasicAuth, Jwt, OpenID, Firewall, Hosting, Razor, Swagger, LetsEncrypt, Templates, Serilog, Log4net and Dependency Injection.
SimpleW v26 is now minimal by default, fast by design, and much easier to compose for production applications.
Thank you to everyone who followed the rewrite, tested the prereleases, read the documentation, reported issues, or simply waited patiently.
Now the real fun begins.
breakingChange
There is a complete migration guide.
feature / comparison
| Feature / Aspect | SimpleW v16 (old) | SimpleW v26 (new) |
|---|---|---|
| NET runtime | NET8 | NET8 but should consider NET9/NET10 for better perfs and RAM usage under heavy load (e.g: NET8 400Mo, NET9 100Mo, NET10 70Mo) |
| Core architecture | ⚠️ (tied to NetCoreServer) | ✅ from scratch (custom, simple, clean) |
| Code readability | ⚠️ | ✅ |
| Overall design philosophy | ⚠️ wrapper | ✅ minimal, custom, fast |
| Long-term maintainability | ⚠️ harder | ✅ much easier |
| Performance | ✅ (very high) | ✅ (very high) |
| Middleware | ❌ | ✅ |
| Modules | ❌ | ✅ |
| Extensibility | ⚠️ (callback, subclass) | ✅ middleware, module, callback, subclass |
| Custom Router / Engine | ❌ | ✅ UseRouter(), UseEngine() |
| Response Builder | ✅(status, contentType, headers, body, cookies) | ✅ (status, contentType, contentLength, headers, body, cookies, compression) |
| Result Handler | ❌ | ✅ configurable response pipeline |
| Handler (Expression Tree) | ✅ sync ❌async | ✅ sync ✅ async + RequestAborted |
| Handler metadata | ❌ | ✅ metadata attributes for middleware and addons |
| Routing | ✅ (minimal, attribute, querystring, regexp, path, wildcard) | ✅ (minimal, attribute, querystring, path, wildcard, host) |
| Minimal API | ✅ | ✅ |
| Controllers | ✅ | ✅ |
| Dependency Injection | ❌ | ✅ (using the Dependency Injection addon) |
| SSL / HTTPS | ✅ (SslContext) | ✅ (SslContext, mutual authentication) |
| WebSocket | ✅ (full broadcast) | ✅ (smart broadcast using "rooms") |
| Server-Sent Events (SSE) | ✅ | ✅ (smart broadcast using "rooms") |
| Unix socket | ✅ | ✅ |
| Static files | ✅ (Cache, FileWatcher) | ✅ (Cache, FileWatcher, Last-Modified, Etag) |
| Cross-Origin Resource Sharing (CORS) | ✅ | ✅ |
| Body parsing (JSON) | ✅ | ✅ |
| Body parsing (form-urlencoded) | ✅ | ✅ |
| Body parsing (multipart/form-data) | ✅ | ✅ + streaming parser |
| Bag | ❌ | ✅ (share data between middleware) |
| Auth | ⚠️ custom IWebUser | ✅ Principal / Identity |
| Custom JSON engine | ✅ | ✅ |
| HTTP pipelining | ❌ | ✅ |
| Content Range | ❌ | ✅ |
| Idle Timeout | ❌ | ✅ |
| Request Protection | ❌ | ✅(malformed) |
| Observability | ✅ (traces) & global to all processes | ✅ (traces, metrics, enrich) per SimpleWServer instance |
| Logging | ❌ | ✅ sinks, levels, lazy logging, bridges |
| Listener reload | ❌ | ✅ ReloadListenerAsync() |
| Documentation | ✅ | ✅ simplew.net |
| Tests | ✅ | ✅ (more tests) |
| Support | ❌ | ✅ Discord |
| Addons | ❌ | ✅ BasicAuth, Chaos, Firewall, Hosting, Jwt, Latency, Log4net, OpenID, Razor, Swagger, LetsEncrypt, Templates, Serilog, DependencyInjection, Newtonsoft |
v16.1.0 - (2025-11-02)
Maintenance, rewritten some parts of the code and documentation for easier use.
breakingChange
- moved the
Controller.MakeAccessResponse()toHttpResponse.MakeAccessResponse()(see example)
feature
- feature: add headers parameter to
HttpResponse.MakeResponse()(#71) - feature: add new
HttpResponse.MakeResponse(object content)methods (#75) - chore: inject
SessioninResponse(#73) - feature(test): add unit test for custom headers and compress types (#80)
- feature: avoid
PerformServerUpgradethere is no websocket route defined (#79) - refactor: move
MakeAccessResponse()intoHttpResponseclass (#76)
fix
- fix(NetCoreServer):
WebSocket.PerformServerUpgrade()setMakeErrorResponse()whenConnection: "keep-alive"(#77)
v16.0.0 - (2025-10-21)
Major release, including extensive rewrites and significant performance improvements (+9% req/s)
breakingChange
- removed the Newtonsoft.Json dependency from the SimpleW nuget package. The default json engine is now System.Text.Json. To switch back, set Newtonsoft as the
JsonEngineand install the new SimpleW.Newtonsoft nuget package (see example) - "X-*" headers are not trusted by default. To allow them, set the
TrustXHeadersserver property to true (see example). - in
Controller, allMake*Response()methods have been replaced byResponse.Make*Response()(see example) - removed
Controller.SendResponseAsync() - the cache in
AddStaticContent()is now disabled by default. Set thetimeoutparameter to enable caching (see example)
feature
- feature: add new
JsonEngineproperty in Server and Netcoreserverextension (#49) - feature: add new package SimpleW.Newtonsoft to support Newtonsoft.Json as
JsonEngine(#50) - chore: remove the Newtonsoft.Json dependency from the SimpleW package
- feature: use
JsonEnginefor Inline Func return serialization (#58) - feature: support Accept-Encoding br (Brotli) on
HttpResponse(#51) - chore: move all Make*Response from
ControllertoHttpResponsepartial class (#44) - feature: support CORS in
AddStaticContent()response (#60) - feature:
AddStaticContent()with no cache (#46) - feature: improve overall performances in
Router,StaticContentandDynamicContent - feature(test): add unit and integration tests.
fix
- fix: add new property
TrustXHeaders(#48)
v15.1.0 - (2025-09-19)
Maintenance
feature
- chore: expose the
Serveras a property from theSession(#47) - feature: support minimal API with new
MapGet()andMapPost()methods in server class (#45)
v15.0.0 - (2025-09-13)
Major release
breakingChange
- telemetry is now disabled by default. To enable it, set
EnableTelemetryproperty totrue(#42)
fix
- fix: AutoIndex must sort directory first then file (#11)
- chore: add missing constructor from NetCoreServer (#43)
- chore: throw exception when using component while the server is already started (#41)
feature
- feature: handle unix socket (#38), PR by philippseith
- feature: add new server
EnableTelemetryproperty to enable telemetry (#42)
v14.0.1 - (2025-07-22)
Maintenance
fix
- fix possible null exception in
BroadcastSSESessions()(#37)
feature
- feature: support CORS in Server Sent Events with
MakeServerSentEventsResponse()(#40)
v14.0.0 - (2025-07-20)
Major release
feature
- create a documentation website
- feature: support Server Sent Events SSE (#34)
- chore: update nuget package informations (description, tags, logo, url)
breakingChange
- refactor: rename all properties
WebUserstoWebSocketUsersinISimpleWServer(#36)
v13.1.0 - (2025-04-21)
Maintenance
fix
- fix payload parsing for 64 byte payloads (#32), PR by baris-btcturk
feature
- made possible to append extra response http headers in PerformServerUpgrade stage (#31), PR by lifeengines to fix bramley-jetcharge issue
v13.0.0 - (2025-02-14)
Major release
fix
- fix: possible header mismatch when upgrading to websocket connection (#27)
feature
- chore: bump to NET8 (#26)
v12.0.1 - (2024-12-26)
Maintenance
feature
- backport fix from
Microsoft.IO.RecyclableMemoryStreamv3.0.1 to v2.3. - backport fix into
HttpMultipartDataParserv8.4.0
v12.0.0 - (2024-05-02)
Major release
feature
- support HTTPS protocol using the new
SimpleWSServer()class.
v11.9.0 - (2024-02-15)
Maintenance
breakingChange
- the
getWebUserCallbackdelegate set withSimpleW.SetToken()is now called byController.JwtToWebUser()to restoreController.webuseron each request.
v11.8.0 - (2024-02-14)
Maintenance
breakingChange
- refactor: remove unused
expirationparameter fromNetCoreServerExtension.ValidateJwt()(#19) - refactor: remove unused
Controller.TokenExpirationproperty (#18)
feature
- refactor: change jwt default create expiration from 30min to 15min (#20)
v11.7.0 - (2024-02-02)
Maintenance
breakingChange
- rename
WebSocketMessage.datatoWebSocketMessage.body(#17)
feature
- documentation
v11.6.0 - (2024-02-02)
Maintenance
breakingChange
- remove
NetCoreServerExtension.GetBearer()method.
feature
Controller.GetJwt()is now virtual and can be overridden in subclass.- documentation
v11.5.0 - (2024-01-14)
Maintenance
breakingChange
- rename
SimpleW.SetTokenWebUserCallback()method toSimpleW.SetToken()and reorder parameters (#3). - rename
Controller.OnBeforeHandler()method toController.OnBeforeMethod().
fix
- fix(AutoIndex): do not show ".." in root path (#10).
feature
- feature(WebSocket): handle multiple socket endpoints and not just one (#9).
- documentation
v11.4.0 - (2024-01-04)
Maintenance
feature
- property
RegExpEnabledmust be explicitly enabled to allow regular expression in route path (#2). - refactor(Router): use
Dictionnary<Key, Route>whenRegExpEnabledis false, performances improvement (#1)
v11.3.3 - (2023-12-24)
Maintenance
feature
- update nuget package settings
v11.3.2 - (2023-12-23)
Maintenance
feature
- update nuget package settings
v11.3.1 - (2023-12-23)
Maintenance
fix
- fix wrong label and status for
OnWsDisconnectedlogging
v11.3.1 - (2023-12-23)
Maintenance
fix
- fix wrong label and status for
OnWsDisconnectedlogging
feature
- add release-notes
- enhance logging
v11.3.0 - (2023-12-15)
Maintenance
breakingChange
- remove
Prefixproperty fromRouteAttributeclass
feature
- add new
AutoIndexproperty to list documents when defaultDocument does not exists - add new property
RegExpEnabledto force Router handle regular expression in Routes
v11.2.0 - (2023-12-09)
Maintenance
feature
- sync with upstream (NetCoreServer fix websocket closing)
- split
Routewith a newRouterclass - rename
ObjectMethodExecutortoControllerMethodExecutor - use
StringComparison.OrdinalIgnoreCase
v11.1.0 - (2023-11-07)
Maintenance
feature
- clean code
- add documentation
- add license
- include LitJWT sources in project files
v11.0.0 - (2023-11-01)
Major release
fix
- fix huge performances degradation due to old
Trace.Trace*()methods
v10.0.0 - (2023-10-22)
Maintenance
breakingChange
- rename
AddApiContent()toAddDynamicContent()
v9.0.1 - (2023-10-22)
Maintenance
fix
- throw error on starting static server when containing file which size is 0
feature
- reorganize
CompileHandler()method - refactor
ObjectMethodExecutor.Controllers() - add some check to
AddApiContent()andAddWebSocketContent()methods - refactor
RouteAttribute.SetPrefix() - clean code
v9.0.0 - (2023-10-12)
Maintenance
feature
- refactor
mimeTable - add NetCoreServer Official Readme
- sync with upstream (HttpMultipartDataParser to v8.2.0)
v8.1.2 - (2023-10-12)
Maintenance
feature
- compliant to OpenTelemetry http semantic convention
v8.1.1 - (2023-10-12)
Maintenance
feature
- convert old trace to
system.diagnostics.Activityfor OpenTelemetry
v8.1.0 - (2023-10-12)
Maintenance
feature
- preliminary support of
system.diagnostics.Activityfor OpenTelemetry
v8.0.8 - (2023-08-17)
Maintenance
feature
- change scope from protected to public for
Controller.MakeResponse*()
v8.0.7 - (2023-08-16)
Maintenance
feature
- add new
MakeDownloadResponse(MemoryStream content)
v8.0.6 - (2023-05-15)
Maintenance
breakingChange
- change
MakeRedirectResponse()scope to private
v8.0.5 - (2023-05-15)
Maintenance
feature
- add new helper
Controller.MakeRedirectResponse()
v8.0.4 - (2023-03-30)
Maintenance
feature
- clean code
v8.0.3 - (2023-03-29)
Maintenance
feature
- support
DateOnlyinController.Method()parameter
v8.0.2 - (2023-03-19)
Maintenance
feature
- sync with upstream (Newtonsoft v13.0.3)
BodyMap/JsonMap/BodyMapAnonymous: add new json custom converter for hh:mm timeonly
v8.0.1 - (2023-02-16)
Maintenance
feature
- add new
Controller.MakeResponse()
v7.0.0 - (2023-01-25)
Major release
breakingChange
- refactor SimpleW with
BodyMap(),BodyMapAnonymous()andBodyFile()
feature
- comment
v7.0.0 - (2022-12-01)
Major release
feature
- sync with upstream (NetCoreServer v7.0.0)
- sync with upstream (LitJWT v2.0.2)
- sync with upstream (Newtonsoft v13.0.2)
- retargeting to NET7
v6.2.4 - (2022-11-30)
Maintenance
feature
- uniformize http and websocket log
v6.2.3 - (2022-11-30)
Maintenance
feature
- comment
- replace special char
"in logging url
v6.2.1 - (2022-10-20)
Maintenance
fix
- logging error and exception
v6.2.0 - (2022-10-05)
Maintenance
feature
- refactor
Controller.GetWebUser()intoSetWebUser()andJwtToWebUser() - support
JWTinWebSocketconnexion
v6.1.0 - (2022-10-04)
Maintenance
feature
- refactor
SimpleWServer.AddWebSocketContent() - support
JWTinWebSocket
v6.0.0 - (2022-10-02)
New Major Version
fix
- fix null exception in
Controller.GetJwt()when parsing request url
feature
- support
Websocket - support
Routefor websocket - refactor
SimpleWSession/Controllerwith(SimpleWServer)Session.Server
v5.0.0 - (2022-09-30)
New Major Version
breakingChange
- rename
AddRESTContenttoAddApiContent
feature
- remove exception message output when http 500 error
v4.4.5 - (2022-09-28)
Maintenance
feature
- sync with upstream (NetCoreServer v6.6.0)
- sync with upstream (Http-Multipart-Data-Parser v7.0.0)
v4.4.4 - (2022-09-27)
Maintenance
feature
- support CORS
- add new
HttpResponse.MakeCORSResponse()method
v4.4.3 - (2022-08-29)
Maintenance
fix
- replace
X-Schemeheader byX-Forwarded-Proto
feature
- handle
X-Forwarded-Hostheader in log
v4.4.2 - (2022-08-24)
Maintenance
feature
- support
X-Schemerequest header for logging
v4.4.1 - (2022-08-24)
Maintenance
feature
- log full request url for file in cache and normalize log url
- log real remote ip
- refactor
Routewith the newFQURL()method
v4.4.0 - (2022-08-24)
Maintenance
fix
shouldSerializeContractResolver()handle nested class
v4.3.2 - (2022-08-12)
Maintenance
fix
- sync with upstream (NetCoreServer v6.5.0 fix websocket regression)
v4.3.1 - (2022-08-12)
Maintenance
feature
- add new parameter
descriptiontoRouteAttribute
v4.3.0 - (2022-08-11)
Maintenance
feature
- sync with upstream (NetCoreServer v6.4.0 with Span/Memory)
v4.2.8 - (2022-07-29)
Maintenance
fix
- sync with upstream NetCoreServer (fix deadlock in websocket/wssession)
- sync with upstream NetCoreServer (Add HTTP cookie SameSite=Strict mode)
feature
- comment
- add new parameter
exceptstoSimpleW.AddRESTContent()to exclude controllers - support wildcard in
RouteAttribute
v4.2.7 - (2022-06-28)
Maintenance
feature
- sync with upstream package LitJWT from v1.2.0 to v2.0.1
v4.2.6 - (2022-06-28)
Maintenance
breakingChange
feature
- enhance http logging (time, status, user_agent...)
v4.2.5 - (2022-06-14)
Maintenance
feature
- add new parameter
expirationtoNetCoreServerExtension.CreateJwt()to controlJWTexpiration
v4.2.4 - (2022-04-27)
Maintenance
feature
- enhance http logging (time, status, user_agent...)
v4.2.3 - (2022-04-27)
Maintenance
feature
- add new paremeter
refreshinCreateJwt()to control howSessionshould refresh the underlying 'IWebUser'
v4.2.2 - (2022-04-07)
Maintenance
breakingChange
- rename
NetCoreServerExtension.PostMap()toNetCoreServerExtension.JsonMap()
v4.2.1 - (2022-04-07)
Maintenance
breakingChange
- rename
NetCoreServerExtension.GetBearerToken()toNetCoreServerExtension.GetBearer()
v4.2.0 - (2022-04-04)
Maintenance
feature
- replace logging
console.logbysystem.diagnostics
v4.1.0 - (2022-03-22)
Maintenance
breakingChange
- change some method scope of Route class to private
- rename
Route.Parse()toRoute.ParseQueryString()
feature
JWTHTTP Header can be override by ajwtquerystring in url- comment
- add new
NetCoreServerExtension.CreateJwt(IWebUser webuser) - refactor
ValidateJwtwith Generic - refactor and simplify
TokenWebUserclass
v4.0 - (2022-03-21)
New Major Version
breakingChange
- rename class
ControllertoControllerBase
feature
- add new parameter
TokenExpirationtoTokenWebUser
v3.2.2 - (2022-03-20)
Maintenance
breakingChange
- rename
DelegateSetTokenWebUser(string login=null)toDelegateSetTokenWebUser(Guid id = new Guid())
v3.1.2 - (2022-03-10)
Maintenance
fix
- ignore case when parsing http header authorization
v3.1.1 - (2022-03-08)
Maintenance
feature
- add new ControllerBase
MakeForbiddenResponse()andMakeAccessResponse()
v3.1.0 - (2022-02-22)
Maintenance
feature
- replace
InvariantCulturewithOrdinal - remove
JsonSerializerSettingsDefaultCulturefromNetCoreServerExtension.PostMap() - enhance exception message in
NetCoreServerExtension.PostMap() - add comment
v3.0.0 - (2022-02-21)
Maintenance
feature
- retargeting to NET6
v2.3.0 - (2022-02-11)
Maintenance
feature
- add
Http-Multipart-Data-Parser
v2.2.1 - (2022-02-03)
Maintenance
fix
- remove debug message
v2.2 - (2022-02-03)
Maintenance
fix
- fix NetCoreServer
FileCache.InsertFileInternal()ReadAllBytes()error
v2.1.1 - (2022-01-31)
Maintenance
fix
- fix correct timestamp in console log
v2.1 - (2022-01-30)
Maintenance
fix
- fix netcoresever
FileCache - fix compressTypes in
ControllerBase.SendResponseAsync()
v2.0 - (2022-01-23)
New Major Version
feature
- sync with upstream (NetCoreServer v6.1.0)
v1.1.1 - (2022-01-03)
Maintenance
refactor
- refactor
SimpleWServer.AddWebSocketContent()
v1.1.0 - (2021-12-26)
Initial nuget package release
breakingChange
- rename
PostUpdate()toPostMap()
v1.0.15 - (2021-12-16)
Maintenance
feature
- support Guid parameter in
Controller.Method()
v1.0.14 - (2021-12-16)
Maintenance
fix
- parameter null converter in
Controller.Method()
v1.0.12 - (2021-11-10)
Initial stable release
features
- serve Statics Files
- serve REST API
- routes
- set default document
- set custom mime type
- log with console.writeline