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.3.0.tar.gz (528.1 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.3.0-py3-none-any.whl (73.2 kB view details)

Uploaded Python 3

serialx-1.3.0-cp310-abi3-win_arm64.whl (193.2 kB view details)

Uploaded CPython 3.10+Windows ARM64

serialx-1.3.0-cp310-abi3-win_amd64.whl (196.9 kB view details)

Uploaded CPython 3.10+Windows x86-64

serialx-1.3.0-cp310-abi3-win32.whl (190.9 kB view details)

Uploaded CPython 3.10+Windows x86

serialx-1.3.0-cp310-abi3-macosx_11_0_arm64.whl (290.1 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

serialx-1.3.0-cp310-abi3-macosx_10_12_x86_64.whl (292.5 kB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for serialx-1.3.0.tar.gz
Algorithm Hash digest
SHA256 b6e2935bd82e7681960e7c5e91642119a2d90d0451f29279653bd2e6197b19df
MD5 90f1c0f53eec25f667e1ee1e1b6a9f2a
BLAKE2b-256 9d215288dd6537aefa953a2589a766f26e507560424934efe7f774ddf3c0b234

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: serialx-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 73.2 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.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b925361f8534e36c373dbcda7387d47c3f1206c4d2a3f2ee8bacc0783a5e0043
MD5 8c22873dc3dc29db76083f7620d5dc2c
BLAKE2b-256 8c323ca985fc12e38573ebafe4ab5aec78127f89cb1e882e1450401264a1daaa

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: serialx-1.3.0-cp310-abi3-win_arm64.whl
  • Upload date:
  • Size: 193.2 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.3.0-cp310-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 138aa4d8ce9fffdff6b41d9dd59985fac026da3bf04bae1fb6a2fa438ec16694
MD5 3f043490aada9e6bc5898bf2c8a9b56b
BLAKE2b-256 f61aa2f1a23ac7d2ec0e87d5b08904ab8bd312e5bafcf47bbaf1437265f212fd

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: serialx-1.3.0-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 196.9 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.3.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 aca450478cea68f09af17839f2cc58c1765dd78f51e96e69d949a47252ae2de3
MD5 2449108c33fb9024ab2d22ecbe9e4316
BLAKE2b-256 b50d12ffc5985ad0b9261f643382eec5041aeabf83be6896dd2d245e5218f555

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: serialx-1.3.0-cp310-abi3-win32.whl
  • Upload date:
  • Size: 190.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.3.0-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 e55998b25b4641eae6f214a820060a88559b9cca1842bec64939d65c56e59fbc
MD5 d5c881b4d6a5165d4238fd00928bead2
BLAKE2b-256 79d9deabc849e256d861a7ffcba24f7d15c05bad65b527dee211384f87c8d44a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for serialx-1.3.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b35ecb83ee3641fd3224cc5aa4e35f14ac5ecce5a85813eaffe17f3ac99304f5
MD5 0c3168688098cb0e964676c9a03c6c51
BLAKE2b-256 7df1905565757dc8171369ce33bcd39b0061734032b857ceaf126731d4ee2251

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for serialx-1.3.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 50ac3a0f55a21a8d810fb4a66a9a4c91e275af7a9e17aca747e88641740311b5
MD5 a71353dd50093ba85d8a31c08c213cd6
BLAKE2b-256 3c9ad4f9cbfadf705e809f536d39abdc674805adf715c582d140dcc8f3f9c268

See more details on using hashes here.

Provenance

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