<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: stratdev</title>
    <description>The latest articles on Forem by stratdev (@stratdev_99e0066103e51dc1).</description>
    <link>https://forem.com/stratdev_99e0066103e51dc1</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3577484%2Ff4a1fcdc-2782-4d9a-a023-8bd2b3d852e0.png</url>
      <title>Forem: stratdev</title>
      <link>https://forem.com/stratdev_99e0066103e51dc1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/stratdev_99e0066103e51dc1"/>
    <language>en</language>
    <item>
      <title>SimpleW</title>
      <dc:creator>stratdev</dc:creator>
      <pubDate>Tue, 21 Oct 2025 16:50:45 +0000</pubDate>
      <link>https://forem.com/stratdev_99e0066103e51dc1/simplew-fog</link>
      <guid>https://forem.com/stratdev_99e0066103e51dc1/simplew-fog</guid>
      <description>&lt;p&gt;Hey everyone! 👋&lt;/p&gt;

&lt;p&gt;After years of working with ASP.NET and other heavy frameworks, I wanted something simpler, faster, and more transparent for building custom web servers in .NET.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://stratdev3.github.io/SimpleW/" rel="noopener noreferrer"&gt;SimpleW&lt;/a&gt; — an open-source library that gives you full control over HTTP handling, without all the magic layers.&lt;/p&gt;

&lt;p&gt;🧩 What it is&lt;/p&gt;

&lt;p&gt;SimpleW is a lightweight web server library for .NET designed to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build HTTP servers in just a few lines of C#&lt;/li&gt;
&lt;li&gt;Handle routes, static files, WebSockets, and middleware easily&lt;/li&gt;
&lt;li&gt;Run on Linux/Windows (tested on Debian, NixOS, and Windows)&lt;/li&gt;
&lt;li&gt;Stay dependency-free and minimal (no ASP.NET Core required)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⚡ Why I made it&lt;/p&gt;

&lt;p&gt;Most .NET web stacks are powerful but complex. I wanted a minimal, hackable server that could be dropped into any app, or used as a base for custom frameworks, game servers, or embedded tools — while still delivering very good &lt;a href="https://stratdev3.github.io/SimpleW/guide/performances.html" rel="noopener noreferrer"&gt;performances&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Net&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;SimpleW&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;Sample&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Program&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

            &lt;span class="c1"&gt;// listen to all IPs on port 2015&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SimpleWServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IPAddress&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Any&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;2015&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

            &lt;span class="c1"&gt;// find all Controllers classes and serve on the "/api" endpoint&lt;/span&gt;
            &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddDynamicContent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/api"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

            &lt;span class="c1"&gt;// start non blocking background server&lt;/span&gt;
            &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

            &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"server started at http://localhost:2015/"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

            &lt;span class="c1"&gt;// block console for debug&lt;/span&gt;
            &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadKey&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// inherit from Controller&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SomeController&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Controller&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="c1"&gt;// use the Route attribute to target a public method&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"GET"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"/test"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;object&lt;/span&gt; &lt;span class="nf"&gt;SomePublicMethod&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

            &lt;span class="c1"&gt;// the Request property contains all data (Url, Headers...) from the client Request&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Url&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

            &lt;span class="c1"&gt;// the return will be serialized to json and sent as response to client&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Hello World !"&lt;/span&gt;
            &lt;span class="p"&gt;};&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it — you’ve got a working HTTP server.&lt;/p&gt;

&lt;p&gt;I’d really appreciate any feedback or ideas you might have 🙂 !&lt;/p&gt;

&lt;p&gt;💡 Links&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/stratdev3/SimpleW" rel="noopener noreferrer"&gt;https://github.com/stratdev3/SimpleW&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href="https://stratdev3.github.io/SimpleW/" rel="noopener noreferrer"&gt;https://stratdev3.github.io/SimpleW/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>csharp</category>
      <category>http</category>
      <category>api</category>
      <category>rest</category>
    </item>
  </channel>
</rss>
