Excel file optimization with a Rust core and a Python-first API. The default path is lossless and deterministic, with optional lossy media optimization when explicitly enabled.
- Python API:
excel_slim.optimize()andexcel_slim.analyze() - CLI mirrors Python options (no subprocess in Python)
- Lossless by default, lossy media is opt-in
- Deterministic output (stable ordering, timestamps)
- Handles
.xlsxand.xlsm(VBA pass-through)
pip install excel-slimpython -m pip install maturin
maturin developcargo build -p excel-slim-cli --release
./target/release/excel-slim --helpimport excel_slim
report = excel_slim.optimize(
"input.xlsx",
output="output.xlsx",
profile="safe",
xml=True,
zip=True,
vba="auto",
media="off",
)
info = excel_slim.analyze("input.xlsm")excel-slim input.xlsx --report
excel-slim input.xlsm --xml --zip --vba=auto --media=lossless --report=jsoninfo = excel_slim.analyze("input.xlsx")Returns a dict with:
format:xlsx|xlsm|xls|csv|unknownsize_byteshas_vba,has_mediaxml_stats: worksheets, shared strings size, styles sizerecommendations,risks
report = excel_slim.optimize(
"input.xlsx",
output="output.xlsx",
profile="safe", # safe | balanced | aggressive
xml=True, # XML optimizations
zip=True, # ZIP repack
vba="auto", # auto | off | on
media="off", # off | lossless | lossy
report=True,
report_format="dict", # dict | json_string
)optimize() returns an OptimizationReport with per-module savings and metadata.
from excel_slim import WorkbookOptimizer
opt = WorkbookOptimizer("input.xlsx")
opt.profile("safe").xml(True).zip(True).media("lossless")
report = opt.optimize("output.xlsx")safe: fast, lossless only. Skips heavy XML passes.balanced: enables style pruning for additional savings.aggressive: enables XML minify and best compression (slowest).
- Stable ZIP ordering
- Fixed timestamps
- Consistent compression settings by profile
- Never executes macros or formulas
- VBA streams are preserved as-is
- Zip entry validation prevents path traversal
- Rust 1.70+
- Python 3.8+
- maturin (
python -m pip install maturin)
cargo test
python -m pytestThis uses maturin to build and publish wheels.
maturin build --release
maturin publish --releaseSet your token in the environment before publishing:
export MATURIN_PYPI_TOKEN="pypi-..."See the engineering plan in the project brief for shared strings, styles pruning, VBA compression, media optimization, and XLS support phases.