Repository navigation
Releases: mboworks/xff
Release list
v0.8.0
-
Keep accelerated XZ CRC64 reads within their input buffers, including short and unaligned tails.
-
Support native
productbuildXAR seek layouts, bounded source ranges, and shared decoder/range-buffer budgets. -
Read XAR packages and streamed PBZX/CPIO payloads on Linux and macOS in the existing full binary.
-
Upgrade toolchains_llvm to 1.9.1 and use Apple ld for macOS SDK 27 compatibility.
-
Order release navigation by common tasks, with Documentation last.
-
Add --help-format for all help targets, with format-aware width, color, and paging; remove
the selector format shorthand. -
Publish generated Markdown notices for both lean and full builds, linked from release downloads.
-
Double weekly/manual deep-fuzz campaigns to 600 seconds per target.
-
Refresh coverage PR state during normal publication instead of privileged close/reopen events.
-
Honor explicit configuration overrides when refreshing an already-published release site.
-
Link release and PR benchmark pages to retained measurements for the exact referenced commit.
-
Run and publish informational benchmarks after merge only; keep manual experiments artifact-only.
Install
Run either or both install blocks: the lean binary is installed as xff, and the all-features
binary as xff_full. Ensure ${HOME}/.local/bin is in PATH; the generated manual pages are
installed below ${HOME}/.local/share/man.
Release files without an archive suffix, such as xff-linux-x86_64, are the actual stripped
platform executables and can be downloaded and installed directly. Each matching .tar.zst
contains that same stripped executable together with its separate debug-information file.
Install on Linux x86_64:
XFF_VERSION=v0.8.0
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"
# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-linux-x86_64"
grep ' xff-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff-linux-x86_64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"
# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-linux-x86_64"
grep ' xff_full-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff_full-linux-x86_64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"Install on macOS:
XFF_VERSION=v0.8.0
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"
# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-macos-arm64"
grep ' xff-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff-macos-arm64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"
# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-macos-arm64"
grep ' xff_full-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff_full-macos-arm64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"Release resources
Component notices by download
xff-*: Lean build noticesxff_full-*: Full build notices
v0.7.0
-
Add informational paired benchmark history with raw measurements, variability, and explicit baselines.
-
Allow serialized coverage backfill from an existing completed CI run without rerunning tests.
-
Publish successful coverage despite unrelated CI failures, and show post-merge before
pre-merge within each PR in the two-phase coverage view. -
Show one coverage result per PR, replacing pre-merge with exact-commit post-merge coverage
when available; show both phases separately without repeated main runs or attempts. -
Refresh coverage overview ordering on PR merge, closure, or reopening without waiting for another CI run.
-
Run Python tooling tests and resource benchmarks through explicit Aspect Bazel targets and a
hermetic Python 3.13 interpreter; keep pre-commit focused on fast checks. -
Suggest similar registered flags, primaries, topics, and aliases for misspelled help selectors.
-
Order coverage reports by actual PR merge and tag timestamps, without standalone main rows.
Omit closed, unmerged PRs from the overview while retaining their reports. -
Rank fuzzy flag suggestions and show up to three candidates for misspelled options.
-
Avoid redundant help spacing in console, Markdown, and man-page output while preserving
intentional blank lines in code examples. -
Default help and width-controlled comparison summaries to
--width=auto:110. Support custom
automatic caps of at least 40 columns and persistent INI preferences, with explicit CLI overrides. -
Retain detailed coverage reports by CI run and attempt, with a published history index and
correct ordering for PRs merged through an aggregation branch. -
Clarify safety provenance names and enforce ASCII source text while preserving Unicode output.
Standardize multiline struct initializer formatting, including generated license registrations. -
Add a read-only benchmark harness for runtime logical content-read accounting on real files.
-
Derive shared expression behavior and help relationships from registry capabilities.
Treat every explicit archive mode consistently when archive support is unavailable. -
Escape control bytes in human-readable tables and tree labels, keeping unusual filenames
on one display line and preserving newline distinctions in Markdown. -
Distinguish aggregate summary rows with
is_totalin JSONL and quote ambiguous data labels
in text tables, preserving real groups namedtotal. -
Use grouped scope headers in console comparison summaries and compact scope rows when the table
exceeds--width. Preserve Unicode graphemes, numeric values, and machine-output accounting. -
Label console summary groupings and report omitted groups under
--top, including
machine-readable group counts in truncated JSONL tables. -
Export ordinary and comparison summaries as CSV/TSV with one shared schema and explicit row identity.
-
Group archive members correctly with
--summary=hash, using the active filesystem and
configured hash algorithm and encoding consistently with{hash}. -
Identify every JSONL summary row by request, grouping, and scope, retaining template text
and comparison roots so repeated and mixed summaries can be separated reliably. -
Extend
--explainwith effective worker limits, retained-state notes, active content-reading
fields, and advisory expression costs without running the search or executing actions. -
Reject invalid field templates before traversal or actions, including configured summaries and
comparison runs. Printf field escapes share quoted-placeholder parsing with ordinary templates. -
Explain inactive CLI modifiers for grep, diff, hash, shard, archive, and reduction output using the effective
configuration; dormant configured defaults remain quiet and valid. -
Resolve the current behavior values shown by
--explainfrom the complete configuration,
including named selections and explicit files, instead of only command-line flags. -
Show named-profile availability, declared behavior, skip and validation reasons, and physical
flag origins in configuration inspection, with small configuration recipes. -
Show effective safety decisions in
--explain, including mandatory and profile origins,
active modes, per-file categories, and expanded directory roots. -
Make default help a compact command and task guide, with direct routes to the complete
flag inventory and detailed reference; wrap the help title to the requested width.
Structure comparison guidance and keep safety tables readable with labeled rows on narrow terminals. -
Suggest close registered option and predicate spellings in usage errors, and explain when a
short global must be moved before the roots; command arguments remain literal. -
Explain comparison exit status for automation, including summary output, output selection,
filtered populations, and error precedence. -
Keep comparison summaries and listings physical when shard flags are present, preventing
mixed sets from being assigned wholly to their representative's comparison category. -
Apply shard grouping once to each collected summary/histogram population, preserving collection
placement and eliminating logical-set plus physical-member double counting. -
Explain physical files versus logical shard sets with tested examples covering classification,
actions, collection placement, reductions, duplicates, and comparison. -
Resolve archive filename sniffing from the final traversal mode, so a later all-mode selection
restores the filename gate after any-mode flags or named configuration selections. -
Add an order-and-limits guide covering actions, collections, summaries, packing,
parallel traversal, and comparison populations. -
Add executable archive-safety recipes for inspection, new archives, member deletion,
and writing reports only beneath a declared output root. -
Reject zero, negative, malformed, and overflowing histogram widths before traversal or actions,
including settings selected from configuration files. -
Render Markdown histograms as bucket/value tables and reject unsupported histogram formats
before traversal or actions, instead of silently emitting text bars. -
Comparison status and built-in grep output support JSONL records, including grep context and
counts. Non-UTF-8 values use lossless tagged base64 objects. Unsupported comparison formats
fail before traversal or expression actions. -
Reject duplicate normalized archive destinations before creating output.
--pack-duplicates=first
keeps the first collected input; dry-run validates the same member plan.
Named roots (--root=NAME=PATH) give inputs distinct archive directories. -
Avoid duplicate comparison tables when combining
--compare=summarywith bare--summary,
while retaining scoped totals and explicitly requested grouping tables. -
Lead the README with binary installation and common tasks before the detailed feature matrices.
-
Correct the release archive description: lean and full executables have separate archives,
each with its own matching debug symbols. -
Add regression coverage for Markdown table alignment after newline and pipe normalization.
-
Reject malformed, negative, or overflowing buffer limits before traversal and actions,
including limits selected from configuration files. -
Validate capture references in field consumers, including printf, grep templates, directory
execution, and columns; escaped literal references no longer hide unused captures.
Directory captures preserve implicit output consistently with ordinary captures. -
Correct binary-content help to state the exact 8,000-byte NUL sniff window.
Install
Run either or both install blocks: the lean binary is installed as xff, and the all-features
binary as xff_full. Ensure ${HOME}/.local/bin is in PATH; the generated manual pages are
installed below ${HOME}/.local/share/man.
Release files without an archive suffix, such as xff-linux-x86_64, are the actual stripped
platform executables and can be downloaded and installed directly. Each matching .tar.zst
contains that same stripped executable together with its separate debug-information file.
Install on Linux x86_64:
XFF_VERSION=v0.7.0
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"
# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-linux-x86_64"
grep ' xff-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff-linux-x86_64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"
# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-linux-x86_64"
grep ' xff_full-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff_full-linux-x86_64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"Install on macOS:
XFF_VERSION=v0.7.0
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"
# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-macos-arm64"
grep ' xff-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff-macos-arm64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"
# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/x...v0.6.0
-
Raise compiled-output CI cache budgets to 1 GB uncompressed by default and 3 GB for ASan.
-
Add
--summary-scopefor combined-root, per-root, and comparison statistics. In comparison mode,
scopes select ordered column groups in one table:compareexpands toleft-total,right-total,
difftoleft-only,right-only,different, and each explicit category gets its own statistics.
leftandrightalias the side totals; output labels use canonical names. Ordinary summaries
default tocompareduring comparison andallotherwise; explicit scopes override that default.
Scope selection requires an active ordinary summary; a comparison-results summary alone does not suffice. -
Support INI-only
${NAME},${NAME:-DEFAULT}, and${NAME:?MESSAGE}environment substitution,
with literal quoting, single-argument values, and unchanged validation of expanded safety roots. -
Preserve targeted Bazel preparation traces for coverage and fuzz to diagnose remaining CI delays.
-
Start coverage and fuzz CI jobs immediately while preserving all final merge checks.
-
Run fuzz campaigns concurrently after preparing all targets, with CPU/memory bounds, isolated
artifacts, per-target throughput statistics, and unchanged campaign time budgets. -
Raise coverage's CI cache allowance to 1.5 GB uncompressed and 1 GB compressed to retain more build outputs.
-
Allow MSan caches up to 4 GB uncompressed and 1.2 GB compressed; report per-job cache sizes
and repository-wide usage against the 10 GB budget in main's final CI job. -
Retire older main build caches immediately after a verified replacement upload, reducing
generation overlap while preserving previous caches when the replacement is missing or oversized. -
Preserve more reusable CI compilation outputs by evicting large cache blobs before small ones
with a 2.6 GB uncompressed allowance for sanitizer jobs; apply shared caching to deep fuzz and release reference generation. -
Reject invalid summary precision, negative or malformed top limits, comparison selections without
comparison, and unsupported summary formats.--top=0consistently removes a prior limit;
aligned summary output now works in comparison mode. Accept the implemented--summary=owneralias
in CLI validation. Clarify summary/compare accounting and exports. -
Refresh bounded CI compiled-output caches on main, reuse them in PR and release builds,
and remove closed-PR, tag-scoped, and superseded caches. GCC now caches compiled outputs. -
Add MBO Works artwork to the README and favicons to documentation and coverage Pages.
-
Keep
mainfirst in the coverage index, then interleave PRs and releases newest-first by
their merge or tagged commit in main’s history. -
Give Markdown summaries descriptive headings and bullet lists for labels and notes, separate
each table’s note from the next summary,
and align exact byte values with scaled sizes in console and Markdown tables. -
Render ordinary and comparison summary tables as Markdown with
--format=mdormarkdown. -
Show count, count percentage, size, and size percentage in summary tables. Comparison results
include directories and other matched entry types. Paired categories count each pair once and
include both sides' bytes; side-total groups count their own entries and bytes. Each summary
column group uses its own full pre---toptotals for percentages.
Install
Run either or both install blocks: the lean binary is installed as xff, and the all-features
binary as xff_full. Ensure ${HOME}/.local/bin is in PATH; the generated manual pages are
installed below ${HOME}/.local/share/man.
Release files without an archive suffix, such as xff-linux-x86_64, are the actual stripped
platform executables and can be downloaded and installed directly. Each matching .tar.zst
contains that same stripped executable together with its separate debug-information file.
Install on Linux x86_64:
XFF_VERSION=v0.6.0
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"
# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-linux-x86_64"
grep ' xff-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff-linux-x86_64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"
# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-linux-x86_64"
grep ' xff_full-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff_full-linux-x86_64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"Install on macOS:
XFF_VERSION=v0.6.0
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"
# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-macos-arm64"
grep ' xff-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff-macos-arm64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"
# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-macos-arm64"
grep ' xff_full-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff_full-macos-arm64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"Release resources
v0.5.0
-
Expand at most one related topic in focused flag help, with explicit selections checked at
compile time. Full HTML/Markdown references retain clickable related pointers, man pages name
their targets, and console long help stays compact; none expands navigation. -
Add copyable “See also” help commands across focused option, expression, and topic pages.
Related controls follow the registry relationships, and HTML/Markdown links use stable targets.
Full/long help keeps one copy of each detailed entry and topic without expanding navigation. -
Add contextual comparison help and related-control lists. Provide comprehensive
--help=regex
separately from--help=regextype, whose alphabetical value list is followed by the structured
grammar reference and a link to--help=regex. -
Add
--compare=summaryas shorthand for status comparison with per-path output disabled and
a comparison summary enabled.--compare-select=noneor an empty value suppresses records;
summaries always count all comparison outcomes. -
Add
--summary=comparewith status counts, percentages, and a total; bare--summary
selects it during tree comparison, including empty comparisons.
Install
Run either or both install blocks: the lean binary is installed as xff, and the all-features
binary as xff_full. Ensure ${HOME}/.local/bin is in PATH; the generated manual pages are
installed below ${HOME}/.local/share/man.
Release files without an archive suffix, such as xff-linux-x86_64, are the actual stripped
platform executables and can be downloaded and installed directly. Each matching .tar.zst
contains that same stripped executable together with its separate debug-information file.
Install on Linux x86_64:
XFF_VERSION=v0.5.0
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"
# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-linux-x86_64"
grep ' xff-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff-linux-x86_64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"
# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-linux-x86_64"
grep ' xff_full-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff_full-linux-x86_64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"Install on macOS:
XFF_VERSION=v0.5.0
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"
# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-macos-arm64"
grep ' xff-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff-macos-arm64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"
# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-macos-arm64"
grep ' xff_full-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff_full-macos-arm64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"Release resources
v0.4.0
-
Use
--block-policy-categories=LISTto select separate archive, temp, or output block controls
per INI file; unlisted categories use ordinary file controls. -
Fail before actions on invalid configuration globals and undefined selected or composed configs.
-
Reject command-line-only options and non-regular configuration targets; document directive scopes
in individual help entries and apply INI pager settings to listing output. -
Fix the user config location at the effective OS account home under
.config/xff/config;
environment variables cannot redirect trusted configuration. -
Reject missing explicit
--xffrcfiles and unreadable existing configuration, including
dangling symlinks and requested skips. Missing automatic system/user files remain normal. -
Evaluate
.xffrcadmission controls in requested selector order, including composed configs. -
Make
--no-system-configand--no-user-configexclude named sections while retaining existing
globals by default.--no-configcombines those exclusions and disables.xffrcautoloading. -
Add config-only
--require-system-globals/--no-require-system-globalsand
--require-user-globals/--no-require-user-globalspairs. Each pair appears once per permitted
file, in unsectioned globals; the system decision wins for user globals. Optional globals are
excluded only when a skip is requested. Missing automatic files remain normal. -
Add config-selectable
--allow-xffrc/--no-allow-xffrccontrols for explicitly named config
files, subject to the system policy gate and unavailable to the file being admitted. -
Document every config-only allow/deny control individually in
--help=config, including its
scope, permitted location, precedence, and multiplicity. -
Warn about overriding the same setting more than once within one logical config section while
preserving last-value-wins behavior. Deliberately accumulating settings, expression primaries,
separate sections and tiers, and all command-line repetitions remain unaffected. -
Apply named configuration and explicitly loaded config files at each command-line
selector's exact position instead of flattening them ahead of all CLI options. -
Defer regex matcher binding until the final configuration has selected grammar
and case, avoiding premature or duplicate compilation. -
Add
--re2and--pcreas direct regex-engine selectors, plus BSD/macOS
find-compatible-Eusing the configured extended grammar. -
Add the always-available
--regextype=EREengine for native POSIX extended
regular expressions, with platform locale semantics and explicit NUL handling. -
Add distinct root-spanning traversal orders:
--sort=rootssorts only the search operands,
while--sort=globalsorts the operands and walks each tree in deterministic depth-first order.
Clarify the ordering, directory read-ahead, result buffering, post-order, and score-ranking
contracts throughout the generated reference and parallel-walk design. -
Honor the selected path encoding in tree-comparison status records, including non-UTF-8 path
bytes, instead of emitting raw relative paths independently of the output configuration. -
Apply every matching system-policy safety-class denial to mixed config lines, so a destructive
primary cannot be hidden from an@destructiverule by a sensitive primary on the same line. -
Clarify concurrency and matching controls, including worker defaults and
-exectiming,
filesystem-native versus explicit case folding, block-size units, and regex grammar scope.
Install
Run either or both install blocks: the lean binary is installed as xff, and the all-features
binary as xff_full. Ensure ${HOME}/.local/bin is in PATH; the generated manual pages are
installed below ${HOME}/.local/share/man.
Release files without an archive suffix, such as xff-linux-x86_64, are the actual stripped
platform executables and can be downloaded and installed directly. Each matching .tar.zst
contains that same stripped executable together with its separate debug-information file.
Install on Linux x86_64:
XFF_VERSION=v0.4.0
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"
# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-linux-x86_64"
grep ' xff-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff-linux-x86_64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"
# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-linux-x86_64"
grep ' xff_full-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff_full-linux-x86_64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"Install on macOS:
XFF_VERSION=v0.4.0
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"
# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-macos-arm64"
grep ' xff-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff-macos-arm64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"
# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-macos-arm64"
grep ' xff_full-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff_full-macos-arm64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"Release resources
v0.3.7
- Publish an immutable, versioned documentation website for every release, with stable links to
the native standalone HTML reference, release notes, source documents, and coverage. Historical
snapshots remain available while the site root follows the latest stable release. - Restructure the generated reference with linked Markdown contents, clearer option groupings, a
command-grammar overview, and dedicated output and tree-comparison guides. Console and man-page
rendering remain compact, while HTML retains its single native navigation block. - Make
--no-configabsolute: it now consults no system, user, or explicitly named config file,
matching the expectation set by its name regardless of other config-option ordering. - Clarify config-selector stacking,
--explainoutput, and-H/-L/-Psymlink traversal
boundaries in the generated reference. - Test the complete suite with the same Clang, size optimization, ThinLTO, and linker settings as
the published binaries, eliminating duplicate release builds while smoke-testing the final
stripped artifacts. - Upgrade PCRE2 to 10.48, including its security fixes, Unicode 17 data, matching corrections, and
memory-use improvements. - Replace the legacy Bazel setup action and implicit cache with the current opt-in setup while
retaining XFF's explicitly partitioned and size-bounded CI caches.
Install
Run either or both install blocks: the lean binary is installed as xff, and the all-features
binary as xff_full. Ensure ${HOME}/.local/bin is in PATH; the generated manual pages are
installed below ${HOME}/.local/share/man.
Release files without an archive suffix, such as xff-linux-x86_64, are the actual stripped
platform executables and can be downloaded and installed directly. Each matching .tar.zst
contains that same stripped executable together with its separate debug-information file.
Install on Linux x86_64:
XFF_VERSION=v0.3.7
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"
# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-linux-x86_64"
grep ' xff-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff-linux-x86_64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"
# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-linux-x86_64"
grep ' xff_full-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff_full-linux-x86_64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"Install on macOS:
XFF_VERSION=v0.3.7
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"
# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-macos-arm64"
grep ' xff-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff-macos-arm64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"
# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-macos-arm64"
grep ' xff_full-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff_full-macos-arm64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"Release resources
v0.3.6
- Make
--comparerun two ordinary walks in parallel and compare their expression matches by
relative path. It no longer silently enables Git ignores, skips VCS metadata, forces tree sorting,
rejects expressions and file roots, or overrides-P/-H/-Lsymlink traversal. - Make release installation instructions explicit for both supported platforms and both binaries,
verifying each download before installation and generating its matching manual page. A generated
man page now uses the binary's invocation name, includingxff_fullor anxffsymlink. Downloads
use a unique temporary directory and clean it on exit instead of polluting the caller's directory. - Publish
xffandxff_fullsymmetrically: each has a directly downloadable, fully stripped
executable and a matching.tar.zstcontaining that executable and its separate debug file.
Install
Run either or both install blocks: the lean binary is installed as xff, and the all-features
binary as xff_full. Ensure ${HOME}/.local/bin is in PATH; the generated manual pages are
installed below ${HOME}/.local/share/man.
Release files without an archive suffix, such as xff-linux-x86_64, are the actual stripped
platform executables and can be downloaded and installed directly. Each matching .tar.zst
contains that same stripped executable together with its separate debug-information file.
Install on Linux x86_64:
XFF_VERSION=v0.3.6
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"
# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-linux-x86_64"
grep ' xff-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff-linux-x86_64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"
# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-linux-x86_64"
grep ' xff_full-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff_full-linux-x86_64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"Install on macOS:
XFF_VERSION=v0.3.6
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"
# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-macos-arm64"
grep ' xff-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff-macos-arm64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"
# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-macos-arm64"
grep ' xff_full-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff_full-macos-arm64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"Release resources
v0.3.5
- Shrink the installed Linux release binaries with LLD string-tail and branch optimization, safe
identical-code folding, and packed relative relocations. The measured AArch64 binaries are 12.9%
smaller forxffand 7.3% smaller forxff_full, without changing macOS or non-release builds.
Install
Download the executable for your platform (use the xff_full asset instead if you need every optional feature):
curl -LO https://github.com/mboworks/xff/releases/download/v0.3.5/xff-linux-x86_64
curl -LO https://github.com/mboworks/xff/releases/download/v0.3.5/SHA256SUMS
grep ' xff-linux-x86_64$' SHA256SUMS | sha256sum -c -
mkdir -p "$HOME/.local/bin" "$HOME/.local/share/man/man1"
install -m 0755 xff-linux-x86_64 "$HOME/.local/bin/xff"
"$HOME/.local/bin/xff" --pager=never --man > "$HOME/.local/share/man/man1/xff.1"On macOS ARM64, replace linux-x86_64 with macos-arm64 and verify with shasum -a 256 -c - instead. The .tar.zst asset for each platform contains both binaries and their matching debug files.
Release resources
v0.3.4
- Restore the four directly downloadable platform binaries and additionally publish each platform's
debug bundle as a level-19 Zstandard-compressed.tar.zstarchive; do not publish.tar.gz
duplicates. - Publish an attested
SHA256SUMSmanifest and include binary, checksum-verification, and generated
man-page installation instructions in every release.
Install
Download the executable for your platform (use the xff_full asset instead if you need every optional feature):
curl -LO https://github.com/mboworks/xff/releases/download/v0.3.4/xff-linux-x86_64
curl -LO https://github.com/mboworks/xff/releases/download/v0.3.4/SHA256SUMS
grep ' xff-linux-x86_64$' SHA256SUMS | sha256sum -c -
mkdir -p "$HOME/.local/bin" "$HOME/.local/share/man/man1"
install -m 0755 xff-linux-x86_64 "$HOME/.local/bin/xff"
"$HOME/.local/bin/xff" --pager=never --man > "$HOME/.local/share/man/man1/xff.1"On macOS ARM64, replace linux-x86_64 with macos-arm64 and verify with shasum -a 256 -c - instead. The .tar.zst asset for each platform contains both binaries and their matching debug files.
Release resources
v0.3.3
- Build release binaries with hermetic Clang,
-Oz, and ThinLTO; strip the published executables
and include their matching debug files in one archive per platform. - Test the exact release binaries in the default Linux and macOS CI jobs, and use the same staging
path for pull-request candidates and tagged releases.