Skip to main content

Serial library with native sync and async support for Windows, Linux, macOS, and other platforms

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.

For more information, visit serialx's documentation: https://puddly.github.io/serialx/

Installation

pip install serialx

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

pip install serialx-compat

Usage

Serialx features a familiar synchronous API:

import serialx

with serialx.serial_for_url("/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&key=...",
    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, key="...", 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.5.0.tar.gz (537.5 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.5.0-py3-none-any.whl (60.4 kB view details)

Uploaded Python 3

serialx-1.5.0-cp310-abi3-win_arm64.whl (180.1 kB view details)

Uploaded CPython 3.10+Windows ARM64

serialx-1.5.0-cp310-abi3-win_amd64.whl (183.8 kB view details)

Uploaded CPython 3.10+Windows x86-64

serialx-1.5.0-cp310-abi3-win32.whl (177.8 kB view details)

Uploaded CPython 3.10+Windows x86

serialx-1.5.0-cp310-abi3-macosx_11_0_arm64.whl (276.4 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

serialx-1.5.0-cp310-abi3-macosx_10_12_x86_64.whl (278.8 kB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for serialx-1.5.0.tar.gz
Algorithm Hash digest
SHA256 72330a5f987d80f88ecc1584a288b3a8abf6e4de08ba7d17b6c5a2cd25f50fb2
MD5 1e10eaae2ea7538ff1b3666065b52935
BLAKE2b-256 890fd4785b09a62dbfa876bf9dc4e26e1ac8a03a97c198d7e2eef37f94f1ade2

See more details on using hashes here.

Provenance

The following attestation bundles were made for serialx-1.5.0.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.5.0-py3-none-any.whl.

File metadata

  • Download URL: serialx-1.5.0-py3-none-any.whl
  • Upload date:
  • Size: 60.4 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.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b292fff52f4ee10e6f6e9fb38619420b0503baead62e5802c57751c1c17b5ca5
MD5 d673f1ec51a355ad40cabdb4b5245c81
BLAKE2b-256 3c529fdacf14de98f1bdd38585ecfc10a2efa245968e02d03856cbf1f5824124

See more details on using hashes here.

Provenance

The following attestation bundles were made for serialx-1.5.0-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.5.0-cp310-abi3-win_arm64.whl.

File metadata

  • Download URL: serialx-1.5.0-cp310-abi3-win_arm64.whl
  • Upload date:
  • Size: 180.1 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.5.0-cp310-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 9614e0a25c4ff837713ebd40d6bef5d78008d054417aebfdd4631c94a771ff9d
MD5 e1b9f2cfd045fc9e5e6e094b16d3c04c
BLAKE2b-256 98cb0e8a39260d1371020f28d51e592fd478c1283d925c4024a201c34965730d

See more details on using hashes here.

Provenance

The following attestation bundles were made for serialx-1.5.0-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.5.0-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: serialx-1.5.0-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 183.8 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.5.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 0ccfb1697b0a06c09d05b81e87e27d914d436e748af4c84733e8d996f56105ee
MD5 8f9b3a521672390505125dd0f494a7c3
BLAKE2b-256 3e02c17f5fd8c028feb75aa102887fa91aec9b00dc7427eb6996400e4ec9559f

See more details on using hashes here.

Provenance

The following attestation bundles were made for serialx-1.5.0-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.5.0-cp310-abi3-win32.whl.

File metadata

  • Download URL: serialx-1.5.0-cp310-abi3-win32.whl
  • Upload date:
  • Size: 177.8 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.5.0-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 7cc7d8c897456b29d41a1fa4761b1f374a6fa36d567ec4f494ab2e98b6752849
MD5 14bdf2880c0ce5f55b1dda2026a5ed5a
BLAKE2b-256 3498bc3f93774840abbb9ab6369e3ad249d21f83d65db64c48d49c0b6189eac1

See more details on using hashes here.

Provenance

The following attestation bundles were made for serialx-1.5.0-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.5.0-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for serialx-1.5.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f6f5c1d1388147e92975103144a5235554f92e4d1c909acf6fa603aac7041fa8
MD5 266ce0fc986f7acfede473dde8924977
BLAKE2b-256 118bb5fdbbf69e64bcd666b80cf39186025302440c48c77bc18c3009a8a69571

See more details on using hashes here.

Provenance

The following attestation bundles were made for serialx-1.5.0-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.5.0-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for serialx-1.5.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d2a9acac95779c0e5d1e257acbee1d1e58df937b538db1ee73d2688403ec1291
MD5 54be22440f7e1236588c6e9b0d1a499e
BLAKE2b-256 1bd8d69499729556525ef99d94fb912dc2829361fc61d1449f5d7ebc7f266503

See more details on using hashes here.

Provenance

The following attestation bundles were made for serialx-1.5.0-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