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) in environments where existing code cannot be migrated:

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

An async equivalent of the synchronous API:

import asyncio
import serialx

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

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

A (StreamReader, StreamWriter) pair is also available for code already wired up to the asyncio streams API:

import asyncio
import serialx

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

    try:
        data = await reader.readexactly(5)
        writer.write(b"test")
        await writer.drain()
    finally:
        writer.close()
        await writer.wait_closed()

And a low-level asynchronous serial transport for protocol-style consumers:

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.8.2.tar.gz (695.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.8.2-py3-none-any.whl (66.7 kB view details)

Uploaded Python 3

serialx-1.8.2-cp310-abi3-win_arm64.whl (186.5 kB view details)

Uploaded CPython 3.10+Windows ARM64

serialx-1.8.2-cp310-abi3-win_amd64.whl (189.9 kB view details)

Uploaded CPython 3.10+Windows x86-64

serialx-1.8.2-cp310-abi3-win32.whl (183.9 kB view details)

Uploaded CPython 3.10+Windows x86

serialx-1.8.2-cp310-abi3-macosx_11_0_arm64.whl (282.9 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

serialx-1.8.2-cp310-abi3-macosx_10_12_x86_64.whl (285.3 kB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for serialx-1.8.2.tar.gz
Algorithm Hash digest
SHA256 90c912ec8ceb4ae26a7dca158ca21e5bd8d73ddfc93c5e8d8b101a22ddccbb9a
MD5 0e9f9a9215f9c703077bdb11afd60fe3
BLAKE2b-256 cf80778c6da23924b718c282024bcde331cf8e417ec1274d2f198f65cff7503a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: serialx-1.8.2-py3-none-any.whl
  • Upload date:
  • Size: 66.7 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.8.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6e6cffc1caec242fb06d8e16dd7880c8ba53c366ee2c43045fc38e8935ac8a6d
MD5 9a3c8f4b96abdf04db80f916cce2ebe1
BLAKE2b-256 f0909cd83042a221756e41ed8c018344e8833788c16e9bac144dab3292f9fa3c

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: serialx-1.8.2-cp310-abi3-win_arm64.whl
  • Upload date:
  • Size: 186.5 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.8.2-cp310-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 36f82e21c9b0215beae4c983d221071a44ecdcf2f7a98c659af596ff7adbaa65
MD5 4b65fc51eafe80d28e69ed2611dbdff9
BLAKE2b-256 85b9138584b89a109f4e4ce82176380b44a748808033d55c9cbb1b39de0f52eb

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: serialx-1.8.2-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 189.9 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.8.2-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 3e098c502639c7b220c419634101f28b9878a82fcee0cf06e074abb3e97f2c3e
MD5 d8ca9f0d46f69f6ba7ef3148bd14f66b
BLAKE2b-256 651d8dfbd66cdf4129d991574c4ebcd502636b178e408a41cdf8ebc04353cab5

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: serialx-1.8.2-cp310-abi3-win32.whl
  • Upload date:
  • Size: 183.9 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.8.2-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 42cd054add10e390856608a6b0abb3bdf1b8aa078f26f60d7fcd852603f91417
MD5 ca8c674f018fb5f1e14522875245720d
BLAKE2b-256 c6d5598fc77e904c584e4420cc4be7878292f595f40e6f32092649d7cd580f28

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for serialx-1.8.2-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 abaee5c042194eaf95466e8e5eec6920af2eb0dbc00b91f1d765a0602bfd0d23
MD5 8b4b5f4155ffd1ce1a51fd315aeb5cf0
BLAKE2b-256 3832e6998be005770fbefd71bd3b9e095eb3a4fc055649967dcf82a6747fb6dc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for serialx-1.8.2-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d2904605e59357b9815aaa70828f28429767821638fceef228f32b8fca9ffb5c
MD5 c4e0f6af617a7cb2a0680f889b9c49cb
BLAKE2b-256 4f4bb4c05bfbe7021874f4f8b007d0057bf50e92854d63bb1dab07fd3677e376

See more details on using hashes here.

Provenance

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