asar-rust 0.1.0

Rust port of @electron/asar — create and extract Electron ASAR archives
Documentation

asar-rust

Crates.io License: MIT

简体中文

Rust port of @electron/asar — create, extract, and inspect Electron ASAR archives with native performance. Provides both a library (asar_rust) and a CLI binary (asar).

Installation

CLI

cargo install asar-rust

Library

[dependencies]
asar-rust = "0.1"

CLI Usage

# Pack a directory into an ASAR archive
asar pack ./my-app ./app.asar

# List all files in an archive
asar list ./app.asar

# List files with pack/unpack status
asar list ./app.asar --is-pack

# Extract a single file
asar extract-file ./app.asar package.json

# Extract entire archive
asar extract ./app.asar ./output-dir

# Pack with options
asar pack ./my-app ./app.asar \
  --unpack "*.node" \
  --unpack-dir "node_modules" \
  --exclude-hidden \
  --ordering ./ordering.txt

Library API

use asar_rust::asar::*;

// Create an ASAR archive
create_package("src_dir", "output.asar")?;

// Create with options
let options = CreateOptions {
    dot: false,
    ordering: Some("ordering.txt".into()),
    unpack: Some("*.node".into()),
    unpack_dir: Some("node_modules".into()),
};
create_package_with_options("src_dir", "output.asar", options)?;

// List all files
let files = list_package("output.asar", None)?;
for f in &files {
    println!("{f}");
}

// Extract a single file
extract_file("output.asar", "package.json", true)?;

// Extract entire archive
extract_all("output.asar", "dest_dir")?;

// Get raw header (JSON)
let header = get_raw_header("output.asar")?;

// Stat a file inside archive
let info = stat_file("output.asar", "src/main.js")?;
println!("size: {}", info.size);

// Open and inspect interactively
let archive = AsarArchive::open("output.asar")?;

Features

  • 📦 Pack/Unpack — Create ASAR archives from directories, extract fully or partially
  • 📋 List/Stat — Inspect archive contents and file metadata
  • 🔗 Symlink Support — Handle symbolic links within archives
  • 🧩 Unpacked Files — Specify glob patterns for files/dirs to keep unpacked
  • Integrity — SHA256-based header integrity verification
  • 🔒 Path Validation — Prevent path traversal attacks
  • 🚀 Performance — Optimized release profile (LTO, single codegen unit, size optimization)

Compatibility

Compatible with ASAR archives generated by the Node.js @electron/asar package. Archives created by either tool can be read by the other.

Minimum Supported Rust Version

Rust 1.85+ (2024 edition).

License

MIT — see LICENSE for details.