Skip to main content

Veltix

Python TCP, without the boilerplate.

CI Lines of code PyPI Python License Downloads Security Policy AI Guide

v2.0.0 release notes · v3.0.0 release notes

Sync, thread-friendly, zero dependencies : TCP done right. Veltix handles framing, threading, handshake, routing, and reconnection so you can focus on your application logic.

Mature & tested - 638 tests · CI on Python 3.11-3.14 · Rust-powered hot path


Table of Contents


Why Veltix?

I wrote Veltix because I got tired of rewriting the same networking boilerplate every time I needed two programs to talk to each other.

Raw sockets are powerful, but they leave framing, request routing, handshakes, reconnection, and thread management entirely up to you. asyncio solves part of the problem, but adopting it often means committing your whole application to an async architecture. Twisted is incredibly capable, but it comes with its own programming model and can feel more like learning a framework than writing plain Python.

I wanted something different: a lightweight library that handles the repetitive networking work without forcing a particular architecture. Define your message types, register your handlers, and focus on your application instead of socket plumbing.

That's the idea behind Veltix: modern TCP communication with a simple, synchronous API, sensible defaults, and zero dependencies.


Raw Socket vs Veltix

Echo server with raw sockets (15 lines):

import socket
import threading


def handle_client(conn, addr):
    while True:
        data = conn.recv(1024)
        if not data:
            break
        conn.sendall(data)
    conn.close()


server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("0.0.0.0", 8080))
server.listen(5)

while True:
    conn, addr = server.accept()
    threading.Thread(target=handle_client, args=(conn, addr)).start()

Same thing with Veltix (7 lines):

from veltix import Server, ServerConfig, ClientInfo, Response, MessageType, Request

ECHO = MessageType("echo")
server = Server(ServerConfig(host="0.0.0.0", port=8080))


@server.route(ECHO)
def on_echo(client: ClientInfo, response: Response) -> None:
    server.send(Request(ECHO, response.content), client)


server.start()

No manual framing. No thread management. No boilerplate.

What you get out of the box:

  • Message framing: no more recv() loops and buffer handling
  • Protocol routing: @server.route(MY_TYPE) instead of if/elif chains
  • Automatic handshake: JSON raw-socket protocol with version compatibility
  • Built-in ping/pong: bidirectional latency measurement, zero config
  • Auto-reconnect: configurable retry with disconnect state callbacks
  • Message integrity: CRC32 verification on every message
  • Request/Response: send_and_wait() with timeout and correlation
  • Convenience send: server.send() / client.send() : no need to touch Sender directly
  • Content decoding: response.text and response.json : lazy, cached, zero-copy
  • Text & JSON payloads: Request(MY_TYPE, text="hello") / Request(MY_TYPE, json={"x": 1})
  • Thread-safe callbacks: slow handlers never block reception
  • Client tagging: attach metadata, broadcast to groups
  • Integrated logger: colorized, rotating, thread-safe
  • Structured event bus: powered by Avyra : subscribe to lifecycle, message, protocol, and error events
  • Rust-powered engine: framing / parse / compile in native Rust - with automatic pure-Python fallback

Designed for: LAN tools, multiplayer games, real-time dashboards, custom protocols, IPC, remote tooling, file transfer.


Installation

pip install veltix

Requirements: Python 3.11+, no runtime dependencies. Prebuilt wheels ship the compiled Rust engine (one cp311-abi3 wheel per platform); when the native component is unavailable, Veltix automatically falls back to the pure-Python implementation. Building from source requires a Rust toolchain (handled automatically by the maturin build backend).


Quick Start

Server:

from veltix import Server, ServerConfig, ClientInfo, Response, MessageType, Request

CHAT = MessageType("chat")

server = Server(ServerConfig(host="0.0.0.0", port=8080))


@server.route(CHAT)
def on_message(client: ClientInfo, response: Response) -> None:
    print(f"[{client.ip}] {response.text}")
    server.broadcast(Request(CHAT, response.text))


server.start()

input("Press Enter to stop...")
server.close_all()

Client:

from veltix import Client, ClientConfig, Response, MessageType, Request

CHAT = MessageType("chat")

client = Client(ClientConfig(server_addr="127.0.0.1", port=8080))


@client.route(CHAT)
def on_message(response: Response) -> None:
    print(f"Server: {response.text}")


client.connect()

client.send(Request(CHAT, text="Hello Server!"))
input("Press Enter to disconnect...")
client.disconnect()
python server.py
python client.py  # In a separate terminal

Key Features

# Content decoding (lazy, cached)
response.text  # UTF-8 string
response.json  # parsed JSON
response.is_json  # bool, no exception

# Text & JSON payloads (no manual encoding)
Request(MY_TYPE, text="hello")
Request(MY_TYPE, json={"key": "value"})

# Request/Response correlation
response = client.send_and_wait(Request(MY_TYPE, b"data"), timeout=3.0)

# Server convenience
server.send(request, client)
server.broadcast(request)
server.broadcast(request, except_clients=[client])
server.wait_until_closed()
server.restart()

# Client convenience
client.send(request)
client.send_and_wait(request, timeout=5.0)
client.ping_server()
client.wait_until_closed()
client.stop_retry()

# Client tags
client.add_tag("channel", "general")
targets = server.get_clients_by_tag("channel", "general")

# Rust engine switch (captured at each Server/Client initialization:
# construction, server.restart(), client reconnection)
disable_rust()  # force the pure-Python engine
enable_rust()   # re-enable the compiled Rust engine (when installed)

⚡ Rust-powered hot path

Veltix 3.0.0 introduces a Rust-powered hot path for message parsing, compilation, and buffering.

Benchmarks against the Python fallback:

  • +30% throughput under 100-client stress (138k msg/s)
  • -31% P99 latency
  • -49% steadier FPS ticks (tick stdev 0.175 ms vs 0.343 ms)
  • +20% burst send throughput

The engine is picked at runtime: disable_rust() forces the pure-Python fallback, enable_rust() re-enables the compiled engine (see veltix.network._rust.rust_enabled()). The choice is captured when a Server / Client is (re)initialized - construction, server.restart(), client reconnection.

Results are workload-dependent and were measured on Veltix 3.0.0 (Python 3.14.7, loopback).


Backend Comparison: Threading vs Async

Veltix lets you switch between two socket backends via SocketCore. Pick the one that fits your use case.

Criteria Threading (SocketCore.THREADING) Async (SocketCore.ASYNC)
Model One thread per client Single-threaded event loop (selectors)
Best for Simple apps, < 50 clients, predictable loads High concurrency, 100+ clients, variable loads
Concurrent stress ~51k msg/s ~108k msg/s (2.1x)
Idle memory 60.8 KB server + 111 KB per client ≈0 server (noise floor) + ~80 KB per client
Latency 0.041 ms 0.050 ms
Debugging Straightforward (stack traces = threads) Harder (event loop internals)

Quick rule of thumb:

  • Few clients, simple logic, want easy debugging? Use THREADING.
  • Many clients, high throughput, memory-conscious? Use ASYNC.
from veltix import Server, ServerConfig, SocketCore

server = Server(ServerConfig(socket_core=SocketCore.THREADING))  # or .ASYNC

Performance

Benchmarked on Python 3.14.7 : 12-core CPU, 30.5 GB RAM, Linux (loopback). On v3.0.0+ the message hot path runs in Rust - see Rust-powered hot path for the Rust engine vs pure-Python fallback numbers.

Metric Threading Async
Concurrent stress (100 clients) 51,505 msg/s 108,084 msg/s (2.1x)
Burst throughput 64,158 / 48,558 60,358 / 46,351
Idle server memory 60.8 KB ≈0 (noise floor)
Per client memory (avg) 111 KB ≈80 KB (noisy)
Average latency 0.041 ms 0.050 ms
FPS simulation (64 players @ 64Hz) 4,489 msg/s 4,490 msg/s

Full benchmark details, methodology, and how to run them yourself : PERFORMANCE.md


When NOT to use Veltix

Veltix is great for TCP, but not every problem is a TCP problem.

  • HTTP/REST APIs: use Flask, FastAPI, or Django REST Framework
  • Browser clients: Veltix speaks raw TCP, not WebSocket; use websockets or Socket.IO
  • Async-first codebases: Veltix is sync by design; use asyncio directly if your whole project is async
  • Ultra high throughput (>100k msg/s per connection): consider a compiled language for the hot path
  • Single request-response: if you just need to fetch something once, requests or urllib is simpler

Everything else? Veltix has you covered.


Comparison

Feature Veltix socket asyncio Twisted
High-level API ✓ ✗ ~ ✗
Zero dependencies ✓ ✓ ✓ ✗
No async required ✓ ✓ ✗ ✗
Message framing ✓ ✗ ✗ ~
Message integrity ✓ ✗ ✗ ✗
Automatic handshake ✓ ✗ ✗ ✗
Request/Response ✓ ✗ ~ ✓
Message routing ✓ ✗ ✗ ~
Auto-reconnect ✓ ✗ ~ ✓
Non-blocking callbacks ✓ ✗ ✓ ✓
Built-in ping/pong ✓ ✗ ✗ ✗
Client tags ✓ ✗ ✗ ✗
Swappable backends ✓ ✗ ✗ ✗
Integrated logger ✓ ✗ ~ ✓
Content decoding ✓ ✗ ✗ ✗

✓ Built-in    ~ Possible but requires manual setup    ✗ Not provided (you implement it yourself)


Built with Veltix

Projects using Veltix in production:

  • A new project is under construction. It will be based on Veltix to replace the abandoned Nexo (LAN file transfer tool).

Built something with Veltix ? Open a PR or start a discussion to add your project.


In Development

What is being worked on right now:

  • Handshake hardening: more robust handshake handling, from per-step timeouts to cleaner version negotiation and failure recovery.
  • Performance optimization: now that framing/parse/compile run in Rust, pushing the remaining hot-path overhead further. See PERFORMANCE.md.

Experimental work lands on dedicated branches and only merges once fully validated.


Documentation


Contributing

Contributions are welcome. Please read CONTRIBUTING.md before submitting a pull request.


License

MIT License : see LICENSE for details.


Metadata

Release files for veltix 3.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for veltix 3.2.0
File Size Uploaded
veltix-3.2.0.tar.gz 93.5 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for veltix 3.2.0
File
veltix-3.2.0-cp311-abi3-win_amd64.whl CPython 3.11 abi3 Windows x86-64 Details
veltix-3.2.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 abi3 Linux glibc 2.17+ x86-64 Details
veltix-3.2.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 abi3 Linux glibc 2.17+ ARM64 Details
veltix-3.2.0-cp311-abi3-macosx_11_0_arm64.whl CPython 3.11 abi3 macOS 11.0+ ARM64 Details
veltix-3.2.0-cp311-abi3-macosx_10_12_x86_64.whl CPython 3.11 abi3 macOS 10.12+ x86-64 Details

Total release size: 1.9 MB

Release files / veltix-3.2.0.tar.gz

Download URL veltix-3.2.0.tar.gz
Size 93.5 kB
Tags Source
SHA-256 checksum
How to use checksums
1f773b33b86dfb31ba6312544cee4803d9cabb19a1a5bf6ac00f0bdc26d26312
BLAKE2b-256 checksum
How to use checksums
9ed754f23e1723c18143797715182a10348837d9fc6ef18c63f77532f1e68636
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.

Transparency log

Release files / veltix-3.2.0-cp311-abi3-win_amd64.whl

Download URL veltix-3.2.0-cp311-abi3-win_amd64.whl
Size 268.1 kB
Tags CPython 3.11 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
7dcd81be7db24482dd927cc8e9e3216fc02da3ab76bd29739bd9c4b94d7e9140
BLAKE2b-256 checksum
How to use checksums
4c3c37b2a8a6b5a2ba5495eda0a825a187a7aa2f3b3dd90b8e619b6a27f635c3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.

Transparency log

Release files / veltix-3.2.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL veltix-3.2.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 412.7 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
fef58a7088681537d01fd63d89ebbbabc8e667051712a02aa0a3d156d067eba2
BLAKE2b-256 checksum
How to use checksums
b8506b25120c8d2bf6ff3430e55ceaaa411e68216bb9680385b28d89dfdacbbc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.

Transparency log

Release files / veltix-3.2.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL veltix-3.2.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 408.1 kB
Tags CPython 3.11 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
f44e3bb5ece3f6f88df7cf6ef1d5cfcb007b2abf64f8cf26bb07b9c1f938cd6f
BLAKE2b-256 checksum
How to use checksums
1aace84f4a8b53138cb6c6d618b1df67ec994edff94436d331c96e62e51e3fc8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.

Transparency log

Release files / veltix-3.2.0-cp311-abi3-macosx_11_0_arm64.whl

Download URL veltix-3.2.0-cp311-abi3-macosx_11_0_arm64.whl
Size 372.4 kB
Tags CPython 3.11 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
3cb465ddcc3a310dba301ae0a1443a1242238fbf564954610b298bc429fa27f2
BLAKE2b-256 checksum
How to use checksums
0f01f5f19a3e09bbc86ceb2d61cb307434ebf6ecc2d7b60bbcc3cd10145656b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.

Transparency log

Release files / veltix-3.2.0-cp311-abi3-macosx_10_12_x86_64.whl

Download URL veltix-3.2.0-cp311-abi3-macosx_10_12_x86_64.whl
Size 373.4 kB
Tags CPython 3.11 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
3b589fd5ec2d1741821004a98ef8cfe2ba2e06cb2ae95d54c0f3fa6c7783155c
BLAKE2b-256 checksum
How to use checksums
cd65466e8eae40aa99a2f1a6babde5a5a70a177f590b63f7c22f3ababea02c73
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

3.2.0 This release

6 release files

3.1.1

6 release files

3.1.0

6 release files

3.0.2

6 release files

3.0.1

6 release files

3.0.0

6 release files

2.0.3

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.9.0

2 release files

1.8.1

1 release file

1.8.0

2 release files

1.7.5

1 release file

1.7.3

2 release files

1.7.2

2 release files

1.7.1

2 release files

1.7.0

2 release files

1.6.9

2 release files

1.6.8

2 release files

1.6.6

2 release files

1.6.5

2 release files

1.6.4

2 release files

1.6.3

2 release files

1.6.2

2 release files

1.6.1

2 release files

1.5.0

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.2

2 release files

1.1.0

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page