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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
72330a5f987d80f88ecc1584a288b3a8abf6e4de08ba7d17b6c5a2cd25f50fb2
|
|
| MD5 |
1e10eaae2ea7538ff1b3666065b52935
|
|
| BLAKE2b-256 |
890fd4785b09a62dbfa876bf9dc4e26e1ac8a03a97c198d7e2eef37f94f1ade2
|
Provenance
The following attestation bundles were made for serialx-1.5.0.tar.gz:
Publisher:
publish-to-pypi.yml on puddly/serialx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
serialx-1.5.0.tar.gz -
Subject digest:
72330a5f987d80f88ecc1584a288b3a8abf6e4de08ba7d17b6c5a2cd25f50fb2 - Sigstore transparency entry: 1364088976
- Sigstore integration time:
-
Permalink:
puddly/serialx@9d90d73288cc3e6b86f34a687b489d39f63d1b9f -
Branch / Tag:
refs/tags/v1.5.0 - Owner: https://github.com/puddly
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@9d90d73288cc3e6b86f34a687b489d39f63d1b9f -
Trigger Event:
release
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b292fff52f4ee10e6f6e9fb38619420b0503baead62e5802c57751c1c17b5ca5
|
|
| MD5 |
d673f1ec51a355ad40cabdb4b5245c81
|
|
| BLAKE2b-256 |
3c529fdacf14de98f1bdd38585ecfc10a2efa245968e02d03856cbf1f5824124
|
Provenance
The following attestation bundles were made for serialx-1.5.0-py3-none-any.whl:
Publisher:
publish-to-pypi.yml on puddly/serialx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
serialx-1.5.0-py3-none-any.whl -
Subject digest:
b292fff52f4ee10e6f6e9fb38619420b0503baead62e5802c57751c1c17b5ca5 - Sigstore transparency entry: 1364089549
- Sigstore integration time:
-
Permalink:
puddly/serialx@9d90d73288cc3e6b86f34a687b489d39f63d1b9f -
Branch / Tag:
refs/tags/v1.5.0 - Owner: https://github.com/puddly
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@9d90d73288cc3e6b86f34a687b489d39f63d1b9f -
Trigger Event:
release
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9614e0a25c4ff837713ebd40d6bef5d78008d054417aebfdd4631c94a771ff9d
|
|
| MD5 |
e1b9f2cfd045fc9e5e6e094b16d3c04c
|
|
| BLAKE2b-256 |
98cb0e8a39260d1371020f28d51e592fd478c1283d925c4024a201c34965730d
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
serialx-1.5.0-cp310-abi3-win_arm64.whl -
Subject digest:
9614e0a25c4ff837713ebd40d6bef5d78008d054417aebfdd4631c94a771ff9d - Sigstore transparency entry: 1364089708
- Sigstore integration time:
-
Permalink:
puddly/serialx@9d90d73288cc3e6b86f34a687b489d39f63d1b9f -
Branch / Tag:
refs/tags/v1.5.0 - Owner: https://github.com/puddly
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@9d90d73288cc3e6b86f34a687b489d39f63d1b9f -
Trigger Event:
release
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ccfb1697b0a06c09d05b81e87e27d914d436e748af4c84733e8d996f56105ee
|
|
| MD5 |
8f9b3a521672390505125dd0f494a7c3
|
|
| BLAKE2b-256 |
3e02c17f5fd8c028feb75aa102887fa91aec9b00dc7427eb6996400e4ec9559f
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
serialx-1.5.0-cp310-abi3-win_amd64.whl -
Subject digest:
0ccfb1697b0a06c09d05b81e87e27d914d436e748af4c84733e8d996f56105ee - Sigstore transparency entry: 1364089828
- Sigstore integration time:
-
Permalink:
puddly/serialx@9d90d73288cc3e6b86f34a687b489d39f63d1b9f -
Branch / Tag:
refs/tags/v1.5.0 - Owner: https://github.com/puddly
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@9d90d73288cc3e6b86f34a687b489d39f63d1b9f -
Trigger Event:
release
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7cc7d8c897456b29d41a1fa4761b1f374a6fa36d567ec4f494ab2e98b6752849
|
|
| MD5 |
14bdf2880c0ce5f55b1dda2026a5ed5a
|
|
| BLAKE2b-256 |
3498bc3f93774840abbb9ab6369e3ad249d21f83d65db64c48d49c0b6189eac1
|
Provenance
The following attestation bundles were made for serialx-1.5.0-cp310-abi3-win32.whl:
Publisher:
publish-to-pypi.yml on puddly/serialx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
serialx-1.5.0-cp310-abi3-win32.whl -
Subject digest:
7cc7d8c897456b29d41a1fa4761b1f374a6fa36d567ec4f494ab2e98b6752849 - Sigstore transparency entry: 1364089389
- Sigstore integration time:
-
Permalink:
puddly/serialx@9d90d73288cc3e6b86f34a687b489d39f63d1b9f -
Branch / Tag:
refs/tags/v1.5.0 - Owner: https://github.com/puddly
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@9d90d73288cc3e6b86f34a687b489d39f63d1b9f -
Trigger Event:
release
-
Statement type:
File details
Details for the file serialx-1.5.0-cp310-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: serialx-1.5.0-cp310-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 276.4 kB
- Tags: CPython 3.10+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f6f5c1d1388147e92975103144a5235554f92e4d1c909acf6fa603aac7041fa8
|
|
| MD5 |
266ce0fc986f7acfede473dde8924977
|
|
| BLAKE2b-256 |
118bb5fdbbf69e64bcd666b80cf39186025302440c48c77bc18c3009a8a69571
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
serialx-1.5.0-cp310-abi3-macosx_11_0_arm64.whl -
Subject digest:
f6f5c1d1388147e92975103144a5235554f92e4d1c909acf6fa603aac7041fa8 - Sigstore transparency entry: 1364089127
- Sigstore integration time:
-
Permalink:
puddly/serialx@9d90d73288cc3e6b86f34a687b489d39f63d1b9f -
Branch / Tag:
refs/tags/v1.5.0 - Owner: https://github.com/puddly
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@9d90d73288cc3e6b86f34a687b489d39f63d1b9f -
Trigger Event:
release
-
Statement type:
File details
Details for the file serialx-1.5.0-cp310-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: serialx-1.5.0-cp310-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 278.8 kB
- Tags: CPython 3.10+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2a9acac95779c0e5d1e257acbee1d1e58df937b538db1ee73d2688403ec1291
|
|
| MD5 |
54be22440f7e1236588c6e9b0d1a499e
|
|
| BLAKE2b-256 |
1bd8d69499729556525ef99d94fb912dc2829361fc61d1449f5d7ebc7f266503
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
serialx-1.5.0-cp310-abi3-macosx_10_12_x86_64.whl -
Subject digest:
d2a9acac95779c0e5d1e257acbee1d1e58df937b538db1ee73d2688403ec1291 - Sigstore transparency entry: 1364089285
- Sigstore integration time:
-
Permalink:
puddly/serialx@9d90d73288cc3e6b86f34a687b489d39f63d1b9f -
Branch / Tag:
refs/tags/v1.5.0 - Owner: https://github.com/puddly
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@9d90d73288cc3e6b86f34a687b489d39f63d1b9f -
Trigger Event:
release
-
Statement type: