Skip to main content

Serial library with native async support for Windows and POSIX

Project description

Introduction

Serialx is a no-compromise serial communication library for Python targeting common platforms such as Linux (POSIX), macOS, and Windows. It provides both synchronous and native asynchronous APIs for all platforms.

Installation

pip install serialx

For drop-in import compatibility (serial, serial_asyncio, serial_asyncio_fast) without runtime patching, install:

pip install serialx-compat

Usage

Serialx features a pyserial and pyserial-asyncio compatibility layer for easy testing. As early as possible, run serialx.patch_pyserial() and it will provide API-compatible replacements.

import serialx
serialx.patch_pyserial()

# These will now use serialx
import serial
import serial_asyncio

Serialx features a familiar synchronous API:

import serialx

with serialx.Serial("/dev/serial/by-id/port", baudrate=115200) as serial:
    data = serial.readexactly(5)
    serial.write(b"test")

    serial.set_modem_pins(rts=True, dtr=True)
    pins = serial.get_modem_pins()
    assert pins.rts is serialx.PinState.HIGH
    assert pins.dtr is serialx.PinState.HIGH

A high-level asynchronous serial (reader, writer) pair:

import asyncio
import contextlib

import serialx

async def main():
	reader, writer = await serialx.open_serial_connection("/dev/serial/by-id/port", baudrate=115200)

	with contextlib.closing(writer):
	    data = await reader.readexactly(5)
	    writer.write(b"test")
	    await writer.drain()

And a low-level asynchronous serial transport:

import asyncio
import serialx

async def main():
	loop = asyncio.get_running_loop()
	protocol = YourProtocol()

	transport, protocol = await serialx.create_serial_connection(
	    loop,
	    lambda: protocol,
	    url="/dev/serial/by-id/port",
	    baudrate=115200
	)

	await transport.set_modem_pins(rts=True, dtr=True)

ESPHome serial proxy

Serialx can communicate with serial devices exposed by ESPHome.

It can either create the API instance directly, for simplicity:

from serialx import open_serial_connection

reader, writer = await open_serial_connection(
    url="esphome://192.168.1.42:6053/?port_name=Zigbee&noise_psk=...",
    baudrate=115200,
)

Or reuse an existing API instance, for efficiency:

from aioesphomeapi import APIClient
from serialx import open_serial_connection
from serialx.platforms.serial_esphome import ESPHomeSerialTransport

# An external API instance
api = APIClient(address="192.168.1.42", port=6053, noise_psk="...", password=None)
await api.connect(login=True)

reader, writer = await open_serial_connection(
    url=None,
    transport_cls=ESPHomeSerialTransport,
    api=api,
    port_name="Zigbee",
    baudrate=115200,
)

Development

All development dependencies are listed in pyproject.toml. To install them, use:

uv pip install '.[dev]'

On macOS and Windows, a Rust toolchain is required to build the native serial port enumeration extension. Install Rust via rustup.

Set up pre-commit hooks with pre-commit install. Your code will then be type checked and auto-formatted when you run git commit. You can do this on-demand with pre-commit run.

Serialx relies on automated testing. CI runs tests using both socat virtual PTYs (Linux/macOS) and socket-based serial pairs. To also test with physical adapter pairs, pass CLI flags to pytest:

pytest --adapter-pair=/dev/serial/by-id/left1:/dev/serial/by-id/right1 \
       --adapter-pair=/dev/serial/by-id/left2:/dev/serial/by-id/right2

By default, tests run in parallel. You can disable this by passing -n 0 to pytest.

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

serialx-1.2.1.tar.gz (511.3 kB view details)

Uploaded Source

Built Distributions

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

serialx-1.2.1-py3-none-any.whl (56.6 kB view details)

Uploaded Python 3

serialx-1.2.1-cp310-abi3-win_arm64.whl (175.6 kB view details)

Uploaded CPython 3.10+Windows ARM64

serialx-1.2.1-cp310-abi3-win_amd64.whl (180.1 kB view details)

Uploaded CPython 3.10+Windows x86-64

serialx-1.2.1-cp310-abi3-win32.whl (173.9 kB view details)

Uploaded CPython 3.10+Windows x86

serialx-1.2.1-cp310-abi3-macosx_11_0_arm64.whl (275.2 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

serialx-1.2.1-cp310-abi3-macosx_10_12_x86_64.whl (279.6 kB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file serialx-1.2.1.tar.gz.

File metadata

  • Download URL: serialx-1.2.1.tar.gz
  • Upload date:
  • Size: 511.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for serialx-1.2.1.tar.gz
Algorithm Hash digest
SHA256 e3327cecf6dc562aeb9ac927d94ad6933832b2c4936ae60ef973358a7c036190
MD5 540db500528e5425d7b7479901b0a5bf
BLAKE2b-256 9ee9a739dbff589ad8062e09af0def3d0af8cb3247d55296dec7a79189863033

See more details on using hashes here.

Provenance

The following attestation bundles were made for serialx-1.2.1.tar.gz:

Publisher: publish-to-pypi.yml on puddly/serialx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file serialx-1.2.1-py3-none-any.whl.

File metadata

  • Download URL: serialx-1.2.1-py3-none-any.whl
  • Upload date:
  • Size: 56.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for serialx-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6b57ec7d00a677dff09dc37a595b50fd0e51d083c6617e0752c2d04620799b2e
MD5 c02fb5bce6eecc9798bea7e9b42d5200
BLAKE2b-256 fea9776e6f73733434bece39dbf72982471e51efe01541b187f680a36b5f775f

See more details on using hashes here.

Provenance

The following attestation bundles were made for serialx-1.2.1-py3-none-any.whl:

Publisher: publish-to-pypi.yml on puddly/serialx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file serialx-1.2.1-cp310-abi3-win_arm64.whl.

File metadata

  • Download URL: serialx-1.2.1-cp310-abi3-win_arm64.whl
  • Upload date:
  • Size: 175.6 kB
  • Tags: CPython 3.10+, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for serialx-1.2.1-cp310-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 7d5f6f5e3fc2de03629bd831d44709d693df7af8f45befaaadc2452e50856e64
MD5 ce345af67faf417e8dd6866892ca3dc6
BLAKE2b-256 4f954f518156418dd00fb3e1b41b001b5031ef9c0a2e4d814d5e0b277073c681

See more details on using hashes here.

Provenance

The following attestation bundles were made for serialx-1.2.1-cp310-abi3-win_arm64.whl:

Publisher: publish-to-pypi.yml on puddly/serialx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file serialx-1.2.1-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: serialx-1.2.1-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 180.1 kB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for serialx-1.2.1-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 6f888ff1ba619db40eae03070cae6e7e872b34adf4e4b797ef12fee4af300015
MD5 ecb13b692848fcc6590c22233473e4f9
BLAKE2b-256 4c409aabf63cb9f4635999c55d0461c40064ce5288bb4494a63a04a9cab3a2ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for serialx-1.2.1-cp310-abi3-win_amd64.whl:

Publisher: publish-to-pypi.yml on puddly/serialx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file serialx-1.2.1-cp310-abi3-win32.whl.

File metadata

  • Download URL: serialx-1.2.1-cp310-abi3-win32.whl
  • Upload date:
  • Size: 173.9 kB
  • Tags: CPython 3.10+, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for serialx-1.2.1-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 e52241dc6f8e08a382bae5988ceb3261bf66d6bb95719ef60a7fc1884ca52425
MD5 01227f08896f3709046c1d45cbdeec21
BLAKE2b-256 a9dac7480e2a543be0fc80b1fec84a4e4254943d74e20506cb0eb6053cd5e937

See more details on using hashes here.

Provenance

The following attestation bundles were made for serialx-1.2.1-cp310-abi3-win32.whl:

Publisher: publish-to-pypi.yml on puddly/serialx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file serialx-1.2.1-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for serialx-1.2.1-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2879d16570cb1089b9b818768abe1f7358bb09a55bdbe92c57e8301fccccc032
MD5 4f4b9966e9517a8456caa8267afdc638
BLAKE2b-256 ad70eb0cbf108e221302434bcc6446921b6e79ec39a7d1dad1614d8bacd7928c

See more details on using hashes here.

Provenance

The following attestation bundles were made for serialx-1.2.1-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: publish-to-pypi.yml on puddly/serialx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file serialx-1.2.1-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for serialx-1.2.1-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 950a4ba1ba9764ff47dd52a445d6bf5de40529716fb6432368d376058d59f11a
MD5 78ca773d8c8c3e69cad827ac06b2cc98
BLAKE2b-256 0d65dbef16f7ee791f489733e5117549954eef8ac30379fb51d2dce5b3db5087

See more details on using hashes here.

Provenance

The following attestation bundles were made for serialx-1.2.1-cp310-abi3-macosx_10_12_x86_64.whl:

Publisher: publish-to-pypi.yml on puddly/serialx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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