# asar-rust
[](https://crates.io/crates/asar-rust)
[](https://opensource.org/licenses/MIT)
[简体中文](README_zh.md)
Rust port of [@electron/asar](https://github.com/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
```bash
cargo install asar-rust
```
### Library
```toml
[dependencies]
asar-rust = "0.1"
```
## CLI Usage
```bash
# 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
```rust
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](LICENSE) for details.