Repository navigation
Releases: fxrdhan/lez
Release list
lez v0.29.0
Behaviour Changes
-
A Theme Takes the Place of
LS_COLORS: When lez reads atheme.yml, it no longer readsLS_COLORS. The system'sdircolorsoften sets that variable for every program, and it used to override a theme's directory, executable and other colours.LEZ_COLORSandEZA_COLORSare still laid over the theme, and a glob there now colours a name ahead of the theme'sfilenames,extensionsandmimetypesentries for it. To keep a colour fromLS_COLORSbeside a theme, give it in the theme or inLEZ_COLORS. CopyingLS_COLORSintoLEZ_COLORSwholesale is not a substitute, as somedircolorskeys (tw,su,do) mean other things there. Under--no-configwithout--theme,LS_COLORSis read as before (eza#1700, eza#1224, #156). -
QUOTING_STYLEIs Read: GNUls's variable now sets the default quoting, afterLEZ_QUOTING_STYLEandEZA_QUOTING_STYLEand before the configuration file:literalquotes nothing.shellandshell-escapeareauto.shell-alwaysandshell-escape-alwaysquote every name.- GNU's
c,escapeandlocalehave no counterpart and are passed over.
A shell that sets the variable for
lsnow changes lez too. SetLEZ_QUOTING_STYLEor pass--quotesto keep lez's own style (eza#584, #157). -
Case Variants in
LS_COLORS: Globs still ignore letter case. Two that differ only in case and give different colours now each match only their own case, as in GNUlssince coreutils 9.2:*.c=33:*.C=36tells C sources from C++ ones. Globs inLEZ_COLORSare weighed with those inLS_COLORSas one list (eza#1576, #154).
Features & Enhancements
-
--explain: List each entry with the rule that chose the colour of its name and the one that chose its icon. The colour rule is one of:- a glob, with the variable it was given in;
- a theme entry, and any
LEZ_COLORSglob laid over it; - a built-in file type;
- a file kind such as
di,exorln=target.
The answers come from the code the listing runs, so they cannot drift from what it prints (eza#1954, #157).
-
Named Themes:
--theme=NAME,LEZ_THEME(orEZA_THEME), ornameunder[theme]in the configuration file readthemes/NAME.ymlorthemes/NAME.yamlfrom the configuration directory instead oftheme.yml. A name holding a directory is a path, and a theme that is not there is an error (eza#1945, #157). -
.zipInspection:--inspect-archiveslists the files of a.zipas it does those of a.tar. The reader takes them from the archive's central directory and decompresses nothing. It handles ZIP64, archive comments and data put in front of the archive, and reads names as UTF-8 or CP437 (eza#600, #157). -
--owner-width:--owner-width=COLS, orowner_widthin the configuration file, cuts user and group names wider thanCOLSdisplay columns and ends them in…. Numeric IDs and--jsonstay whole (eza#1760, eza#1948, #157). -
--group-dotfiles-first: List dotfiles before the rest within each directory group. With--group-directories-first --sort=extension, that lists directories, then dotfiles, then the other files by extension (eza#1920, #157). -
-N/--literal: Print names without quoting, asls -Ndoes: the same as--quotes=never. The last of--quotes,--no-quotesand--literalwins (eza#584, #157). -
.tzstArchives: Zstandard tarballs named.tzstget the compressed colour and icon (eza#1956, #154).
Bug Fixes & Hardening
- Control Characters in Archive Entries:
--inspect-archivesprinted an entry's path as the archive stored it. A crafted.tarcould send escape sequences to the terminal, and a newline split the row. Control characters in an entry are now shown as escapes, as they are in names on disk (#157). - Directory Icons:
.atom,.idea,.rvmand.zsh_sessionsare always directories, but their icons were filed under file names, where a directory is never looked up. They are now filed with the directory names, so they show (eza#1940, eza#1943, #153).
Documentation
- One Spelling of "color":
--help, the shell completions and the option lists in the README andlez(1)say "color".--helpalso names the--colour,--colour-scaleand--colour-scale-modealiases, so a search for either spelling finds every colour option (eza#1243, #155). - Upstream Triage:
docs/UPSTREAM_TRIAGE.mdis refreshed against upstream as of 2026-10-05, with the open bugs re-run against v0.28.5. Every pending decision is now settled; the SF Symbol overlays of eza#1949 are declined (#154, #156, #157).
Testing & Quality Assurance
- Debug Builds Within a Small Stack: Building the command-line parser took a frame of nearly a mebibyte in a debug build, the whole of a Windows main thread's stack, and a few more flags overflowed it. Each help heading's flags are now added by a function of their own, and a test holds the build to half a mebibyte (#157).
- Archive Readers Under Corrupt Input: A
fuzz_zip_archivetarget joins the fuzz canary, and a test overwrites a.zipbyte by byte and cuts it at every length (#157).
Checksums
362d7b988165300330e74b00de212f464017ed134df985b5878905461dc168a6 ./completions-v0.29.0.tar.gz
6ea7229f156b77720f8a88fc4d9be6abdc56a6a5b228598fa4b4495844b96f1b ./lez_0.29.0-1_amd64.deb
a20ac9657a0437456fbb24c1ce9b826b2a2ea19a1637862150c37d23853f04d5 ./lez_aarch64-apple-darwin.tar.gz
1666050ca9ddd03ef8e6489b14f5cc143652042cd35e1f54edf2d7063d77cf6b ./lez_aarch64-pc-windows-msvc.zip
b2e0160560d7020729bfb41e6444ceae45bc7efcbbc388931dbe417bfd1c90a9 ./lez_x86_64-apple-darwin.tar.gz
36ed05ab0a8ab7ee448ad85a415e6c1454d136bb8d823cb004e4d3c70eb79983 ./lez_x86_64-pc-windows-msvc.zip
26cb35ff820ddcee99acfac3dbc282476a88e693dec9dfd909dfd3e325158a5a ./lez_x86_64-unknown-linux-gnu.tar.gz
a9b0ba02a023647b5c5e28e8d1e6289db15a3ae3653d07ea7dcaea52003c7586 ./man-v0.29.0.tar.gz
lez v0.28.5
Features & Enhancements
- NUL-Separated Stdin: Add
--stdin0, which reads paths separated by NUL as written byfind -print0orfd -0, whateverLEZ_STDIN_SEPARATORsays. The last of--stdinand--stdin0wins (#143). - Styled Link Targets: Combine
ln=targetwith style attributes, both inLS_COLORS/LEZ_COLORS(ln=target;3) and intheme.yml(foreground: targetwithis_italic: true). Broken links (or=) are unaffected (#135, #136). - Odin Icon: Give Odin source files an icon (#149).
Behaviour Changes
- Shell-Safe Quoting:
--quotes=autoquotes every name a shell would read differently, as GNUlsdoes, and writes a name holding a control character in ANSI-C quotes ($'new\nline'), which a shell reads back as the same name.--quotes=neverand Windows keep the old escapes (#149). - JSON Output:
--jsonwrites every separator without a space, leaves the table's padding out of dates, ends the document with a newline, and leaves a link's target out under--no-symlink-targets(#149). - Environment Values Are Checked:
TIME_STYLEis read as GNUlsreads it,localeandposix-STYLEincluded. An invalidTIME_STYLEorLEZ_MIN_LUMINANCEis now an error (exit 3) instead of a silent fallback (#149). - Strict Mode: Accept the flags a view prints without
--long(--total-size,--print-total, and the tree's--extendedand--mounts), and refuse a layout flag beside--code, which replaces every layout (#149). - Security Context on Every Platform:
-Zshows a?column on macOS and Windows instead of being dropped silently (#149). - Locale-Aware Numbers: macOS and Windows group digits the way the locale does, so macOS under
LANG=Cprints15003rather than15,003(#149).
Bug Fixes & Hardening
- Multi-Hop Symlink Chains: Resolve each hop from its own link's directory, so
a -> b -> file.pdfis followed to the end. A revisited link or a chain longer than 32 links counts as broken, andln=targetcolours a link by the end of its chain (#138, #147). - Classify Indicators on Targets: A link to
/no longer prints-> //, a target keeps the trailing slash it was written with, and-XFclassifies a link by the end of its chain (dir/,run*) (#140, #147). - Absolute Paths of Links:
--absolute=followkeeps a link's own name in the long view instead of printing its target on both sides of the arrow, and gives a broken link in the working directory an absolute path, as--hyperlinknow does too (#141, #142, #145, #147). - Link Target Colours: Paint the path after
->in its file-kind colour, so directories, executables, pipes, sockets and devices keep theirs (#137, #144). - Dereference (
-X): Every column that describes the target (type, permissions, size, blocks, owner, links, inode and timestamps) reads the same file, a broken link falls back to its own permissions,--only-dirs -Xkeeps links to directories, and--only-files -Xkeeps links that end at a regular file (#139, #146). - Missing Targets (
mi=):mi=inLS_COLORSnow colours the missing path a broken link points to, falling back toorwhen unset. An empty,0or00value ofmi,caormh, asdircolorswrites them, reads as unset (#141, #145, #149). - Themes and Icons: The
lin the permissions column keeps only the link's attributes underln=target. Built-in icons are kept when a theme sets default ones, totals stay bold when a theme leavescolourfulout, an icon is painted in its name's colour, and the user's folders get their icons from a relative path (#149). - Tree, Grid and Colour Scale:
lez -lT --color-scalewithout a path shades the whole tree,-T -fdraws the edges of the whole tree, and the grid-details view spaces its columns and headers like the long view (#149). - Archives: Entry sizes come from the archive, PAX records included, and a listing cut short ends with
… (more than 500 entries)instead of a made-up entry (#149). - Lines of Code: A followed link's language is named after its target, nested block comments stay whole, Perl POD that opens with any command is counted, and here-documents in shell, Ruby, Perl and PHP count as text (#149).
- Options and Configuration: Error messages name the variable a bad value came from,
--total-sizecosts no recursive I/O in a view that never prints sizes, a discovered config file that does not parse is reported, theabsolutekey takes effect, and an emptyLEZ_CONFIG_FILEis passed over (#149). - Output: The listing is flushed before a message on stderr,
--warn-hiddensays "1 hidden item", a plist keeps its newlines, and a directory no longer holds its descriptor open after it is read (#149).
Documentation
- Docs Checked Against the Binary: The README and the man pages stop documenting what lez does not read (a
recenttime style,CLICOLOR,LEZ_OVERRIDE_AUTO_COLOR, theiccolour key) and start documenting what it does (relative-recent:DAYS,LEZ_DEBUG, exit status 2, thehwand Finder-tag colour keys, every accepted ANSI code).--spacinggets its real range, the theme outline its missing keys, the theme schema accepts styled symlinks, and-O's help names Linux (#152).
Testing & Quality Assurance
- Test Audit Against Independent Oracles: Every test that compared a fragment of the output now compares the whole of it against an independent source (
read_dirorder,stat,GetFileAttributesW,locale -k, and GNUlswhere it is the reference), and each fix fails its test against the old code. Line coverage rises from 91.98% to 93.35% (#149).
Distribution & CI Automation
- CI Gates: A single
CI resultcheck stands for the whole run, the stable rows build with stable Rust, Clippy runs on macOS and Windows, every cargo command uses--locked, the fuzz targets are compiled in the lint job, RustSec advisories are scanned weekly, and actions are pinned to commits with read-only tokens (#150, #151). - Release Dry Run: Run by hand or by a pull request that changes it, the release workflow builds and packages every target without publishing (#151).
- crates.io Publishing: The release workflow publishes the crate to crates.io once the GitHub release is out, by Trusted Publishing, so no registry token is stored; a dry run checks the package (#152).
- Release Notes from the Changelog: The GitHub release notes are this file's section for the version, and a tag that does not match
Cargo.tomlstops the release before anything is published. The Homebrew bump runs in a job of its own, so a tap token that cannot write no longer marks the release failed (#152). - Dependency Bumps: The weekly bump now pushes its branch and opens its pull request with a CI run, the Nix canary substitutes from cache.nixos.org, and the flake inputs are current (#148).
Checksums
0ee8b997da32e085932f8774f7beff8221f15c852b4a74fe25376a43c7c5f546 ./completions-v0.28.5.tar.gz
d95541016c1a76cdaf9cf8ac9873574d94a12b477cb3f027b1c5238580a90337 ./lez_0.28.5-1_amd64.deb
c4585a10d0177324fc491ef9a434b37abaf55245531a98dd5cff26306981bba9 ./lez_aarch64-apple-darwin.tar.gz
f3fb2d943ba19ff23b74a259e86f54b0a0e0c584db37f40e253f048f7e6ed1e5 ./lez_aarch64-pc-windows-msvc.zip
bf06267894de84116c1b4c4de9a9f0d138807909a6e7b5241cd91d31b56152a0 ./lez_x86_64-apple-darwin.tar.gz
f41652c592db2b3632ef4bcde226d462a22bcf9c7afb751d80958bf6952aef46 ./lez_x86_64-pc-windows-msvc.zip
6d7df36bb424fb576a1501255f59f4fbbe28c5580e237e20dc87a5bf10a614ab ./lez_x86_64-unknown-linux-gnu.tar.gz
9d1fd6c62f64e1a6df876f01e17ed86e2dbdc4724a772ad022038cb4587a9f23 ./man-v0.28.5.tar.gz
lez v0.28.4
Changelog
[0.28.4] - 2026-09-13
Bug Fixes
- Resolve novel core engine, loc, filter, and output bugs (#125)
- Resolve novel core engine, parser, traversal, and output formatting bugs (#126)
- Resolve novel configuration, parser, json engine, and renderer edge cases (#127)
- Resolve novel filter, git, json, parser, and loc engine defects (#128)
- Preserve cutoff directories in json and guard symlinks in code mode (#129)
- Resolve recursion cutoff directory preservation and code mode symlink dereference (#130)
- Resolve symlink cycles, raw stdin streaming, theme fallbacks, and loc engine defects (#133)
Miscellaneous Tasks
- Lez v0.28.4 changelogs, version bump
Refactor
- Modernise test suite, isolate environments, prune snapshots, and decompose monolith (#131)
- Modernize test suite, standardize naming conventions, and remediate audit defects (#132)
Ci
- Automate Homebrew tap formula updates on release
Checksums
4a413d9a55cc22aaaefc0d284092bcfb365426f34e53a4fd7a487be53bd9f852 ./completions-v0.28.4.tar.gz
0aef7a43629408f4f6f633e417f316237b75a52134513f459e192aabf94c87c9 ./lez_0.28.4-1_amd64.deb
ce424eb9a034a50561da5ee3f3fe7340a2dc42ccd59c21aea8f61cab6ba6c2ca ./lez_aarch64-apple-darwin.tar.gz
fe43e287786eefa9a3b12082158505e6c117cdd4a48109e2a3066370143c0641 ./lez_aarch64-pc-windows-msvc.zip
b8e2323736e6b93598745d63b52edb49171db3a32efa2dfa9f148ca89aa6f64e ./lez_x86_64-apple-darwin.tar.gz
07218b16419637c1e73657a34a144795ea54fceebd7f0209406c5a331a2bac1b ./lez_x86_64-pc-windows-msvc.zip
0d31d2505c3110a728efb947cd28f79a8fc0a76ac90e3bafa7a3cd12b9be7e6d ./lez_x86_64-unknown-linux-gnu.tar.gz
5e409f21df327a4327fe5bc3758413dee857f49797f77dce6b106aa32481d9aa ./man-v0.28.4.tar.gz
lez v0.28.3
Changelog
[0.28.3] - 2026-09-07
Bug Fixes
- Prevent file descriptor exhaustion and terminal freezes in recursive traversal (#124)
Documentation
- Specify gh run watch rule over polling in AGENTS.md
- Update performance benchmarks with v0.28.2 optimizations
Features
- Migrate icu4x from v1.5 to v2.3
Miscellaneous Tasks
- Update lockfile micro dependencies
- Bump phf from 0.13.1 to 0.14.0
- Bump toml from 0.8 to 1.1
- Lez v0.28.3 changelogs, version bump
Ci
- Ignore markdown files from CI and fuzz canary workflows
- Establish dev branch workflow and configure CI triggers
Checksums
6c6be7fec2502964bdeb6cde13f8c170d6d53dd38255010d85d6bb67301ef2f7 ./completions-v0.28.3.tar.gz
cf52cb53f95b61c7ed91f5c0577ca63e222148e40b0f6833e079826045dae233 ./lez_0.28.3-1_amd64.deb
a3fb2f8319f4c9b2c7b73816575342ef321c9b3dbe4e239d023bd3acf9345de1 ./lez_aarch64-apple-darwin.tar.gz
ad4f0a972d184a5904bbda601bd0a2f4f604881f502cbb0cfd689bbe83cd2fc9 ./lez_aarch64-pc-windows-msvc.zip
255a83efad1f58c53cae9da81ad72729dac8ac0e7754df784d70ee56950d40ac ./lez_x86_64-apple-darwin.tar.gz
8a2188108e10ae1a4c6b52f3a5402ac305b98fd1cef69415a7c23605e55fa1b6 ./lez_x86_64-pc-windows-msvc.zip
8e4daf807ac4e599d837e6f897e759e786da49846b87d6b3995764caf0e64e8e ./lez_x86_64-unknown-linux-gnu.tar.gz
4f3d6be901edcd40971f7040e23b2725938884b97c7fa64d3619a845fc20e38c ./man-v0.28.3.tar.gz
lez v0.28.2
Changelog
[0.28.2] - 2026-09-02
Bug Fixes
- Streamline zero-copy stdin streaming and standardize exit codes with test coverage
Documentation
- Update INSTALL.md with homebrew, shell installer, and cargo-binstall
Features
- Add --no-language flag and config to suppress language column
Miscellaneous Tasks
- Setup distribution packaging, homebrew tap formula, and release pipelines
- Include generated .SRCINFO in packaging
- Remove upstream references checklist item from PR template
- Lez v0.28.2 changelogs, version bump
Performance
- Optimize metadata caching, lazy evaluation, and syscall overhead
Refactor
- Eliminate unchecked unwraps and adopt Rust 2024 idioms across rendering and options
Ci
- Fix macos runner, deb packaging asset paths, and publish release directly
Checksums
be3f2904ed0fd1fc73cb24fb2250ff743e5d39ab2153b22f8ad7c67a2c343f32 ./completions-v0.28.2.tar.gz
a236ca6372aede44f71b2d681c920e93e27d05b60d78703fc5c076b8adf6c09f ./lez_0.28.2-1_amd64.deb
7725af03b62100ad1bd94ab155e33a23f7448f1a4231dbcbec4359c8382759a3 ./lez_aarch64-apple-darwin.tar.gz
5c515a0ca221aec7876999c4b8e03b705962ba47ddd2155915435b7f6548f35c ./lez_aarch64-pc-windows-msvc.zip
baa7b805674c434656a0ccd898b66c3e1b62ffb33921f69d07e73cd785df9cd3 ./lez_x86_64-apple-darwin.tar.gz
57895bb6aa1148d88c3a546b1646d780b2479f906c59574c66e3e572e95dfe4a ./lez_x86_64-pc-windows-msvc.zip
610e12406c696804159f4c661e701abc1d728dd315ef72acc6784244fc6b6de7 ./lez_x86_64-unknown-linux-gnu.tar.gz
d9c2b28261de57603d6da528ae8b2ff69fca62bd86508df276f7cfb07c1c00c5 ./man-v0.28.2.tar.gz
lez v0.28.1
Changelog
[0.28.1] - 2026-09-01
Bug Fixes
- Align sub-language tree branches flush left in code view
Features
- Add stacked sub-language code counting and precise file metrics (#111)
- Add first-class FileType::Data and data file styling (#112)
- Add full path quoting and configurable quote styling (#114)
- Add granular Windows hidden, system, and junction visibility controls
- Add configurable git status and repo indicator glyphs
- Add SELinux MCS translation support on Linux
- Add configurable decimal precision for percentages
- Support sorting and refine sub-language tree indentation in code view
Miscellaneous Tasks
- Format docs/config.example.toml
- Bump version to v0.28.1
Performance
- Optimize inner lexer hot path, directory traversal syscalls, and memoize file loc counts
Checksums
a6f78a4e9968e8e4164de5bc6c3a418afb3d34d5366fafc8f739c624c1d24390 ./completions-v0.28.1.tar.gz
37575f16df4b8c5d5936ae101353280ae5ad194e7eaa9b579e8e8642e79d2826 ./lez_aarch64-apple-darwin.tar.gz
59b6b2d519988bfdb5141c60f3e708790dc605a3773a3627241962e138e9f075 ./lez_aarch64-pc-windows-msvc.zip
1d006406fd6346f56e547d87896d308dcba610e8693f587c0f3f5f3e05c6f086 ./lez_x86_64-pc-windows-msvc.zip
07d32bf70b9d143b6d819131bd372c038351c190b33af3976ae0a2b3396719bc ./lez_x86_64-unknown-linux-gnu.tar.gz
98699436e9328a241148e0a75c85eb92ee0a9230a159152815594e6b1d08d716 ./man-v0.28.1.tar.gz
lez v0.28.0
What's New in v0.28.0
Features & Flag Updates
- Configuration File Support: Customize default CLI options via global (
~/.config/lez/config.toml), repository (.lez.toml), and--config=<PATH>files. - Polyglot Markdown LOC Counting:
--codeand--locdetect code blocks inside Markdown files and attribute lines to their respective languages (Rust, Python, Shell, SQL, etc.). --blocksFlag: Display integer filesystem block counts, styled withblinLS_COLORS.--size-digits/--digitsFlag: Configure size column precision (1–8 digits) via CLI orLEZ_SIZE_DIGITS.- Linux File Attributes & Flags: Extend
-O/--flagsto Linux (FS_IOC_GETFLAGS/lsattr). - Filter Composition: Support composed
-D(directories) and-f(files) filter flags.
Performance Optimizations
- Bypass Redundant Stat Probing: Skip unnecessary
statxcalls on styled regular files, reducing filesystem metadata syscalls by up to 99.7% on FUSE and network storage. - Parallelized Multi-Directory Pre-reading: Utilize Rayon thread pools for batch directory traversals and eliminate filename heap allocations.
- Rendering Fast Paths: Eliminate redundant pre-rendering sort passes in grid and line views.
Bug Fixes
- Fix option deduction precedence and strict-mode conflict edge cases with default configurations.
- Fix shell completion arguments and option repetition in zsh completions.
- Normalize timestamp and sorting behaviors across Windows and non-UTF-8 locales.
Checksums
29e5a504f84c292d6e93e4eab19da443019bdbca634727fc7525b9c71e432fb1 completions-v0.28.0.tar.gz
76e39fdbe889c273d54e3d0f025d52d3a82e9fd1926a7954ce3357a261904156 lez_aarch64-apple-darwin.tar.gz
6584cc1bc245844917955b50045ad074fefad36a033b447bd501df177a28efc9 lez_aarch64-pc-windows-msvc.zip
73bbce875e5e45fa2aff17ccc47246e3e3ae0454426c3e9a5cf1f0bd0ab4428f lez_x86_64-pc-windows-msvc.zip
cce7264292fe9a6890a3570bbdd0c85d16f0527cac38fe09536a1a81786667b6 lez_x86_64-unknown-linux-gnu.tar.gz
c21787e515c98ac77df4ea2afb5c8cf84953c52d771792502d4563121c529da7 man-v0.28.0.tar.gz
lez v0.27.0
Breaking: -v no longer prints the version. Use --version.
-v now orders embedded numbers by value, the way ls -v does:
lez -v → file1 file2 file3 file10 file20
Of the eighteen short flags this project spells differently from ls, -v was the only one that failed silently. Every other collision at least prints a listing; -v printed a version banner and exited, turning an ls reflex into a wrong answer rather than an error.
The ordering itself has not changed. Sorting by name already ran the collator with Numeric::On, so file2 already preceded file10 — the flag gives a familiar name to what the default already did. Whichever of -v and --sort comes last on the command line wins.
If you are coming from eza, where eza -v prints the version, this is the one habit that moves.
Full details in fxrdhan/lez#80.
Changelog
[0.27.0] - 2026-08-26
Breaking Changes
-vno longer prints the version; use--version. It now orders embedded numbers by value, the wayls -vdoes.
Bug Fixes
- The help text for the version flag read
Print help
Testing
- Update the powertest snapshot for the new
-v
Miscellaneous Tasks
- Lez v0.27.0
Checksums
bfdea3cafcf68a2e124a607aa0dfdd7c239cb8e7122a10a6cf1876caca3a2e9d ./completions-v0.27.0.tar.gz
8a81f44d3cf761917e4abc5d30c1bf1e1447e96e7c5404f91f02ebe4036d224c ./lez_aarch64-apple-darwin.tar.gz
c8c5e9f7d1cf61a04ab1a1667f1f7620aa41285779ca0981846fff94f06b41c4 ./lez_x86_64-pc-windows-msvc.zip
3bd3e8ea09d0d90ddf89c3b6b3f7d466d2d5dec5153f6e02f682d4e75d17d476 ./lez_x86_64-unknown-linux-gnu.tar.gz
c892e17707570c191759f08a2e92514b878b9a51267579750a060e212fc3a3ba ./man-v0.27.0.tar.gz
lez v0.26.1
A dependency refresh. No behaviour change and no source changes: the lockfile alone moves.
Eighty-six crates are upgraded, twenty-eight leave the dependency graph and six join it, taking the total from 245 to 223. Every move is semver-compatible.
anyhow leaves with them, and it carried the only RustSec finding against this tree — RUSTSEC-2026-0190, unsoundness in Error::downcast_mut(). cargo audit is now clean without anything being allowed through.
Full details in fxrdhan/lez#79.
Changelog
[0.26.1] - 2026-08-26
Miscellaneous Tasks
- Update the lockfile to current compatible versions. Among the direct dependencies: clap 4.5.59 to 4.6.6, libc 0.2.182 to 0.2.189, log 0.4.29 to 0.4.34, rayon 1.11.0 to 1.12.0, chrono 0.4.43 to 0.4.45, serde 1.0.228 to 1.0.229, and trycmd 1.0.0 to 1.2.1.
- Drop
anyhowand the RustSec advisory it carried, along withthiserror,getrandom,semver, and thewasm-encoderchain. - Lez v0.26.1
Checksums
e2c83a0de0b15fcb691f515b959aa4eaf24691596db9a3c59336de5dd2b88965 ./completions-v0.26.1.tar.gz
7d1c3f1567fb1b65841e18fab09abb572afd877a765580d731b4efd6b56e3d2c ./lez_aarch64-apple-darwin.tar.gz
8e180418b1ca01e1f0fe061b5028b2431e14111e569434c08270c1304da8faec ./lez_x86_64-pc-windows-msvc.zip
de6b0d20b616c65c2dabcde7225b0b8579743a35feb83afd51cbbd4a67fbb0c0 ./lez_x86_64-unknown-linux-gnu.tar.gz
576a3846e74883e2c90e43d042edc6ebf677501add4c0618fb7fe3a4604c0c31 ./man-v0.26.1.tar.gz
lez v0.26.0
Two runtime optimisations, with no change to output, plus a faster test runner.
Measured against v0.25.1 and against eza v0.23.5 on an Apple M1 Pro, 10 cores; release builds, warm cache, at least 35 interleaved runs per binary.
| Workload | v0.25.1 | v0.26.0 | eza 0.23.5 |
|---|---|---|---|
| Directory-grouped, 10k entries incl. 3k symlinks | 571.2 ms | 186.1 ms | 312.8 ms |
| Grid view, 10,000 files | 77.2 ms | 34.4 ms | 68.6 ms |
| Long view, 10,000 files | 205.4 ms | 162.2 ms | 175.7 ms |
| Recursive tree, 29,572 files | 310.9 ms | 308.9 ms | 565.9 ms |
| Long view with Git status | 21.6 ms | 22.3 ms | 20.8 ms |
No workload regressed, and output is byte-identical to v0.25.1 across five flag combinations on four directories. The README carries the full method and the commands to reproduce it.
Full details in fxrdhan/lez#78.
Changelog
[0.26.0] - 2026-08-26
Performance
- Cache whether a symlink points to a directory. Resolving one costs a
readlinkplus astaton the target, and the directory-grouping sort asked it twice per comparison — O(n log n) times per listing. - Sort listings above 2,048 entries on all cores. A comparison through the ICU collator costs far more than the byte comparison it replaces, and accounted for 58 ms of a 205 ms listing of 10,000 files.
par_sort_byis stable, so the resulting order is unchanged.
Testing
- Run the suite with
cargo nextest runrather thancargo test, in CI, the justfile and the developer guide.cargo testruns one test binary at a time and this suite is 91 binaries with a median of five tests each; the same 2,168 tests take 256 s undercargo testand 49 s under nextest.
Documentation
- Publish the benchmark against eza v0.23.5 in the README, with the machine, method and commands to reproduce it
- Record the macOS Gatekeeper exemption the test suite needs, without which a run takes 21 minutes with the machine 86% idle
Miscellaneous Tasks
- Lez v0.26.0
Checksums
2a1dcac3bb8356d54679742f3f1b27ca4ea896380356b1bbd1b17da8d40a6bed ./completions-v0.26.0.tar.gz
6d65f020041b1be0e504fba2e61294a38a717c4a6202dd3334e4fb9142c9ea6b ./lez_aarch64-apple-darwin.tar.gz
0969e295ef0e9e84ebaa4240085f7146e84da130d8bd7ae42a24b855b64aee68 ./lez_x86_64-pc-windows-msvc.zip
0bf66ee10ea5ebbfe1c94979a839e30bbb51ef6808c7ca5c48a6070f4d4065df ./lez_x86_64-unknown-linux-gnu.tar.gz
2804c7ac4611559a849c2ad990a94ebec49b438c423b626581b877ed0bf550c0 ./man-v0.26.0.tar.gz