This Java library provides serial port access for Linux, macOS, and Windows using Java's Foreign Function and Memory (FFM) API.
Project Panama aims at improving interoperability between Java and native libraries. It provides the new Foreign Function & Memory API, and enables access to native code in pure Java.
serial-ffm
requires Java 23 (java.base) or newer.
(Older versions exist for JDK 19, JDK 21, and JDK 22).
The implementation is a port of the serial-native C libraries written to use JNI.
The Java bindings from native library headers are generated using jextract, leveraging the gradle-jextract plugin in the gradle build file.
./gradlew build -x test
Skip the header extraction step for your OS by using
./gradlew build -x test -x jextract
Using a serial port named portId in a try-with-resources statement:
try (var port = SerialPort.open(portId)
.baudrate(19_200)
.databits(8)
.parity(Parity.Even)
.stopbits(StopBits.One)
.flowControl(FlowControl.None)) {
var in = port.inputStream();
var out = port.outputStream();
// use streams ...
}