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.6.0.tar.gz (540.9 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.6.0-py3-none-any.whl (60.4 kB view details)

Uploaded Python 3

serialx-1.6.0-cp310-abi3-win_arm64.whl (180.2 kB view details)

Uploaded CPython 3.10+Windows ARM64

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

Uploaded CPython 3.10+Windows x86-64

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

Uploaded CPython 3.10+Windows x86

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

Uploaded CPython 3.10+macOS 11.0+ ARM64

serialx-1.6.0-cp310-abi3-macosx_10_12_x86_64.whl (278.9 kB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for serialx-1.6.0.tar.gz
Algorithm Hash digest
SHA256 621aa9b90f876e204e1631605f867fe89c7be16d3c3d94bbf346ecf83904b0a1
MD5 681bb1807cb203370880db4c6ea0fad0
BLAKE2b-256 f3dd343751997d8f8a8c02a8a54221b9e70612b20e963c9ec20b173de3d276bf

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: serialx-1.6.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.13

File hashes

Hashes for serialx-1.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b092aebbfeffb72330c3a9f5e22661afc271f0836dbaf2ff8cc41433b69b9c4a
MD5 b2168626ad4dda0e04ecbd2b59934010
BLAKE2b-256 eb0058a8fd1c1dacb9dbec262ab48e462b59fbb4a52f220168ea49c0f64d6d14

See more details on using hashes here.

Provenance

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

File metadata

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

File hashes

Hashes for serialx-1.6.0-cp310-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 c3de9b8d6569ddb559f486aeccd9b8ad8752b67cc9ffcabde065bd7854f5b07c
MD5 9696515083e2c30dec2d14e31d8d2b6a
BLAKE2b-256 10590cd94d98952121c45977f5ce75bf05e84d123590687cfc724dc63a501ba4

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: serialx-1.6.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.13

File hashes

Hashes for serialx-1.6.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 8667896ec30c3712589107fb19708e3b875e64987775d42026f9e5bc1cdbab39
MD5 81bec0c4dd051b94f4303a1cb3582bd3
BLAKE2b-256 8f6aaff23234de7ce14efaf481b996af27413f1f6908394e39bb4ebaefe10170

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: serialx-1.6.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.13

File hashes

Hashes for serialx-1.6.0-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 99fff8c9684f257e368220a311c7b933a423afeca5f7ddc531472c6ea799d857
MD5 4c96bfb5881fe3bd24dff8bbffa43614
BLAKE2b-256 f99cf3ca1811962cebab2172a6977c9ed7925615e7562236b322476f52a28c21

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for serialx-1.6.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d4a2e59610d828e6290a39ea2100df4f33bb76d44158dd4b5504006872e7401d
MD5 17f989c406007af360ef08c0815a57db
BLAKE2b-256 2b2b31b3a84f858242e731234cbdbe1469896201413359db20856d2b67d340e1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for serialx-1.6.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 985a2651c839ba1200609c78ba94f132b1dc3637623096980489fc77cad0947b
MD5 2f3edcbe60a42350ed80fb678e800a8e
BLAKE2b-256 0cefb5e1208cd474373c99f199b972d008c4a02198d3bf2139d2381d807a8136

See more details on using hashes here.

Provenance

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