-
Notifications
You must be signed in to change notification settings - Fork 0
Changelog
lrg4you edited this page Aug 7, 2026
·
1 revision
This page mirrors patchnotes.md from the repository. For the canonical source, see patchnotes.md.
LRGEX Compress now preserves your files exactly across a compress → extract round-trip. Whatever goes into the archive comes out identical — no more "every extracted file shows today's date."
- LastWriteTime (mtime) preserved on every file and folder — sort-by-date, build systems, sync tools, and incremental backups all keep working correctly.
- CreationTime (ctime) preserved — the original creation date is restored, not lost.
- Windows attributes preserved — Hidden, Read-only, System, and Archive flags survive the round-trip. A hidden file extracts hidden; a read-only file extracts read-only.
- Symbolic links / junctions preserved — links recreate as links. On Windows, creating a link needs Administrator or Developer Mode; LRGEX asks once ("allow admin?") and, if yes, re-launches the extraction elevated to recreate every link exactly. If you decline, links degrade gracefully (never aborts the whole extraction).
- Directory timestamps restored in a final pass — so writing children into a folder doesn't overwrite the folder's original mtime.
NTFS alternate data streams are not supported (rarely used; not planned).
-
Metadata sidecar (
.lrgex/meta.bin): one small packed blob at the front of the archive replaces 11k+ per-entry metadata headers on big folders. Both compress and extract handle roughly half as many tar entries now. Old v1.4.0 archives still read correctly via the per-entry fallback. -
One-syscall metadata restore (
SetFileInformationByHandle): mtime + ctime + attributes set in a single call on the already-open file handle — no per-file re-open. -
Direct 4 MB chunked writes on large-file extract (no redundant
BufWritercopy). -
Cache-served metadata on compress walk (
DirEntry::metadata()instead of a freshCreateFileper file) — saves thousands of syscalls on big folders. -
Removed the redundant 4 MB
BufWriteron compress output — zstd already emits good-sized blocks; the buffer was a pure memcpy of every compressed byte. -
Tuned zstd multithreading —
JobSize(16MB)+OverlapSizeLog(0)at level 1, fewer thread handoffs. -
Dedicated oversubscribed write pool (3× core count) for extraction writes — correct sizing for workers that block in
CreateFileand Defender scans.
-
Multi-select coordinator hardened: handles
WAIT_ABANDONED(previous instance crashed holding the mutex) and stale coordinator-PID lockfiles — a second rapid launch can no longer silently no-op. - Round-trip verified lossless: mtime/ctime/Hidden/ReadOnly/System, Unicode names, deeply nested paths, and a 3000-file stress batch (SHA256-checked).
-
Extract Here: right-click
.zgx/.zip/.rar→ LRGEX → Extract Here (extracts to current folder, no subfolder)
- Removed
AppliesTofrom installer (was hiding the right-click menu on all files) - Added Extract Here to installer
.issfor all three archive extensions
- Fixed: right-click menu disappeared on all files due to malformed AppliesTo value
No changes (placeholder).
- Installer-based auto-update: updates now download and run the full installer (not just the bare exe), ensuring registry entries, icons, and file associations are always updated correctly.
- Installer filename now includes full version number (e.g. v1.2.0, not v1.2).
-
CloseApplications=forceandRestartApplications=noadded to installer for silent updates. - App silently exits when launched with no arguments (fixes post-update restart error).
No changes (placeholder).
-
Multi-format extraction:
.zipand.rarextraction added alongside.zgx. Magic-byte detection (zstd/zip/rar) with extension fallback. -
Real
.rarprogress: vendored unrar 0.5.8 with UCM_PROCESSDATA counter patch for byte-level extraction progress. -
Extract Here: right-click
.zgx/.zip/.rar→ Extract Here dumps contents into the current folder. -
Multi-select compress: selecting multiple files/folders and right-clicking Compress produces ONE
.zgxcontaining all items. - Signed auto-updates: Ed25519 signature verification, deferred until after operation completes.
-
8-byte uncompressed total header in
.zgxformat for accurate extraction progress. - Batch-parallel extraction: rayon batch writer (2048 entries/64MB) with directory cache for many-small-files workloads.
- Version badge in lower right of progress window.
- Shimmer animation on progress bar fill.
- Auto-close 2s after successful operation.
- Cancel kills process immediately — no orphan threads.
- Window icon from product logo.
- op-label/op-detail split: action word in white bold, filename in silver.
- ZIP backend switched to
deflate-flate2-zlib-ng(C-accelerated, 4× faster decompression). -
[profile.dev.package."*"] opt-level = 3— dependencies compiled at -O3 even in debug builds. - File preallocation (
set_len) for entries >1MB during extraction. - BufReader 256KB between zstd decoder and tar (reduced from 4MB to avoid cache eviction).
- Removed redundant BufReader before zstd decoder (it reads 128KB chunks natively).
- Folder name stripping:
x.mdfolder →x.zgx(notx.md.zgx). - Stable install path for right-click verbs (survives exe rebuilds).
- Empty directories now preserved through compress → extract round-trip.
- Atomic writes:
name.zgx.part→name.zgxonly on full success. - Cancel during compress deletes the partial archive.
- Zip-slip protection (path traversal guard for both
.zipand.zgxextraction). - Failed extraction no longer hangs the UI (shows "Failed" instead of freezing).
- Many-small-files extraction is limited by Windows Defender real-time scanning (~5-15 MB/s). This is a documented Windows limitation, not a code issue.
-
Right-click compression and extraction: one
LRGEXExplorer entry that opens a hover submenu (Compress on folders/files, Extract on.zgxarchives). Per-user, HKCU only, no UAC. -
.zgxarchive format: Double-clicking a.zgxextracts it. - Progress window: colored progress bar, live percent, MB/s, and ETA. A 500 ms heartbeat + animated spinner keep it from ever looking frozen, even on a cold cache.
-
Byte-based progress: percentage is always
bytes_done / bytes_total(never file-count), so a single huge file does not sit at a misleading percent. - Multi-threaded compression: parallel reads across all CPU cores, designed for multi-gigabyte folders.
-
Atomic archive writes: compress writes to
<name>.zgx.partand atomically renames to<name>.zgxonly on full success, so an interrupted or crashed compress can never leave a complete-looking partial archive. - Empty-directory preservation: directory entries are archived before their contents, so extraction restores the exact source tree, including empty folders.
-
Cancel cleans up: aborting a compress releases the
.partfile and deletes it — no orphaned half-files are left behind. -
Skip-with-warning on locked files: a single unreadable file does not fail a multi-GB job. The archive still publishes, and a
<name>.zgx.skipped.txtsidecar lists anything that could not be read (auto-deleted on the next clean run). - Signed auto-updates: Ed25519 signature verification on every update.
-
Per-user installer: Inno Setup,
PrivilegesRequired=lowest(no UAC prompt). -
Self-contained executable: a single ~14 MB
.exe, zero runtime dependencies.
Developed by LRGEX