<?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>DEV Community: Nytrox</title>
    <description>The latest articles on DEV Community by Nytrox (@nytrox).</description>
    <link>https://dev.to/nytrox</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%2F3808771%2Fd563f675-db35-4ffa-9148-f7966ba611e5.png</url>
      <title>DEV Community: Nytrox</title>
      <link>https://dev.to/nytrox</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nytrox"/>
    <language>en</language>
    <item>
      <title>I built a TCP networking library in Python at 14 : and v1.6.2 just hit 110k msg/s with zero dependencies</title>
      <dc:creator>Nytrox</dc:creator>
      <pubDate>Sun, 12 Apr 2026 12:54:05 +0000</pubDate>
      <link>https://dev.to/nytrox/i-built-a-tcp-networking-library-in-python-at-14-and-v162-just-hit-110k-msgs-with-zero-5l4</link>
      <guid>https://dev.to/nytrox/i-built-a-tcp-networking-library-in-python-at-14-and-v162-just-hit-110k-msgs-with-zero-5l4</guid>
      <description>&lt;p&gt;I'm 14 years old and I've been working on an open-source Python library called Veltix for the past few months. I just released v1.6.2 and the benchmarks genuinely shocked me, so I wanted to write up what changed and why.&lt;/p&gt;

&lt;p&gt;Before I get into the numbers: the code is entirely mine. The README, comments, and changelog were written with AI assistance for grammar and formatting, and so was this article since English isn't my first language. I want to be transparent about that upfront.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Veltix?
&lt;/h2&gt;

&lt;p&gt;Veltix is a TCP networking library for Python. It gives you structured client/server communication without having to manage framing, threading, handshake, or protocol design yourself, and without any external dependencies.&lt;/p&gt;

&lt;p&gt;It sits between raw sockets (which give you nothing) and heavier frameworks like Twisted (which give you everything but at a steep cost in complexity). The target is developers who want something that just works, is easy to read, and doesn't pull in half of PyPI.&lt;/p&gt;

&lt;p&gt;Here is what a basic echo server looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;veltix&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ClientInfo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ServerConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MessageType&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;Events&lt;/span&gt;

&lt;span class="n"&gt;CHAT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MessageType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chat&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ServerConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.0.0.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;sender&lt;/span&gt; &lt;span class="o"&gt;=&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;get_sender&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;on_message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ClientInfo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CHAT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Echo: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;broadcast&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;,&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;get_all_clients_sockets&lt;/span&gt;&lt;span class="p"&gt;())&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;set_callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ON_RECV&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;on_message&lt;/span&gt;&lt;span class="p"&gt;)&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No event loop, no async/await, no dependencies. Just stdlib.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed in v1.6.2?
&lt;/h2&gt;

&lt;p&gt;The biggest change is a protocol optimization that I honestly did not expect to have this much impact.&lt;/p&gt;

&lt;p&gt;Previously, every message carried a 62-byte header. The request ID was a UUID string, and payload integrity was verified with SHA-256. In v1.6.2:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The header is now 22 bytes&lt;/li&gt;
&lt;li&gt;Request IDs are 4 raw bytes instead of a UUID string&lt;/li&gt;
&lt;li&gt;SHA-256 is replaced by CRC32 for payload integrity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Less data per message, much lighter hashing. That's it. The result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Burst throughput:   55,606 msg/s  -&amp;gt;  110,011 msg/s  (+98%)
Memory per client:      78 KB     -&amp;gt;       64.4 KB    (-17%)
Average latency:     0.011 ms     -&amp;gt;      0.007 ms    (-36%)
Concurrent stress:  33,482 msg/s  -&amp;gt;     39,123 msg/s (+17%)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All of this is still pure Python, threading + blocking sockets, no C extensions, no event loop. The minimum supported Python version is 3.8+, which also means Windows 7 compatibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not asyncio?
&lt;/h2&gt;

&lt;p&gt;Honestly, the main reason was learning. I wanted to understand what happens at the socket level before adding an event loop abstraction on top. Selectors and threading forced me to think about framing, concurrency, and state management in a way that asyncio would have hidden from me.&lt;/p&gt;

&lt;p&gt;That said, asyncio is next. v1.7.0 will introduce a selectors-based event loop as an optional backend. The API stays exactly the same, you just switch to &lt;code&gt;SocketCore.ASYNC&lt;/code&gt;. No migration needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is in the library?
&lt;/h2&gt;

&lt;p&gt;Beyond basic send/receive, Veltix includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatic HELLO/HELLO_ACK handshake with version compatibility check&lt;/li&gt;
&lt;li&gt;Request/response correlation with &lt;code&gt;send_and_wait()&lt;/code&gt; and configurable timeout&lt;/li&gt;
&lt;li&gt;Decorator-based message routing with &lt;code&gt;@server.route(MY_TYPE)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Auto-reconnect with configurable retry and disconnect state callbacks&lt;/li&gt;
&lt;li&gt;Built-in ping/pong with latency measurement&lt;/li&gt;
&lt;li&gt;Thread-safe, colorized, file-rotating logger&lt;/li&gt;
&lt;li&gt;Client tags for attaching metadata to connections&lt;/li&gt;
&lt;li&gt;Performance mode presets (LOW, BALANCED, HIGH)&lt;/li&gt;
&lt;li&gt;Swappable socket backend via &lt;code&gt;SocketCore&lt;/code&gt; enum&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is next?
&lt;/h2&gt;

&lt;p&gt;v1.7.0 brings the selectors-based event loop. After that I want to experiment with a Rust core via PyO3, published as a completely optional experimental backend. And more protocol optimizations are in the pipeline.&lt;/p&gt;

&lt;p&gt;I have no idea how far this project will go, but building it has taught me more about networking, Python internals, and protocol design than anything else I have done so far.&lt;/p&gt;

&lt;p&gt;If you want to try it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;veltix
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub: &lt;a href="https://github.com/NytroxDev/Veltix" rel="noopener noreferrer"&gt;https://github.com/NytroxDev/Veltix&lt;/a&gt;&lt;br&gt;
PyPI: &lt;a href="https://pypi.org/project/veltix/1.6.2/" rel="noopener noreferrer"&gt;https://pypi.org/project/veltix/1.6.2/&lt;/a&gt;&lt;br&gt;
Docs: &lt;a href="https://nytroxdev.github.io/Veltix/" rel="noopener noreferrer"&gt;https://nytroxdev.github.io/Veltix/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy to answer questions about any of the internals or design decisions.&lt;/p&gt;

</description>
      <category>python</category>
      <category>networking</category>
      <category>opensource</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Veltix v1.6.2: Lighter protocol, better architecture, and Rust experiments ahead</title>
      <dc:creator>Nytrox</dc:creator>
      <pubDate>Wed, 18 Mar 2026 22:23:41 +0000</pubDate>
      <link>https://dev.to/nytrox/veltix-v162-lighter-protocol-better-architecture-and-rust-experiments-ahead-3m3h</link>
      <guid>https://dev.to/nytrox/veltix-v162-lighter-protocol-better-architecture-and-rust-experiments-ahead-3m3h</guid>
      <description>&lt;h1&gt;
  
  
  Veltix v1.6.2: Lighter, Faster, and a Rust Experiment Coming
&lt;/h1&gt;

&lt;p&gt;Hey Dev.to!&lt;/p&gt;

&lt;p&gt;I'm Nytrox, a self-taught developer and the creator of Veltix, a pure Python TCP networking library with zero dependencies. Today I want to share what's coming in v1.6.2 and where the project is heading.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed in v1.6.2
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Reworked socket abstraction layer
&lt;/h3&gt;

&lt;p&gt;The biggest architectural change in this version is a complete rework of &lt;code&gt;BaseSocket&lt;/code&gt; and &lt;code&gt;ThreadingSocket&lt;/code&gt;. The new &lt;code&gt;BaseSocket&lt;/code&gt; is a clean, minimal Protocol that exposes only what matters: bind, connect, send, close, and callbacks. All the threading logic now lives inside &lt;code&gt;ThreadingSocket&lt;/code&gt; instead of leaking into &lt;code&gt;Server&lt;/code&gt; and &lt;code&gt;Client&lt;/code&gt;. This makes the codebase much easier to maintain and paves the way for a selectors-based backend in v1.7.0.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lighter protocol header
&lt;/h3&gt;

&lt;p&gt;The message header went from 62 bytes down to 22 bytes. I replaced SHA256 with CRC32 and dropped UUID4 in favor of a 4-byte random ID. On high throughput workloads this makes a real difference.&lt;/p&gt;

&lt;h3&gt;
  
  
  MessageBuffer optimization
&lt;/h3&gt;

&lt;p&gt;The internal message buffer was reworked to eliminate unnecessary memory allocations on every received message. Less garbage collection pressure, better throughput.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next: experimenting with Rust
&lt;/h2&gt;

&lt;p&gt;In the coming versions I'm planning to experiment with rewriting some performance-critical parts of Veltix in Rust via PyO3. This will be completely optional for users who don't want the compiled extension. Pure Python will always remain the default.&lt;/p&gt;

&lt;h2&gt;
  
  
  A project built on top of Veltix
&lt;/h2&gt;

&lt;p&gt;I'm also working on a real-world project powered by Veltix to prove it's production-ready. More details soon.&lt;/p&gt;

&lt;p&gt;Veltix is at 3,150+ downloads and growing. If you're curious, check it out on GitHub or PyPI!&lt;/p&gt;

&lt;p&gt;GitHub: github.com/NytroxDev/veltix&lt;/p&gt;

</description>
      <category>networking</category>
      <category>python</category>
      <category>rust</category>
      <category>socket</category>
    </item>
    <item>
      <title>Veltix v1.5.0 — Routing &amp; Auto-Reconnect</title>
      <dc:creator>Nytrox</dc:creator>
      <pubDate>Sun, 08 Mar 2026 23:13:37 +0000</pubDate>
      <link>https://dev.to/nytrox/veltix-v150-routing-auto-reconnect-5dk9</link>
      <guid>https://dev.to/nytrox/veltix-v150-routing-auto-reconnect-5dk9</guid>
      <description>&lt;p&gt;Veltix v1.5.0 is out! This release brings two major features: decorator-based message routing and automatic reconnection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Message Routing
&lt;/h2&gt;

&lt;p&gt;Instead of a single global &lt;code&gt;on_recv&lt;/code&gt; callback, you can now handle each message type with a dedicated handler:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;CHAT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MessageType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chat&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;STATUS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MessageType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nd"&gt;@server.route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CHAT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;on_chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;] &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nd"&gt;@server.route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;STATUS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;on_status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Status: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same thing on the client side:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@client.route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CHAT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;on_chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Server: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Routes take priority over &lt;code&gt;on_recv&lt;/code&gt; and run in the thread pool — slow handlers never block message reception.&lt;/p&gt;

&lt;h2&gt;
  
  
  Auto-Reconnect
&lt;/h2&gt;

&lt;p&gt;Set &lt;code&gt;retry&lt;/code&gt; in &lt;code&gt;ClientConfig&lt;/code&gt; and Veltix handles the rest:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ClientConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;server_addr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;127.0.0.1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;retry&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;retry_delay&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;on_disconnect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DisconnectState&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;permanent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Disconnected — &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Retrying... &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attempt&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;retry_max&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ON_DISCONNECT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;on_disconnect&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also cancel or force retries at any time:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stop_retry&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;   &lt;span class="c1"&gt;# cancel pending retries
&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;retry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# force a new attempt
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Other improvements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;PerformanceMode&lt;/code&gt;&lt;/strong&gt; — &lt;code&gt;LOW&lt;/code&gt; / &lt;code&gt;BALANCED&lt;/code&gt; / &lt;code&gt;HIGH&lt;/code&gt; presets to tune socket timeout and CPU usage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;BufferSize&lt;/code&gt;&lt;/strong&gt; — &lt;code&gt;SMALL&lt;/code&gt; / &lt;code&gt;MEDIUM&lt;/code&gt; / &lt;code&gt;LARGE&lt;/code&gt; / &lt;code&gt;HUGE&lt;/code&gt; presets for common buffer sizes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Breaking change
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;on_disconnect&lt;/code&gt; on the client now receives a &lt;code&gt;DisconnectState&lt;/code&gt; argument:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Before
&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ON_DISCONNECT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;...)&lt;/span&gt;

&lt;span class="c1"&gt;# After
&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ON_DISCONNECT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;state&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;📦 &lt;code&gt;pip install veltix&lt;/code&gt;&lt;br&gt;
📖 &lt;a href="https://nytroxdev.github.io/Veltix" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;&lt;br&gt;
⭐ &lt;a href="https://github.com/NytroxDev/Veltix" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>python</category>
      <category>tcp</category>
      <category>networking</category>
    </item>
    <item>
      <title>I built a Python library to make TCP networking as simple as Fastapi</title>
      <dc:creator>Nytrox</dc:creator>
      <pubDate>Thu, 05 Mar 2026 23:37:33 +0000</pubDate>
      <link>https://dev.to/nytrox/i-built-a-python-library-to-make-tcp-networking-as-simple-as-fastapi-4il6</link>
      <guid>https://dev.to/nytrox/i-built-a-python-library-to-make-tcp-networking-as-simple-as-fastapi-4il6</guid>
      <description>&lt;p&gt;TCP networking in Python is painful. You deal with raw sockets, manual buffering, thread management, message framing... it's a lot just to send a message between two programs.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Veltix&lt;/strong&gt; — an open-source Python library that makes real-time TCP networking simple and intuitive.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does it look like?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Server:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;veltix&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ServerConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Events&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MessageType&lt;/span&gt;

&lt;span class="n"&gt;MSG&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MessageType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chat&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ServerConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.0.0.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;on_message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Received: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&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;set_callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ON_RECV&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;on_message&lt;/span&gt;&lt;span class="p"&gt;)&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Client:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;veltix&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ClientConfig&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;MessageType&lt;/span&gt;

&lt;span class="n"&gt;MSG&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MessageType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chat&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ClientConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;server_addr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;127.0.0.1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_sender&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MSG&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello Server!&lt;/span&gt;&lt;span class="sh"&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. No raw sockets, no manual buffering, no thread management.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does Veltix handle for you?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TCP stream fragmentation&lt;/strong&gt; — messages are always received complete, even if split across multiple packets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Message integrity&lt;/strong&gt; — every message is SHA-256 hashed and verified automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PING/PONG&lt;/strong&gt; — built-in latency measurement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;send_and_wait()&lt;/strong&gt; — send a request and block until you get the matching response, like an HTTP request&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Broadcasting&lt;/strong&gt; — send to all connected clients in one call&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thread-safe callbacks&lt;/strong&gt; — your &lt;code&gt;on_recv&lt;/code&gt; runs in a thread pool, so slow callbacks never block message reception&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;I wanted to build real-time applications in Python without writing the same boilerplate networking code every time. Libraries like &lt;code&gt;asyncio&lt;/code&gt; are powerful but have a steep learning curve. I wanted something that felt as simple as FastAPI but for persistent TCP connections.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance
&lt;/h2&gt;

&lt;p&gt;Benchmarked on Python 3.14, Linux:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Average latency:&lt;/strong&gt; 0.012ms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Throughput:&lt;/strong&gt; 67,000+ msg/s burst&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;64 players @ 64 tick/s:&lt;/strong&gt; 100% message delivery&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Current status
&lt;/h2&gt;

&lt;p&gt;Veltix is at &lt;strong&gt;v1.3.0&lt;/strong&gt; with 2000+ downloads in 2 months. It's stable, tested, and ready to use.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;v1.4.0&lt;/strong&gt; — HELLO/HELLO_ACK handshake + thread pool for callbacks (coming soon)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v1.5.0&lt;/strong&gt; — decorator-based message routing (&lt;code&gt;@server.route(MY_TYPE)&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v1.6.0&lt;/strong&gt; — plugin system&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📦 PyPI: &lt;a href="https://pypi.org/project/veltix" rel="noopener noreferrer"&gt;https://pypi.org/project/veltix&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💻 GitHub: &lt;a href="https://github.com/NytroxDev/Veltix" rel="noopener noreferrer"&gt;https://github.com/NytroxDev/Veltix&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd love to hear what you think — feedback, questions, or ideas are very welcome!&lt;/p&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>networking</category>
    </item>
  </channel>
</rss>
