jimage-rs

Crates.iojimage-rs
lib.rsjimage-rs
version0.0.3
created_at2025-06-21 16:42:13.457051+00
updated_at2025-09-03 19:59:09.057157+00
descriptionA fast and efficient Rust library for working with jimage files used by the Java Platform Module System.
homepagehttps://github.com/hextriclosan/rusty-jvm/tree/main/jimage-rs
repositoryhttps://github.com/hextriclosan/rusty-jvm
max_upload_size
id1720948
size48,502
Igor Rudenko (hextriclosan)

documentation

https://docs.rs/jimage-rs

README

jimage-rs

A fast and efficient Rust library for working with jimage files used by the Java Platform Module System.

Crate Docs License

Introduction

jimage-rs is a Rust library and command-line utility for reading and extracting resources from Java image files (jimage).

jimage is a file format used by the Java Virtual Machine (JVM) to store class files and other resources in a compressed format. It is typically found in the lib/modules directory of a Java installation. The format was developed as part of Project Jigsaw (JEP-220) and is used in Java Platform Module System (JPMS).

This crate:

  • is implemented from scratch
  • based on publicly available information (since there is no official jimage file format specification)
  • supports the latest internal version 1.0 of the jimage file format

Library

Sample code of extracting resources from a jimage file:

use std::env;
use std::path::PathBuf;
use jimage_rs::JImage;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let path = PathBuf::from(env::var("JAVA_HOME")?)
        .join("lib")
        .join("modules");
    let jimage = JImage::open(path)?;
    match jimage.find_resource("/java.base/java/lang/String.class")? {
        Some(resource) => println!("Resource found: {:?}", resource),
        None => println!("Resource not found"),
    }

    Ok(())
}

CLI

jimage-rs command-line utility can be used to extract resources from a jimage file:

jimage-rs extract -r /java.base/java/lang/String.class $JAVA_HOME/lib/modules

License

This project is licensed under the MIT license.

Commit count: 548

cargo fmt