Skip to content
Branch: master
Go to file


Failed to load latest commit information.
Latest commit message
Commit time


Financial Contributors on Open Collective Join the chat at Maven Central Build Status License

This is a fork of the RXTX library with a focus on ease of use and embeddability in other libraries.

Some of the features we have added

  • A simplified serial port object called NRSerialPort. See below for an example.

  • Self-deployment of native libraries (all native code is stored inside the JAR and deployed at runtime). No more manual installation of native code.

  • Arm Cortex support (Gumstix).

  • Android (3.x or lower, requires a rooted phone to access the serial hardware).

    This feature is depricated by changes in Android permissions moving forward with 4.x

  • Single Makefile compile which simplifies the compilation of project binaries.

  • Gradle support for JAR creation.

  • Removal of partially-implemented RXTX code to streamline the library for just serial port access.

  • Full Eclipse integration for testing application code against sources.

  • RFC 2217 support provided by incorporating the jvser library.

  • RS485 support for Linux

And a bunch of bug fixes

  • Fixed the memory access error that causes OS X to crash the JVM when serial.close() is called.

  • Fixed the Windows serial port zombie bind that prevents re-accessing serial ports when exiting on an exception.

  • Fixed erroneous printouts of native library mis-match.

Dependency Management

Maven Java 8 and Java 11+


Building the JAR

  1. Checkout the repository.

     $ git clone
  2. Build with Gradle.

     $ cd nrjavaserial
     $ gradle build

The resulting JAR will be found in the build/libs/ directory.

Building Native Code

Native code is built using the Makefile found in the root of the repository. After the native code is built, the JAR is rebuilt.

# Build both the 32- and 64-bit Windows binaries.
$ mingw32-make windows

# Build the windows binaries on Linux via Wine.
$ make wine

# Build both the 32- and 64-bit Linux x86 binaries.
$make linux

# Build 32- or 64-bit Linux binaries, respectively.
$ make linux32
$ make linux64

# Build the binaries for all the supported ARM flavors (requires arm-linux-geabi-* packages)
$ make arm

# Build the OSX binaries.
$ make osx

# Build the PPC binaries.
$ make ppc

# Build the FreeBSD binaries.
$ make freebsd32
$ make freebsd64

Building on Windows

You'll need some installation of GCC. We recommend the TDM-GCC distribution of mingw64-w64. To get the build working you need both mingw32, and ming64 installed in separate directories. Please modify JDKDIR to your installation of JDK.

Compile against Java

Building on OS X

We're pretty big on maintaining backwards compatibility as far as reasonable. Our OS X natives target OS X 10.5, so to build them, you'll need an appropriate SDK installed. This StackOverflow answer provides pointers for getting the appropriate SDK installed.

How to use NRSerialPort objects

String port = "";
for(String s:NRSerialPort.getAvailableSerialPorts()){
	System.out.println("Availible port: "+s);

int baudRate = 115200;
NRSerialPort serial = new NRSerialPort(port, baudRate);

DataInputStream ins = new DataInputStream(serial.getInputStream());
DataOutputStream outs = new DataOutputStream(serial.getOutputStream());
	//while(ins.available()==0 && !Thread.interrupted());// wait for a byte
	while(!Thread.interrupted()) {// read all bytes
		if(ins.available()>0) {
			char b =;
}catch(Exception ex){


Code Contributors

This project exists thanks to all the people who contribute. [Contribute].

Financial Contributors

Become a financial contributor and help us sustain our community. [Contribute]



Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]


A Java Serial Port system. This is a fork of the RXTX project that uses in jar loading of the native code.



You can’t perform that action at this time.