Skip to content

Releases: fxrdhan/lez

lez v0.29.0

Choose a tag to compare

@github-actions github-actions released this 05 Oct 10:40
11fbc80

Behaviour Changes

  • A Theme Takes the Place of LS_COLORS: When lez reads a theme.yml, it no longer reads LS_COLORS. The system's dircolors often sets that variable for every program, and it used to override a theme's directory, executable and other colours. LEZ_COLORS and EZA_COLORS are still laid over the theme, and a glob there now colours a name ahead of the theme's filenames, extensions and mimetypes entries for it. To keep a colour from LS_COLORS beside a theme, give it in the theme or in LEZ_COLORS. Copying LS_COLORS into LEZ_COLORS wholesale is not a substitute, as some dircolors keys (tw, su, do) mean other things there. Under --no-config without --theme, LS_COLORS is read as before (eza#1700, eza#1224, #156).

  • QUOTING_STYLE Is Read: GNU ls's variable now sets the default quoting, after LEZ_QUOTING_STYLE and EZA_QUOTING_STYLE and before the configuration file:

    • literal quotes nothing.
    • shell and shell-escape are auto.
    • shell-always and shell-escape-always quote every name.
    • GNU's c, escape and locale have no counterpart and are passed over.

    A shell that sets the variable for ls now changes lez too. Set LEZ_QUOTING_STYLE or pass --quotes to 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 GNU ls since coreutils 9.2: *.c=33:*.C=36 tells C sources from C++ ones. Globs in LEZ_COLORS are weighed with those in LS_COLORS as 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_COLORS glob laid over it;
    • a built-in file type;
    • a file kind such as di, ex or ln=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 (or EZA_THEME), or name under [theme] in the configuration file read themes/NAME.yml or themes/NAME.yaml from the configuration directory instead of theme.yml. A name holding a directory is a path, and a theme that is not there is an error (eza#1945, #157).

  • .zip Inspection: --inspect-archives lists the files of a .zip as 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, or owner_width in the configuration file, cuts user and group names wider than COLS display columns and ends them in …. Numeric IDs and --json stay 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, as ls -N does: the same as --quotes=never. The last of --quotes, --no-quotes and --literal wins (eza#584, #157).

  • .tzst Archives: Zstandard tarballs named .tzst get the compressed colour and icon (eza#1956, #154).

Bug Fixes & Hardening

  • Control Characters in Archive Entries: --inspect-archives printed an entry's path as the archive stored it. A crafted .tar could 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, .rvm and .zsh_sessions are 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 and lez(1) say "color". --help also names the --colour, --colour-scale and --colour-scale-mode aliases, so a search for either spelling finds every colour option (eza#1243, #155).
  • Upstream Triage: docs/UPSTREAM_TRIAGE.md is 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_archive target joins the fuzz canary, and a test overwrites a .zip byte 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

Choose a tag to compare

@github-actions github-actions released this 04 Oct 05:25

Features & Enhancements

  • NUL-Separated Stdin: Add --stdin0, which reads paths separated by NUL as written by find -print0 or fd -0, whatever LEZ_STDIN_SEPARATOR says. The last of --stdin and --stdin0 wins (#143).
  • Styled Link Targets: Combine ln=target with style attributes, both in LS_COLORS/LEZ_COLORS (ln=target;3) and in theme.yml (foreground: target with is_italic: true). Broken links (or=) are unaffected (#135, #136).
  • Odin Icon: Give Odin source files an icon (#149).

Behaviour Changes

  • Shell-Safe Quoting: --quotes=auto quotes every name a shell would read differently, as GNU ls does, and writes a name holding a control character in ANSI-C quotes ($'new\nline'), which a shell reads back as the same name. --quotes=never and Windows keep the old escapes (#149).
  • JSON Output: --json writes 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_STYLE is read as GNU ls reads it, locale and posix-STYLE included. An invalid TIME_STYLE or LEZ_MIN_LUMINANCE is 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 --extended and --mounts), and refuse a layout flag beside --code, which replaces every layout (#149).
  • Security Context on Every Platform: -Z shows 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=C prints 15003 rather than 15,003 (#149).

Bug Fixes & Hardening

  • Multi-Hop Symlink Chains: Resolve each hop from its own link's directory, so a -> b -> file.pdf is followed to the end. A revisited link or a chain longer than 32 links counts as broken, and ln=target colours 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 -XF classifies a link by the end of its chain (dir/, run*) (#140, #147).
  • Absolute Paths of Links: --absolute=follow keeps 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 --hyperlink now 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 -X keeps links to directories, and --only-files -X keeps links that end at a regular file (#139, #146).
  • Missing Targets (mi=): mi= in LS_COLORS now colours the missing path a broken link points to, falling back to or when unset. An empty, 0 or 00 value of mi, ca or mh, as dircolors writes them, reads as unset (#141, #145, #149).
  • Themes and Icons: The l in the permissions column keeps only the link's attributes under ln=target. Built-in icons are kept when a theme sets default ones, totals stay bold when a theme leaves colourful out, 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-scale without a path shades the whole tree, -T -f draws 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-size costs no recursive I/O in a view that never prints sizes, a discovered config file that does not parse is reported, the absolute key takes effect, and an empty LEZ_CONFIG_FILE is passed over (#149).
  • Output: The listing is flushed before a message on stderr, --warn-hidden says "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 recent time style, CLICOLOR, LEZ_OVERRIDE_AUTO_COLOR, the ic colour key) and start documenting what it does (relative-recent:DAYS, LEZ_DEBUG, exit status 2, the hw and Finder-tag colour keys, every accepted ANSI code). --spacing gets 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_dir order, stat, GetFileAttributesW, locale -k, and GNU ls where 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 result check 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.toml stops 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

Choose a tag to compare

@github-actions github-actions released this 14 Sep 00:07

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

Choose a tag to compare

@github-actions github-actions released this 07 Sep 00:40

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

Choose a tag to compare

@github-actions github-actions released this 02 Sep 15:53

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

Choose a tag to compare

@github-actions github-actions released this 02 Sep 16:05

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

Choose a tag to compare

@github-actions github-actions released this 01 Sep 08:41

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: --code and --loc detect code blocks inside Markdown files and attribute lines to their respective languages (Rust, Python, Shell, SQL, etc.).
  • --blocks Flag: Display integer filesystem block counts, styled with bl in LS_COLORS.
  • --size-digits / --digits Flag: Configure size column precision (1–8 digits) via CLI or LEZ_SIZE_DIGITS.
  • Linux File Attributes & Flags: Extend -O / --flags to Linux (FS_IOC_GETFLAGS / lsattr).
  • Filter Composition: Support composed -D (directories) and -f (files) filter flags.

Performance Optimizations

  • Bypass Redundant Stat Probing: Skip unnecessary statx calls 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

Choose a tag to compare

@github-actions github-actions released this 26 Aug 07:16

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

  • -v no longer prints the version; use --version. It now orders embedded numbers by value, the way ls -v does.

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

Choose a tag to compare

@github-actions github-actions released this 26 Aug 05:54

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 anyhow and the RustSec advisory it carried, along with thiserror, getrandom, semver, and the wasm-encoder chain.
  • 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

Choose a tag to compare

@github-actions github-actions released this 26 Aug 04:04

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 readlink plus a stat on 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_by is stable, so the resulting order is unchanged.

Testing

  • Run the suite with cargo nextest run rather than cargo test, in CI, the justfile and the developer guide. cargo test runs 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 under cargo test and 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