Releases: ramsy0dev/pmole
Releases · ramsy0dev/pmole
Release list
pmole v0.2.0
What's Changed
Compression
- Replace LZW-only text format with binary .pm v3 format (magic PM\x03\x00)
- Add compression.py with four algorithms: LZW (uint16), LZW+zlib, zlib, lzma
- Auto-select best algorithm per file (compress_auto); skip LZW for files >10 MB
- Parallel compress/decompress via ThreadPoolExecutor (default 3 threads)
- Fix LZW to use bytes keys — eliminates UnicodeDecodeError on binary files
- Add RESET_CODE=256 and dictionary reset at 65536 to keep all codes in uint16
Encryption
- Add crypto.py: AES-256-GCM with PBKDF2-HMAC-SHA256 (260k iterations)
- All operations (compress, decompress, list, extract, verify, search) accept
an optional password; encrypted archives use PME\x01 envelope magic - _open_pm() context manager decrypts to a temp file transparently so worker
threads get a valid fd for the lifetime of the operation
Codebase tools
- verify: decompress every file in-memory, check sizes — no disk writes
- search: regex grep across all text files in archive — no disk writes
- stats: compression breakdown grouped by file extension
- .pmignore / .gitignore support via pathspec (gitignore semantics)
- .pmignore added to default EXCLUDE_FILENAMES
API and CLI
- New top-level API in api.py: compress, decompress, list_files, extract,
verify, search, stats, is_encrypted, lzw_compress, lzw_decompress - ArchiveEntry dataclass with compression_ratio and algo_name properties
- CLI redesigned to use positional arguments; add verify, search, stats,
tree commands; add -p/--password (PMOLE_PASSWORD env var) to all commands - --threads (-t) default changed to 3; exposed in all relevant commands
Auto-exclusion
- Expand EXCLUDE_EXTENSIONS to cover images, audio/video, fonts, databases,
lock files, source maps, and more - Expand EXCLUDE_DIRECTORIES to cover Python envs, Node, IDEs, build tools,
package caches, and more - Add EXCLUDE_FILENAMES for OS artifacts and secret files
- Add MAX_FILE_SIZE_BYTES (50 MB default)
- Add pathspec dependency for gitignore pattern matching
Full Changelog: v0.1.1...v0.2.0
pmole v0.1.1
What's Changed
- Bump bitarray from 3.1.0 to 3.1.1 by @dependabot[bot] in #6
- Bump debugpy from 1.8.12 to 1.8.13 by @dependabot[bot] in #7
- Bump bitarray from 3.1.1 to 3.2.0 by @dependabot[bot] in #8
- Bump bitarray from 3.2.0 to 3.3.0 by @dependabot[bot] in #9
- Bump bitarray from 3.3.0 to 3.3.1 by @dependabot[bot] in #10
- Bump debugpy from 1.8.13 to 1.8.14 by @dependabot[bot] in #11
- Bump typer from 0.15.2 to 0.15.3 by @dependabot[bot] in #12
Full Changelog: v0.1.0...v0.1.1
Pmole v0.1.0
First Release v0.1.0
What's Changed
- Bump bitarray from 3.0.0 to 3.1.0 by @dependabot in #1
- Bump pytest from 8.3.4 to 8.3.5 by @dependabot in #2
- Bump typer from 0.15.1 to 0.15.2 by @dependabot in #3
New Contributors
- @dependabot made their first contribution in #1
Full Changelog: https://github.com/ramsy0dev/pmole/commits/v0.1.0