NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #2316 most downloaded on crates.io
A cross-platform low-level serial port library.
Last release 29 days ago
08 Sep 2026
Ships fairly regularly
a new release about every 2 months
Nearly every release is documented
notes for 34 of 34 stable releases
5 versions withdrawn
withdrawn after publishing
10 years old
39 releases · first in 2016
Fix builds for Linux/PowerPC which got broken with [4.10.0]. #375 #376
Tag latest release 4.10.0
Tag latest release 4.10.0
One column per quarter.
Add exclusive configuration option to SerialPortBuilder to control whether ports are opened with exclusive access locks. #319
exclusive configuration option to SerialPortBuilder to control
whether ports are opened with exclusive access locks.
#319termios2 and the corresponding ioctls TCGETS2 and TCSETS2 from nix
and the libc crate. There is no support form musl for termios2 and we are
directly talking to the kernel and bypassing it here.
#316TTYPort::pair in a Drop-safe OwnedFd to avoid file descriptor leaks on early returns.termios2
(TCGETS2/TCSETS2 + BOTHER) path now that required libc symbols are
available.
#316Generating documentation on docs.rs. #299
Additionally acquire an advisory lock with flock when opening a serial port. #266
Add support for opening serial ports on windows with an absolute path. #259
Set data terminal ready (DTR) on best-effort for not failing in the situation where we can't detect whether to apply this setting reliably. #268
Parsing serial numbers with underscore from Windows HWIDs #253
Enumerate ports from more subsystems on Linux without libudev. #238
Pin subdependency libc to maintain compatibility with MSRV 1.59.0. #229
libc to maintain compatibility with MSRV 1.59.0.
#229Add recommendation on how to interpret UsbPortInfo::interface_number. #219
UsbPortInfo::interface_number.
#219list_ports (alignment and order) for easily
comparing different runs.
#220Fix ignoring errors from setting baud rate and ignoring unsupported baud rates. #213
Add IntoRawHandle implementation for COMPort #199
IntoRawHandle implementation for COMPort
#199available_ports on Windows. This is now done by some bespoke code to
significantly reduce build times.
#201Add conversions between DataBits, StopBits types and their numeric representations.
DataBits, StopBits types and their numeric
representations.FromStr implementation for FlowControl.
#163available_ports() returned disabled devices on Windows.
#144WriteTotalTimeoutConstant field hasn't been
configured properly when the set_timeout method is called.
#124Duration::ZERO) actually resulted in waiting indefinitely.
#79available_ports() on Windows.
#81
#84Raise MSRV from 1.56.1 to 1.59.0 and Rust edition from 2018 to 2021. #137
bitflags dependency to 2.4.0.
#127O_CLOEXEC (Posix). This will close the device
handles when starting a child process. In particular this means that a serial
device can be reopened after making SW update of a Tauri application.
#130available_ports() returned wrong
device file paths.
#122Fixes a bug on the Raspberry Pi 4, which results in USB-devices being detected as PCI-devices. #113
Add support for reporting the USB device interface (feature-gated by _usbserialinfo-interface_). #47, #101
fmt::Debug and fmt::Display for SerialPort and related enums.
#91mach to mach2.nix from 0.24.1 to 0.26.0 and raise MSRV to 1.56.1.
#67,
#75,
#78tiocmget.
#61Add serde support behind a feature flag. #51
serde support behind a feature flag.
#51nix dependency to 0.24.1 and limited features.
#46Clone trait for Error.
#53impl SerialPort for &mut T. This allows a &mut T (where T: SerialPort) to be used in a context where impl SerialPort is expected. !114
Update maintenance status to looking for a new maintainer.
Added send_break() to TTYPort. !69
send_break() to TTYPort.
!69available_ports() for Linux musl targets and those without the
libudev feature enabled by scanning /sys/ for ports.
!72ENOENT and EACCES errors are now exposed as NotFound and
PermissionDenied errors on Linux.
!80try_clone_native() was added to COMPort and TTYPort to complement
SerialPort::try_clone() but returning the concrete type instead.
!85set_break() and clear_break() to SerialPort.
!70mem::MaybeUninit
feature.TTYPort/BreakDuration and COMPort are now at the
root level rather than under the posix and windows submodules
respectively.SerialPort s now uses the builder pattern through
serialport::new(). See the README for concrete examples.
!73SerialPortss are no longer opened with a default timeout of 1ms.manufacturer and product fields of UsbPortInfo now take
their values from the ID_VENDOR_FROM_DATABASE and ID_MODEL_FROM_DATABASE
udev properties respectively, instead of the ID_VENDOR and ID_MODEL
properties that were used before. When the _FROM_DATABASE values are not
available, it falls back to the old behavior.
!86TTYPort::set_exclusive().
!98bitflags to 1.0.4. Previously it was
set to 1.0.0, but this version of bitflags is actually incompatible with
Rust 2018 style macro imports that serialport-rs requires.
!83serialport::prelude module. Types should be explicitly imported
or can be glob-imported from the root like use serialport::*.
!82Added support for arbitrary baud rates on macOS and iOS.
sparc64-unknown-linux-gnu to Tier 2 support.Port enumeration is now supported on FreeBSD.
aarch64-unknown-linux-musl a Tier-2 supported target.x86_64-unknown-linux-gnux32.Added bytes_to_read(), bytes_to_write(), and clear() to SerialPort. Also added example scripts for using them.
bytes_to_read(), bytes_to_write(), and clear() to SerialPort.
Also added example scripts for using them.armv5te-unknown-linux-musleabilibudev on Linux.Arbitrary baud rates are now supported on BSDs, Linux, and Windows.
{i586|i686|x86_64}-unknown-linux-musl.{arm|armv7}-linux-androideabii686-linux-android{i686|x86_64}-unknown-freebsdarm-unknown-linux-musleabiarmv7-unknown-linux-musleabihf{mips64|mips64el}-unknown-linux-gnuabi64armv5te-unknown-linux-gnueabi{aarch64|mips|mipsel|powerpc64|powerpc64le|powerpc|s390x}-unknown-linux-gnu{mips|mipsel}-unknown-linux-muslx86_64-unknown-netbsd{aarch64|x86_64}-linux-androidaarch64-unknown-linux-muslsparc64-unknown-linux-gnu,x86_64-unknown-linux-gnux32Result<()>.SerialPort::port_name() to name().port_name field on SerialPortInfo included an extraneous
trailing nul byte character.BaudRate enum was removed in favor of a u32.Added examples/hardware_check.rs for use in debugging library or driver issues when using physical serial ports.
examples/hardware_check.rs for use in debugging library or driver
issues when using physical serial ports.SerialPort::try_clone which allows for cloning a port for full-duplex
reading and writing.SerialPort::try_clone interface to work as people expect.TTYPort::into_raw_fd will now work as expected. It previously closed the
port so the returned file descriptor would be invalid.impl FromRawHandle for COMPort.
impl FromRawHandle for COMPort.BaudRate::Baud* types
rather than as the BaudRate::BaudOther(*) type.USB device information is now returned in calls to available_ports().
available_ports().BaudRate::standard_rates() provides a vector of cross-platform baud rates.SerialPort trait is now Send.BaudRate::from_speed(usize) and BaudRate::speed -> usize in favor
of the From<u32> and Into<u32> traits.available_baud_rates in favor of BaudRate::platform_rates() as
this has a more clear semantic meaning. The returned list of baud rates is now
also correct for all supported platforms.termios dependency in favor of nix. This is a big step towards
supporting additional platforms.TTYPort::pair() is now thread-safe.TTYPort::open() no longer leaks file descriptors if it errors. Thanks to
@daniel. (MR#12)read() now properly blocks for at least one character.
read() now properly blocks for at least one character.Various documentation/README updates.
exclusive() and set_exclusive() for TTYPort.
impl Debug for COMPort.exclusive() and set_exclusive() for TTYPort.port_name() for SerialPort.impl FromRawFd and impl IntoRawFd for TTYPort.pair() for TTYPort.open_with_settings() to support initializing the port with custom settings.
open_with_settings() to support initializing the port with custom settings.SerialPortSettings is now publically usable being exported in the prelude,
having all public and commented fields, and a Default impl.TTYPort/COMPort::open() now take a SerialPortSettings argument and return
concrete types.serialport::open() now initializes the port to reasonable defaults.try!() for ?.SerialPort::set_all() now borrows SerialPortSettings.Report an Unimplemented error for unsupported unix targets.
Specify AppVeyor build status badge for crates.io.
No changes, purely a version increment to push new crate metadata to crates.io.
Specify category for crates.io.
Added a getter/setter pair for all settings at once.
Fixed compilation on x86_64-pc-windows-gnu target.
[Unreleased]: https://github.com/serialport/serialport-rs/compare/v4.10.1...HEAD [4.10.1]: https://github.com/serialport/serialport-rs/compare/v4.10.0
Your coding agent can read these notes before it upgrades. Set up the MCP server →