fuselage 0.4.0

Linux CLI tool for running commands with ephemeral, namespace-private filesystems
[package]
name = "fuselage"
version = "0.4.0"
edition = "2024"
description = "Linux CLI tool for running commands with ephemeral, namespace-private filesystems"
license = "MIT"
repository = "https://github.com/sfkleach/fuselage"
homepage = "https://github.com/sfkleach/fuselage"
documentation = "https://github.com/sfkleach/fuselage#readme"
readme = "README.md"
keywords = ["filesystem", "namespace", "mount", "linux", "sandbox"]
categories = ["command-line-utilities", "filesystem"]
rust-version = "1.85"
exclude = [
  ".github/",
  "CLAUDE.md",
  "Justfile",
  "docs/decisions/",
  "docs/tasks/",
  "docs/process/",
  "docs/working-practices/",
  "docs/fuselage",
  "scripts/",
  "tests/",
  "install.sh",
]

[dependencies]
# CLI argument parsing
clap = { version = "4", features = ["derive"] }
# ZIP archive extraction — xz disabled to avoid conflict with backhand's liblzma-sys
zip = { version = "2", default-features = false, features = ["aes-crypto", "bzip2", "deflate", "deflate64", "time", "zstd"] }
# SHA-256 content hashing for --static cache keys
sha2 = "0.10"
hex = "0.4"
# Base64 decoding for text-encoded archives
base64 = "0.22"
# Linux syscalls: unshare(2), mount(2)
nix = { version = "0.29", features = ["mount", "user", "sched", "signal", "process", "fs"] }
# SquashFS reading and extraction (pure Rust)
backhand = "0.25"
# Linux loop device management for squashfs loop-mounting (privileged mode)
loopdev-3 = "0.5"
# ELF header parsing (byte-order-aware integer reads)
byteorder = "1"
# Error handling
anyhow = "1"
thiserror = "2"
# TOML parsing (reads pyproject.toml in uv-bundle)
toml = "0.8"
# PEP 440 version and specifier handling (checks requires-python in uv-bundle)
pep440_rs = "0.7"

[[bin]]
name = "fuselage-bundle"
path = "src/bin/fuselage_bundle.rs"

[[bin]]
name = "uv-bundle"
path = "src/bin/uv_bundle.rs"

[dev-dependencies]
# Backdate file mtimes in unit tests for reap_cache() without sleeping.
filetime = "0.2"
# Temporary files and directories for unit tests.
tempfile = "3"

[package.metadata.binstall]
pkg-url = "{ repo }/releases/download/v{ version }/{ name }-v{ version }-{ target }.tar.gz"
bin-dir = "{ name }{ binary-ext }"
pkg-fmt = "tgz"

[profile.release]
strip = true        # strip symbols (already happening, but makes it explicit)
opt-level = "z"     # optimise for size instead of speed
lto = true          # link-time optimisation removes dead code across crates
codegen-units = 1   # slower build but better LTO