Changelog
Notes :
- it does not strictly follow the semver convention.
- no technical debt : code that's need 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 way to optimize, feel free to submit a patch.
Roadmap - (2026)
- docker template
- captcha module
- HTTP/3 quic
v26.0.0-rc - (2026-03-??)
This version is a major release :
- a complete rewrite of the project (start from scratch no more netcoreserver override)
- the core is simple as possible and delivers very good performances !
- there is many place for extensibility.
- so there are addons !
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 heady 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 |
| Response Builder | ✅(status, contentType, headers, body, cookies) | ✅ (status, contentType, contentLength, headers, body, cookies, compression) |
| Handler (Expression Tree) | ✅ sync ❌async | ✅ sync ✅ async + RequestAborted |
| Routing | ✅ (minimal, attribute, querystring, regexp, path, wildcard) | ✅ (minimal, attribute, querystring, path, wildcard) |
| Minimal API | ✅ | ✅ |
| Controllers | ✅ | ✅ |
| SSL / HTTPS | ✅ (SslContext) | ✅ (SslContext, mutual authentication) |
| WebSocket | ✅ (full broadcast) | ✅ (smart broadcast using "rooms") |
| Server-Sent Events (SSE) | ✅ | ✅ (smart broadcast using "rooms") |
| Basic Auth | ❌ | ✅ |
| JWT auth | ✅ | ✅ |
| 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) | ✅ | ✅ |
| Bag | ❌ | ✅ (share data between middleware) |
| WebUser / Identity | ✅ | ✅ |
| Custom JSON engine | ✅ | ✅ |
| HTTP pipelining | ❌ | ✅ |
| Idle Timeout | ❌ | ✅ |
| Request Protection | ❌ | ✅(malformed) |
| Observability | ✅ (traces) & global to all processes | ✅ (traces, metrics, enrich) per SimpleWServer instance |
| Logging | ❌ | ✅ |
| Documentation | ✅ | ✅ simplew.net |
| Tests | ✅ | ✅ (more tests) |
| Support | ❌ | ✅ Discord |
| Addons | ❌ | ✅ Chaos, Firewall, Hosting, Latency, OpenID, Razor, Swagger, LetsEncrypt, Templates, Serilog, Log4net |
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 a new SimpleW.Newtonsoft nuget package to (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 new call byController.JwtToWebUser()to redressController.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 overrided 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 once (#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 projet 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
