
OSHI is a free native (JNA or FFM) Operating System and Hardware Information library for Java. It does not require the installation of any additional native libraries and aims to provide a cross-platform implementation to retrieve system information, such as OS version, processes, memory and CPU usage, disks and partitions, devices, sensors, etc.
Supported Platforms
- Windows
- macOS
- Linux (Android)
- UNIX (AIX, FreeBSD, OpenBSD, Solaris) — JNA only
Supported Features
- Computer System and firmware, baseboard
- Operating System and Version/Build
- Physical (core) and Logical (hyperthreaded) CPUs, processor groups, NUMA nodes
- System and per-processor load, usage tick counters, interrupts, uptime
- Process uptime, CPU, memory usage, user/group, command line args, thread details
- Physical and virtual memory used/available
- Mounted filesystems (type, usable and total space, options, reads and writes)
- Disk drives (model, serial, size, reads and writes) and partitions
- Network interfaces (IPs, bandwidth in/out), network parameters, TCP/UDP statistics
- Battery state (% capacity, time remaining, power usage stats)
- USB Devices
- Connected displays (with EDID info), graphics and audio cards
- Sensors (temperature, fan speeds, voltage) on some hardware
- Container resource limits and usage (cgroup v1/v2)
- Printers (name, status, driver)
Native Access Implementations
OSHI provides two native access implementations:
- JNA (
oshi-core): Uses Java Native Access. Supports JDK 8+. JPMS module:com.github.oshi. - FFM (
oshi-core-ffm): Uses the JDK Foreign Function & Memory API. Requires JDK 25+. JPMS module:com.github.oshi.ffm.
Both implementations share the same API interfaces from oshi-common. Choose one at compile time, or include both and select at runtime (see Usage below).
Downloads and Dependency Management
Stable Release Versions
- JNA: oshi-core-7.1.0
- FFM: oshi-core-ffm-7.1.0
Current Development (SNAPSHOT) Versions
Legacy Versions
- JDK7: oshi-core-3.13.6
- JDK6: oshi-core-3.14.0
Usage
- Include OSHI and its dependencies on your classpath.
- We strongly recommend you add
oshi-coreas a dependency to your project dependency manager such as Maven or Gradle. - For Windows, consider the optional
jLibreHardwareMonitordependency if you need sensor information. Note the binary DLLs in this dependency are licensed under MPL 2.0. - For Android, you'll need to add the AAR artifact for JNA and exclude OSHI's transitive (JAR) dependency.
- See the FAQ if you encounter
NoClassDefFoundErrororNoSuchMethodErrorproblems.
- We strongly recommend you add
- Create a new instance of
SystemInfo - Use the getters from
SystemInfoto access hardware or operating system components, such as:
SystemInfo si = new SystemInfo(); // oshi.SystemInfo or oshi.ffm.SystemInfo
HardwareAbstractionLayer hal = si.getHardware();
CentralProcessor cpu = hal.getProcessor();
To include both implementations and select at runtime:
// Automatic selection — picks FFM on JDK 25+ (Windows/macOS/Linux), falls back to JNA
SystemInfoProvider si = SystemInfoFactory.create();
HardwareAbstractionLayer hal = si.getHardware();
OperatingSystem os = si.getOperatingSystem();
Some settings are configurable in the oshi.properties file, which may also be manipulated using the GlobalConfig class or using Java System Properties. This should be done at startup, as configuration is not thread-safe and OSHI does not guarantee re-reading the configuration during operation.
Documentation
- Javadocs — JNA | FFM
- FAQ
- Change Log
- Performance Considerations
- Major Version Breaking Changes
- Sample Output
- Applications and Projects using OSHI
Additional Modules
oshi-demo — Examples and Demos
Proof-of-concept examples including a Swing GUI, JSON output, JMX integration, and more. Try instantly with jbang:
jbang json@oshi/oshi # JSON dump of system info
jbang gui@oshi/oshi # Swing GUI dashboard
See the oshi-demo README for all available demos and usage instructions.
oshi-metrics — Micrometer Metrics
First-party Micrometer integration providing system, process, and container metrics following OpenTelemetry semantic conventions. Works with Prometheus, Grafana, Datadog, and any Micrometer-compatible backend.
OshiMetrics.bindTo(registry, si.getHardware(), si.getOperatingSystem());
See the oshi-metrics README for full setup, selective registration, and the complete list of metrics.
oshi-benchmark — JMH Benchmarks
JMH benchmarks comparing JNA and FFM implementations side by side. Requires JDK 25+.
./oshi-benchmark/scripts/run-benchmarks.sh
See the oshi-benchmark README for running specific benchmarks and custom JMH options.
Support
- For bug reports, feature requests, or general questions about OSHI's longer term plans, please create an issue.
- For help integrating OSHI into your own project or maintainer code review of your PRs, tag
@dbwiddisin issues or pull requests on your project site. - For "how to" questions regarding the use of the API, consult examples in the
oshi-demoproject, create an issue, or search on Stack Overflow using theoshitag, asking a new question if it hasn't been answered before. - To say thanks to OSHI's primary maintainer, you can sponsor him or buy him a coffee.
OSHI for Enterprise
Available as part of the Tidelift Subscription
The maintainers of OSHI and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. Learn more.
Security Contact Information
To report a security vulnerability, please use the Tidelift security contact. Tidelift will coordinate the fix and disclosure.
Continuous Integration Test Status
How Can I Help?
OSHI originated as a platform-independent library that did not require additional software and had a license compatible with both open source and commercial products. We have developed a strong core of features on major Operating Systems, but we would love for you to help by:
- Testing! Our CI testing is limited to a few platforms. Download and test the program on various operating systems/versions and hardware and help identify gaps that our limited development and testing may have missed. Specific high priority testing needs include:
- Windows systems with over 64 logical processors
- Raspberry Pi
- Less common Linux distributions
- Contributing code. See something that's not working right or could work better? Help us fix it! New contributors are welcome.
- Documenting implementation. Our Wiki is sparse and the
oshi-demoartifact is a place to host proof-of-concept ideas. Want to help new users follow in your footsteps? - Suggesting new features. Do you need OSHI to do something it doesn't currently do? Let us know.
Contributing to OSHI
Acknowledgments
Many thanks to the following companies for providing free support of Open Source projects including OSHI:
- SonarCloud for a range of code quality tools
- GitHub Actions, AppVeyor, and Cirrus CI for continuous integration testing
- CodeRabbit for automated AI code review
- The jProfile Java Profiler used to eliminate CPU bottlenecks
License
This project is licensed under the MIT License.