Skip to main content

The networking library you always wanted

Project description

Veltix

The networking library you always wanted

PyPI Python License

โœจ Features

  • ๐Ÿš€ Dead simple API - Get started in minutes, not hours
  • ๐Ÿ”’ Message integrity - Built-in SHA256 hash verification
  • ๐Ÿ“ฆ Custom binary protocol - Lightweight and efficient
  • ๐Ÿชถ Zero dependencies - Pure Python stdlib only
  • ๐Ÿ”Œ Extensible - Custom message types with plugin support
  • โšก Multi-threaded - Handle multiple clients automatically
  • ๐Ÿ”„ Request/Response pattern - Built-in send_and_wait with timeout support
  • ๐Ÿ“ก Built-in ping/pong - Automatic latency measurement

๐Ÿ“– Why Veltix?

Existing Python networking libraries are either too low-level (raw sockets) or too complex (Twisted, asyncio). Veltix fills the gap with a simple, modern API that handles the boring parts for you.

Built by a passionate developer who wanted networking to be easy, Veltix focuses on developer experience without sacrificing power or performance.

๐Ÿš€ Installation

pip install veltix

Requirements: Python 3.10+

That's it! Zero dependencies, ready to use.

โšก Quick Start

Simple Chat Server

Server (server.py):

from veltix import Server, ServerConfig, MessageType, Request, Binding

# Define message type
CHAT = MessageType(code=200, name="chat")

# Configure server
config = ServerConfig(host="0.0.0.0", port=8080)
server = Server(config)
sender = server.get_sender()


def on_message(client, response):
    print(f"[{client.addr[0]}] {response.content.decode()}")
    # Broadcast to all
    reply = Request(CHAT, f"Echo: {response.content.decode()}".encode())
    sender.broadcast(reply, server.get_all_clients_sockets())


server.bind(Binding.ON_RECV, on_message)
server.start()

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

Client (client.py):

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

CHAT = MessageType(code=200, name="chat")

config = ClientConfig(server_addr="127.0.0.1", port=8080)
client = Client(config)
sender = client.get_sender()


def on_message(response):
    print(f"Server: {response.content.decode()}")


client.bind(Binding.ON_RECV, on_message)
client.connect()

# Send message
msg = Request(CHAT, b"Hello Server!")
sender.send(msg)

input("Press Enter to disconnect...")
client.disconnect()

Run:

python server.py
python client.py  # In another terminal

๐Ÿ”„ Request/Response Pattern

Veltix supports synchronous request-response communication with send_and_wait():

Client Example

from veltix import Client, ClientConfig, MessageType, Request

# Setup
ECHO = MessageType(code=201, name="echo")
client = Client(ClientConfig(server_addr="127.0.0.1", port=8080))
client.connect()

# Send and wait for response
request = Request(ECHO, b"Hello Server!")
response = client.send_and_wait(request, timeout=5.0)

if response:
    print(f"Got response: {response.content.decode()}")
    print(f"Latency: {response.latency}ms")
else:
    print("Timeout or error")

client.disconnect()

Server Example

from veltix import Server, ServerConfig, MessageType, Request, Binding

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


def on_message(client, response):
    # Echo back with same request_id
    reply = Request(response.type, response.content, request_id=response.request_id)
    server.get_sender().send(reply, client=client.conn)


server.bind(Binding.ON_RECV, on_message)
server.start()

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

Key points:

  • Use the same request_id in the response to match the waiting request
  • The client automatically receives the response when IDs match
  • Built-in timeout support to avoid infinite waiting

๐Ÿ“ก Built-in Ping/Pong

Veltix includes automatic ping/pong functionality for measuring latency:

Client to Server Ping

from veltix import Client, ClientConfig

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

# Ping the server
latency = client.ping_server(timeout=2.0)

if latency:
    print(f"Server latency: {latency}ms")
else:
    print("Ping timeout")

client.disconnect()

Server to Client Ping

from veltix import Server, ServerConfig, Binding

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


def on_connect(client):
    # Ping client when they connect
    latency = server.ping_client(client, timeout=2.0)
    if latency:
        print(f"Client {client.addr} latency: {latency}ms")


server.bind(Binding.ON_CONNECT, on_connect)
server.start()

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

Features:

  • Automatic PING/PONG handling (no manual implementation needed)
  • Returns latency in milliseconds
  • Built-in timeout support
  • Works bidirectionally (client โ†” server)

๐Ÿ“ฆ Examples

More examples in examples/:

  • Echo Server - Simple echo implementation with send_and_wait
  • Chat Server - Simple Chat in < 80 lines
  • Ping Example - Latency measurement demonstrations

๐ŸŽฏ Advanced Features

Custom Message Types

from veltix import MessageType

# System messages (0-199)
PING = MessageType(0, "ping", "System ping message")

# User messages (200-499)
CHAT = MessageType(200, "chat", "Chat message")
FILE_TRANSFER = MessageType(201, "file", "File transfer")

# Plugin messages (500+)
CUSTOM_PLUGIN = MessageType(500, "plugin", "Custom plugin message")

Event Callbacks

from veltix import Server, Binding

server = Server(config)

# Bind to connection event
server.bind(Binding.ON_CONNECT, lambda client: print(f"Client connected: {client.addr}"))

# Bind to message event
server.bind(Binding.ON_RECV, lambda client, msg: print(f"Message from {client.addr}"))

Broadcasting

# Broadcast to all connected clients
message = Request(CHAT, b"Server announcement!")
sender.broadcast(message, server.get_all_clients_sockets())

๐Ÿ“Š Comparison

Feature Veltix socket asyncio Twisted
Easy API โœ… โŒ โš ๏ธ โŒ
Zero deps โœ… โœ… โœ… โŒ
Custom protocol โœ… โŒ โŒ โš ๏ธ
Message integrity โœ… โŒ โŒ โŒ
Multi-threading โœ… โŒ โŒ โœ…
Request/Response โœ… โŒ โš ๏ธ โœ…
Built-in ping/pong โœ… โŒ โŒ โŒ

๐Ÿ—บ๏ธ Roadmap

v1.1.2 - Request/Response (February 2026) โœ…

  • Request/Response pattern with send_and_wait
  • Built-in ping/pong functionality
  • Automatic latency measurement
  • UUID-based request tracking
  • Status: RELEASED

v2.0.0 - Security (Summer 2026)

  • End-to-end encryption (ChaCha20 + X25519 + Ed25519)
  • Automatic key exchange
  • Perfect forward secrecy
  • Status: PLANNED

v3.0.0 - Performance (Fall 2026)

  • Rust core via PyO3
  • 10-100x speed improvements
  • Advanced optimizations
  • Status: RESEARCH

v4.0.0+ (2027+)

  • UDP support
  • Plugin ecosystem
  • Compression
  • WebSocket bridge

๐Ÿค Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

Quick ways to help:

  • โญ Star the project
  • ๐Ÿ› Report bugs
  • ๐Ÿ“š Improve documentation
  • ๐Ÿ’ป Submit pull requests
  • ๐Ÿ’ฌ Join discussions

๐Ÿ™ Contributors

Core Team

  • Nytrox - Creator & Lead Developer

Community Heroes

Thank you to everyone who has contributed through code, documentation, bug reports, and support!

Want to be listed here? Check out our Contributing guide!

๐Ÿ“„ License

MIT License - see LICENSE file for details.

๐Ÿ”— Links


Built with โค๏ธ by Nytrox

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

veltix-1.1.2.tar.gz (11.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

veltix-1.1.2-py3-none-any.whl (6.0 kB view details)

Uploaded Python 3

File details

Details for the file veltix-1.1.2.tar.gz.

File metadata

  • Download URL: veltix-1.1.2.tar.gz
  • Upload date:
  • Size: 11.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for veltix-1.1.2.tar.gz
Algorithm Hash digest
SHA256 d618b136d9565871a889cce4714df5efa5b67e9d02664054832f4f5d517413bd
MD5 7e5aba62a0ec314a42c2e5ad6ec8549a
BLAKE2b-256 ee1cec11035502bc542c7c57c0c8d502f92afe50e11975512b2bdcd6529d3dca

See more details on using hashes here.

File details

Details for the file veltix-1.1.2-py3-none-any.whl.

File metadata

  • Download URL: veltix-1.1.2-py3-none-any.whl
  • Upload date:
  • Size: 6.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for veltix-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 614dc6aafe3cbae89f84865edff358dd29f2b5d877710ffd5929cafa1b161324
MD5 66a2ec20d2a72c0e6301fa11bfdfad4c
BLAKE2b-256 22bfdc43c95c78f962bfe530dc493a1a75a067913afee2f1bf67cb0317a548ae

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page