serialx
Serial library with native sync and async support for Windows, Linux, macOS, and other platforms
Decision gist · record as of 2026-08-14
Yes. Serialx is actively maintained, has no security vulnerabilities, low install friction, and offers a modern dual sync/async API for serial communication across all major platforms. It is suitable for new projects and for migrating from older serial libraries. The permissive Apache-2.0 license poses no restrictions.AI-flagged interpretation of the facts on this page — verify before relying
Before you install
- Requires Python 3.10 or later; on macOS and Windows, a Rust toolchain is needed to build the native serial port enumeration extension.
- Low install friction with a pure-wheel distribution.
- Active maintenance with a recent release 63 days ago.
License · maintenance · safety
Apache-2.0 (permissive) — Licensed under Apache-2.0 (permissive), allowing use in both open-source and proprietary projects with minimal restrictions beyond attribution and liability disclaimers.
last release 2026-06-12 (63 days) · last repo commit 2026-08-03 · 29 stars
0 known vulnerabilities (OSV.dev, 2026-08-14) · 155,142 downloads/mo, #10,831 on PyPI
Alternatives
Verify before relying
import serialx
with serialx.serial_for_url("/dev/serial/by-id/port", baudrate=115200) as serial:
data = serial.readexactly(5)
serial.write(b"test")- Whether the Rust toolchain requirement applies to end-users installing from wheels or only to developers building from source.
- Performance characteristics and throughput limits compared to other serial libraries in common use.
- Stability and maturity level given the package's first release was in 2025-11-24.
What it is and what it does
Serialx is a cross-platform serial communication library that unifies synchronous and asynchronous APIs for Python on Linux, macOS, and Windows. It offers multiple usage patterns: a familiar synchronous context-manager interface, a native async equivalent, asyncio StreamReader/StreamWriter pairs, and low-level protocol transports for advanced consumers. The library handles modem pin state queries and control, and integrates with ESPHome for communicating with remote serial devices through the ESPHome API.
The package targets developers who need reliable serial I/O without platform-specific code paths. Its three runtime dependencies (typing-extensions, async-timeout, pywin32) are lightweight and widely maintained. The library is actively maintained with recent releases and no known security vulnerabilities.
Use it for
- Building cross-platform embedded device communication tools that work identically on Windows, macOS, and Linux without conditional imports.
- Integrating ESPHome-exposed serial devices into Python applications via the serialx ESPHome transport layer.
- Migrating legacy pyserial code to async/await patterns while maintaining synchronous fallback support.
- Implementing protocol handlers that need low-level asyncio transport control for serial devices.
- Controlling modem pins (RTS, DTR) on serial devices for handshake and reset sequences.
Worth the install?
AI-flagged interpretation of the facts on this page. Verify before relying on it.
Yes.
Serialx is actively maintained, has no security vulnerabilities, low install friction, and offers a modern dual sync/async API for serial communication across all major platforms. It is suitable for new projects and for migrating from older serial libraries. The permissive Apache-2.0 license poses no restrictions.
Install
serialx on PyPI
Before you install
Low install friction with a pure-wheel distribution. Active maintenance with a recent release 63 days ago. Requires Python 3.10 or later and depends on typing-extensions, async-timeout, and pywin32 (Windows-specific).
Requires Python 3.10 or later; on macOS and Windows, a Rust toolchain is needed to build the native serial port enumeration extension.
License in practice
Licensed under Apache-2.0 (permissive), allowing use in both open-source and proprietary projects with minimal restrictions beyond attribution and liability disclaimers.
Quickstart
import serialx
with serialx.serial_for_url("/dev/serial/by-id/port", baudrate=115200) as serial:
data = serial.readexactly(5)
serial.write(b"test")
Verify before relying
- Whether the Rust toolchain requirement applies to end-users installing from wheels or only to developers building from source.
- Performance characteristics and throughput limits compared to other serial libraries in common use.
- Stability and maturity level given the package's first release was in 2025-11-24.
Package facts
| License | Apache-2.0 permissive |
| Python support | Supports the current Python release >=3.10 |
| Install friction | Low. Pure-Python wheel |
| Runtime dependencies | 3 packagestyping-extensionsasync-timeoutpywin32 |
| Maintenance | Actively maintained 63 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 155,142 / month, #10,831 on PyPI 30-day window, as of 2026-08-14 |
| Known vulnerabilities | None known OSV.dev, checked 2026-08-14 |
Evidence: serialx-1.8.2-py3-none-any.whl
Tags
Let your AI agent find packages like this
Example. Real query, live index.
You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.
wish › “async serial library”
- serialxSerialx provides synchronous and native asynchronous APIs for serial…
- pyserial-asyncio-fastProvides async I/O support for serial port communication in Python,…
- pyserial-asyncioAdds async/await support to pyserial for non-blocking serial port…
Give your agent the search over MCP, or paste the wish link into any chat.
More Networking packages
h11 is a pure-Python HTTP/1.1 protocol implementation that handles parsing and serializing HTTP messages without any built-in I/O, letting you integrate it with any network layer you choose.
psutil retrieves real-time information about running processes and system resources (CPU, memory, disks, network, sensors) across multiple operating systems, enabling system monitoring, process profiling, and resource management.
pyOpenSSL wraps OpenSSL's SSL/TLS functionality for Python, providing high-level connection objects and certificate handling through a Python-friendly interface around OpenSSL's cryptographic operations.
uvloop is a drop-in replacement for Python's built-in asyncio event loop, implemented in Cython and using libuv, that accelerates async I/O operations.
execnet lets you spawn and communicate with Python interpreters across local processes, remote hosts, and different platforms, using a simple API for task distribution and inter-process messaging.
However, the aging maintenance status (275 days since last release) means you should verify it meets your concurrency and performance needs before committing to a…
PyZMQ provides Python bindings for ZeroMQ (ØMQ), a lightweight messaging library that enables fast, asynchronous communication between distributed processes and applications.
See also aioesphomeapi · aioserial · pyserial-asyncio · pexpect-serial · async-modbus · Adax-local · pyserial-asyncio-fast · xmodem · binho-host-adapter · pymodbus