# Changelog All notable changes to ExeBundle will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0/0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [0.94] - 2026-01-18 ### Breaking Changes - **CLI option renaming for better Windows compatibility**: - `--` (double dash) renamed to `--files` for specifying manual file lists - `--files` renamed to `--filelist` for reading file list from text file - These changes improve compatibility with Windows command-line conventions where `--` token can be problematic **Migration guide**: ```bash # Before (0.92): Manual file list with -- ExeBundle.exe build --exe app.exe --out bundle.exe -- lib1.dll lib2.dll data.txt # After (0.93): Use --files ExeBundle.exe --exe app.exe --out bundle.exe --files lib1.dll lib2.dll data.txt ``` ```bash # Before (0.92): File list from text file ExeBundle.exe build --exe app.exe --out bundle.exe --files filelist.txt # After (0.93): Use --filelist ExeBundle.exe --exe app.exe --out bundle.exe --filelist filelist.txt ``` ### Added - **Script bundling support**: Bundle and execute PowerShell, batch, and other script files directly - Non-PE files (scripts, .NET assemblies) can now be specified as `--exe` parameter - Use custom command line templates to specify interpreter (e.g., `--cmdline "powershell -File {exe}"`) - Enables portable script distribution without separate executable wrapper - Example: `ExeBundle.exe build -e script.ps1 -o bundle.exe --cmdline "powershell -ExecutionPolicy Bypass -File {exe}" -- script.ps1 helpers.psm1` - **Automatic path quoting**: Template variables `{exe}` and `{bundledir}` are now automatically quoted - Handles paths with spaces correctly without manual quoting - `{exe}` expands to `"C:\Program Files\App\app.exe"` (quoted) - Prevents command-line parsing issues - **Enhanced non-PE file support**: Builder now gracefully handles non-executable files - Warning displayed when non-.exe file is specified - Resource extraction skipped for non-PE files - Default 32-bit console loader used for scripts ### Changed - **CLI: `build` command now optional (default)**: The `build` command keyword can be omitted for shorter syntax - `ExeBundle.exe --exe app.exe --out bundle.exe --auto` (new, shorter) - `ExeBundle.exe build --exe app.exe --out bundle.exe --auto` (still works) - Running with no arguments now shows help instead of error - Fully backward compatible - explicit `build` still works - **Command line execution model**: `CreateProcessA` now parses full command line instead of fixed executable - Enables arbitrary process execution (e.g., `cmd.exe`, `powershell.exe`) - Template is now the complete command, not just arguments - More flexible than previous implementation - **Increased template limits**: Command line and working directory templates expanded to 4096 characters (from 255/127) - Supports complex command lines and long paths - Header serialization updated to use `uint16_t` length prefix (max 65535, limited to 4096 for safety) - **Compression system overhaul**: Simplified and unified compression using Zstandard - All compression modes now use Zstandard (zstd) instead of Windows internal algorithms - Windows Compression API (xpress, xpress_huff, lzms, mszip) disabled due to poor performance - Compression levels: `none`, `fast`, `balanced` (default), `ultra` - Builder now displays compressed size after bundling ### Fixed - **Version info compatibility**: Fixed bundling of executables without version information resources - Builder now adds default version information to loader when source exe has none - Prevents bundle creation failures with certain executables - **Compression level handling**: Fixed handling of edge-case compression levels - Improved validation and error handling for compression modes - More robust compression configuration ### Performance - **Loader size reduced by ~60KB**: Extensive optimizations to minimize bundle overhead - Replaced STL filesystem and chrono with lightweight Windows API wrappers - Disabled unnecessary runtime checks and features - Smaller bundles, faster downloads - **Builder memory optimization**: Reduced memory footprint during bundle creation - Eliminated intermediate storage vectors in build pipeline - Early deallocation of file entry data after overlay creation - In-place file entry processing instead of creating new vectors - Significant memory savings for large bundles --- ## [0.92] - 2026-01-01 ### Breaking Changes - **Bundle format change**: The internal header structure has been extended from ~136 bytes to ~520 bytes to support new runtime execution features. **Bundles created with v0.91 or earlier will not work with v0.92 loaders, and vice versa.** All bundles must be rebuilt with v0.92. - **Default command line behavior change**: The bundled application now receives the executable path as `argv[0]` (proper Windows convention), whereas previously `argv[0]` was missing or incorrect. This fixes a long-standing bug but may affect applications that relied on the incorrect behavior. ### Added - **Custom command line templates** (`--cmdline