[HN Gopher] SimpleW - Web Server Library .NET Core
___________________________________________________________________
SimpleW - Web Server Library .NET Core
Author : prodbro
Score : 51 points
Date : 2025-08-05 13:39 UTC (9 hours ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| anditherobot wrote:
| Does this mean a developer doesn't have to install nginx or iis ?
| andix wrote:
| No modern dotnet web framework requires nginx or iis.
| tucaz wrote:
| This has been the case for years
| kcb wrote:
| https://learn.microsoft.com/en-us/aspnet/core/fundamentals/s...
| SideburnsOfDoom wrote:
| Have you tried Kestrel, YARP and Aspire?
| tracker1 wrote:
| I'm not familiar with YARP, but isn't Aspire still using
| Kestral? I think of Aspire as more of a code driven, flexible
| Docker-Compose alternative.
| SideburnsOfDoom wrote:
| YARP is (Yet Another) Reverse Proxy, and Aspire is in a
| similar space to Testcontainers - i.e. orchestration of
| multiple executables for test (and other things). No it's
| not an alternative to Kestrel.
|
| These are three different tools that do different things.
| The point is that these are better examples of the "modern
| MS ASP Infra" space than "nginx, iis".
| prodbro wrote:
| > Does this mean a developer doesn't have to install nginx or
| iis ?
|
| author here.
|
| You don't have to keep it behind a reverse proxy like nginx.
|
| But you can, especially if you have multiple APIs and you want
| to keep thing separated for security reason.
|
| Example :
|
| nginx:443 (reverse proxy, domain name routing)
|
| |
|
| |-> website1:8081 - docker container with SimpleW
|
| |-> website2:8082 - docker container with SimpleW
|
| |
|
| ...
| p_ing wrote:
| A web server should never be directly exposed to the
| Internet, provided you care about the web server host or
| what's behind it.
| ofrzeta wrote:
| > A web server should never be directly exposed to the
| Internet
|
| That's what web servers are made for, no? Like Apache,
| Nginx etc. I mean, you could certainly put HAProxy in front
| but you'd need a good reason to do this.
| CharlieDigital wrote:
| This is not the case for the modern Internet.
|
| More often than not, for any serious application backend,
| you probably want a web application firewall (WAF) in
| front of it and SSL termination upstream of the web
| server.
| qingcharles wrote:
| ASP.NET Core comes with its own built-in web server named
| Kestrel, which is very highly optimized. On most projects, I
| use it totally bare-metal, though I figure most run it behind a
| reverse proxy like nginx or yarp.
| andix wrote:
| But why?
|
| ASP.NET Core is one of the best web frameworks, extremely modular
| and flexible. It's low level components (http server, routing)
| can be used as a foundation for new web frameworks.
| taspeotis wrote:
| I agree that ASP.NET Core is fantastic and it doesn't give you
| many reasons to look elsewhere.
|
| That said I think some diversity / competition / cross-
| pollination should be welcomed in the .NET space.
|
| Not a fair comparison but I'm glad Avalonia exists despite WPF,
| for example.
| andix wrote:
| There used to be Nancy, but it got pointless to compete with
| asp.net core.
| Kuinox wrote:
| Avalonia is cross plateform unlike WPF.
| nirav72 wrote:
| I was wondering samething. But then I saw that it has some
| built-in capabilities for WebSockets and OpenTelemetry.
| doubleorseven wrote:
| seems like the author didn't like the obvious or alternative
| solutions out there, and went and created one of his own. i
| know some people who use their own web server, this is an on
| going adventure for sure.
| whoknowsidont wrote:
| >ASP.NET Core is one of the best web frameworks
|
| ...based on what?
| andix wrote:
| In total. Just compare different web frameworks by
| performance, flexibility, features and so on. Whatever you
| compare, ASP.NET Core will probably end up in the top 20%.
| beanjuiceII wrote:
| crazy how people just dont want to believe it, but its
| really really good
| thewebguyd wrote:
| People (particularly, HN) still associate it with the old
| .NET framework days and it being tied to Microsoft,
| Windows Server, etc.
|
| .NET has had a hard time shaking off that old stigma, and
| to be fair, by the time it was really good, a lot of
| places already moved on to other tech (in particular, Go)
| .NET missed its window to escape the enterprise and
| despite being great, will probably never be seen as sexy.
|
| I love it though. It's by far one of the most productive
| frameworks, and C# is pleasant to work with, and F# even
| more so.
| qingcharles wrote:
| It's been really great since I've been able to develop on
| Windows and deploy to a cheap Linux VM instead of having to
| deal with IIS. Game-changing for me.
| andix wrote:
| The old asp.net was not only horrible in regard of
| deployment (iis/windows). The whole thing was a mess. It
| might've been innovative around 2005, but it was
| completely scrapped in ~2016 for a good reason.
| sltr wrote:
| The library's tagline says "Powerfully Simple. Blazingly Fast."
| So there. ::folds arms::
|
| Joking aside, I do agree that ASP.NET Core is a behemoth. On
| .NET 9, I just now did `dotnet new webapi` followed by `dotnet
| publish --self-contained -p:PublishSingleFile=true` and the
| binary is 103MB. That would blow up the size of a mobile app
| considerably, just to listen to HTTP.
|
| There a separate use case that SimpleW won't solve: When you're
| on a platform that .NET Core doesn't support, like Raspberry Pi
| Zero (armv7l). In this case all you have is the mono framework
| and binding to raw ports.
| zigzag312 wrote:
| Enable trimming
| mlhpdx wrote:
| And AoT.
| sltr wrote:
| Simple claim with a complex story.
|
| I thought about mentioning AOT and trimming, but my comment
| was already long.
|
| AOT in ASP.NET is still a moonshot in most cases, and a
| non-starter in existing web apps due to dependencies not
| supporting AOT.
|
| Worth mentioning that as of .NET 9 AOT is not supported on
| Android.
| actionfromafar wrote:
| Soo many dependencies do not support AOT.
| crinkly wrote:
| Sometimes. It's usually a lot bigger than that the moment you
| pull in any simple dependencies. Also the CLR memory overhead
| is horrible. Our .Net guys have serious problems with startup
| time (JIT) and initialy latency on .Net Core so I don't trust
| the fast claim. And no you can't just AOT everything.
|
| We moved a couple of critical services over to Go because of
| those two issues and it turned a few heads.
| magicalhippo wrote:
| Curious what the use-case is where JIT latency is an issue
| for a http service?
| fabian2k wrote:
| Probably Serverless functions, which is a use case where
| standard ASP.NET Core is not particularly good.
|
| I'd blame Serverless more than ASP.NET Core for the bad
| performance in that case though.
| crinkly wrote:
| We are fairly high traffic. Deployments, even rolling,
| can and do cause fairly noticeable latency spikes and
| side effects like upstream services having to queue
| requests, pool escalations, all sorts. Warming stuff up
| before first hit is a complete bitch on top of that.
|
| I notice Apple had similar problems and moved some of
| their back end to Swift from JVM recently. There was a
| post on here.
| stackskipton wrote:
| Yep, downside of virtual language like that. Upside of
| Java/.Net is their extensive libraries and really good
| developer experience. Just like Golang GC caused Discord
| endless amount of headaches in some of their routes.
|
| I have some heavy ASP.Net stuff too, yep, we have to
| prewarm it before putting into production.
| stackskipton wrote:
| Most of that is runtime taking up space. So yes, baseline is
| 103MB but outside that, it's not likely to balloon too much
| past assets. Compared to Python/Node/Java/Ruby containers I
| see as SRE, 103MB is god send.
|
| I think you are expecting too much here.
| prodbro wrote:
| > The library's tagline says "Powerfully Simple. Blazingly
| Fast."
|
| > Joking aside
|
| author here.
|
| I agree with your remark ^^
|
| Each time i read some news about a new framework with tag
| "blazingly fast", i'm thinking "lol".
|
| So i had to resist to the temptation... And finaly when doing
| a small benchmark, performances were not bad at all
| (https://stratdev3.github.io/SimpleW/guide/performances.html)
| and i let the "clickbait" title.
|
| My targets are small to medium traffic and embeded devices
| (dotnet/android).
| qingcharles wrote:
| Did you try compiling all the test to native thru AoT?
| There are probably some optimizations to improve the
| Kestrel score by altering the config, or maybe changing how
| the API is written:
|
| app.MapGet("/api/test/hello", () => "Hello World!");
|
| As a general web server, I think I'd always go for Kestrel
| over this, but as another poster said, if you're trying to
| add an endpoint to some desktop application, this would be
| perfect.
| prodbro wrote:
| > There are probably some optimizations to improve the
| Kestrel
|
| You're right.
|
| To be fair, i have to run many other benchmarks including
| one with the best recommanded optimizations for each
| projects.
|
| a little time consuming but definetely on my todo list.
| dardeaup wrote:
| I hate when someone's software advertises itself as
| 'blazingly fast' and then provides NO DATA to back up the
| claim. It's possible that it really is blazingly fast, but to
| make the claim and provide no data is sad. In God we trust -
| all others please bring data.
| prodbro wrote:
| > I hate when someone's software advertises itself as
| 'blazingly fast' and then provides NO DATA to back up the
| claim
|
| agree, that's why there is a performance benchmark at
| https://stratdev3.github.io/SimpleW/guide/performances.html
| with code as you can reproduce at your own.
|
| i'm adding other tests, more complete than the hello world
| one.
| dardeaup wrote:
| Cool! Please add link to that page from your github
| project's main page.
| brainzap wrote:
| no its not. We always can use alternatives
| prodbro wrote:
| author here.
|
| I wanted to start with something small where I could read or
| write the code in a reasonable amount of time.
|
| My usage was, and still is, for low traffic. I don't intend to
| replace the Kestrel beast.
|
| Just a framework you can quickly understand without being lost
| in documentation once you want to custom a part.
| prodbro wrote:
| > ASP.NET Core is one of the best web frameworks
|
| I don't think so.
|
| The fact is there are very few dotnet web servers. ASP.NET Core
| is supported by the owner of the dotnet langage who is also the
| M of the GAFAM.
|
| There is some place in the ecosystem for other alternatives
| stackskipton wrote:
| >The fact is there are very few dotnet web servers.
|
| SRE here, very few because Microsoft is strongly opinionated
| with ASP.Net and those opinions most sense for VAST majority
| of their users.
| prodbro wrote:
| > those opinions most sense for VAST majority of their
| users
|
| I have a much more nuanced view.
|
| I think that ASP.Net is the de facto standard for being
| backed by Microsoft since many years. From the gold time
| when ASP means IIS to now when Kestrel was cannibalized by
| Microsoft.
|
| As a developer, working with the most widely used stack
| guarantees that these choices won't be questioned in
| critical situations. I'm not saying Kestrel is bad, but it
| doesn't automatically fit every scenario.
|
| - 15 years ago, there were Apache or IIS.
|
| - Then nginx changes the game and kicks their ass
|
| - Then webserver starts being written into script langage
| for better integration (Ruby, Python), no more CGI and
| nginx as reverse
|
| - Then node changes the game
|
| - Now : caddy and other alternatives... but still not web
| server in PHP (troll inside)
|
| I see a pattern to not believe aspnetcore is the only one
| and the best.
| tracker1 wrote:
| The webserver variability isn't really so wide because the in
| the box offering since Core has been pretty good, flexible
| and works for most use cases. And while I really like
| FastEndpoints a lot over the minimal api stuff, even that is
| pretty straight forward.
|
| It's not my favorite, it starts slow and I'd rather go up to
| JS/TS for scripting flexibility or down to Rust for really
| lightweight performance with fast startups. It's one of the
| better all-around options though. I'd rather use it over Java
| every day of the week and there are adapters for most things
| you'd ever need to communicate with.
| oakstendheim wrote:
| One of the use cases that stands out to me is dropping an API
| into a console application without having to use a different
| project. With ASP.NET I have to set up a new project, use a
| different SDK and then re-register all my services in its
| service collection. It looks like this one is bringing it
| closer to how it's done in Go which I personally really like.
| kuhsaft wrote:
| You shouldn't have to change the SDK.
|
| You can create a class library ASP.NET Core Server by using a
| FrameworkReference [1]. I can't remember the library, but
| there was one that had its own `IHostedService` with its own
| embedded ASP.NET Core Server startup within it.
|
| If your `WebApplication` requires services, of course you're
| going to have to register its dependencies on its
| `IServiceCollection`. Though, you can use factory methods for
| service registration to use an external `IServiceProvider`.
|
| For console applications, I would recommend using
| `Host.CreateEmptyApplicationBuilder` [2]. Makes it a lot
| easier to configure services for Console applications. It
| also handles `IHostApplicationLifetime`s.
|
| [1] https://learn.microsoft.com/en-
| us/aspnet/core/fundamentals/t...
|
| [2] https://gist.github.com/pethin/7e5edd7614ff2f51c06c086e1b
| c7c...
| oakstendheim wrote:
| Wow I did not know that, I was always under the assumption
| that I needed to have a project using the
| Microsoft.NET.Sdk.Web for anything Web as its base. Thanks
| for the info!
| andix wrote:
| It used to be much more modular back in dotnet core 2.x.
| It was just too complex for most people to wire up
| everything themselves. You needed to install a lot of
| nuget packages, add a lot of middlewares. In the end 95%
| of the projects added everything anyway, but always with
| some little mistakes and weird errors.
|
| Starting with 3.0 (or 5.0?) they ditched the Startup
| class and just added in everything by default. Much
| easier for the regular web application. The modular
| approach is still everywhere though. You can just pick
| the components you need, most of them also run without
| DI, it's just a bit of a hassle to manage all those
| dependencies manually.
| andix wrote:
| I think you can just pick the components you really need via
| nuget reference. And start/stop the web server as you like.
|
| The full asp.net out-of-the-box experience is tailored to the
| most common use case, which is a plain web service.
|
| I think you can even run the Kestrel HTTP server without all
| the asp.net pipelines, infrastructure and without dependency
| injection.
|
| Also the common WebApplication.CreateBuilder() includes a lot
| of default configuration (batteries included), there is also
| CreateSlimBuilder() and CreateEmptyBuilder().
| louthy wrote:
| > ASP.NET Core is one of the best web frameworks
|
| In your opinion. Not everyone is of the same mind when it comes
| to software design. Sometimes the motivations are different.
|
| As a community we should encourage those looking to find their
| own path. We become myopic otherwise.
| andix wrote:
| Yes, in my opinion. But also objectively it's really good for
| many things.
|
| That's the reason I asked the question "why?". It's probably
| much slower (asp.net got performance/memory optimized to a
| ridiculous extent), and might contain dangerous
| vulnerabilities (creating a secure http server is hard!).
| mrweasel wrote:
| At a quick glance it looks much simpler than e.g. Kestrel, which
| I found pretty confusing to get running.
| prodbro wrote:
| author here.
|
| that's the reason why i start the project. I had time and
| wanted something simple as my needs.
| bob1029 wrote:
| Not sure about this one. It's based on NetCoreServer which is
| great but it's definitely not something I'd be comfortable
| putting into production over kestrel or IIS.
|
| From a performance standpoint, it is _very_ difficult to beat
| kestrel now. If you don 't want all the fancy Microsoft bullshit
| (I certainly don't), use the minimal APIs and map out routes to
| lightweight HttpContext handlers.
| bravesoul2 wrote:
| I wonder. Is this one meant to deal with raw internet traffic
| or sit behind an ingress e.g. IIS?
| brainzap wrote:
| minimal APIs is microsoft bullshit
|
| also what does performance matter on webservers
| bob1029 wrote:
| > minimal APIs is microsoft bullshit
|
| Agreed, but it is the least smelly pile they have on offer.
|
| https://learn.microsoft.com/en-
| us/aspnet/core/fundamentals/m...
| qingcharles wrote:
| Performance matters to me. I'm on a budget, running tiny
| Hetzner boxes. Every cycle counts.
| sandreas wrote:
| There's also Fast Endpoints[1], which Kind of the best of both
| worlds, minimal-API and REPR.
|
| 1: https://fast-endpoints.com/
| tracker1 wrote:
| Came to mention the same... really like FastEndpoints myself
| a lot.
| pier25 wrote:
| Same although Minimal APIs are slowly getting there. In
| dotnet 10 we will finally get validation.
| tracker1 wrote:
| Fair enough... I'd probably stick to Minimal APIs if
| there were fewer than 5-10 routes in a smaller service.
| But, with the startup and runtime overhead of .Net, I'm
| inclined to prefer more monolithic approaches for most
| general use. Just without weighing it down with a lot of
| heavy handed enterprisey abstractions.
|
| Edit: Of course, Aspire definitely looks interesting for
| more complex needs.
| pier25 wrote:
| AFAIK FastEndpoints uses Minimal APIs... so wouldn't the
| overhead be similar?
| prodbro wrote:
| > There's also Fast Endpoints[1]
|
| thank for the pointer !
|
| The syntax seems cool and comprehensive, i like it.
|
| I made some test and like its name, it is very fast :
| performances are closed to SimpleW, just a little bellow. But
| its memory footprint is the half, so i'm impressed. I will
| check the code, sure there are interesting things into.
| phendrenad2 wrote:
| For the uninitiated, what's wrong with NetCoreServer?
| oconnor0 wrote:
| I really wish that Kestrel was available as a standalone
| library. Kind of like Jetty on the JVM.
| aanthonymax wrote:
| The documentation on VitePress looks cool. I didn't think there
| was such a theme there.
| prodbro wrote:
| VitePress saved my day.
|
| The default template is great and everything in VitePress has
| been thinking to create documentation. Very nice project.
___________________________________________________________________
(page generated 2025-08-05 23:01 UTC)