Skip to content

Releases: mboworks/xff

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 20 Sep 21:54
Immutable release. Only release title and notes can be modified.
v0.8.0
c0c0b6d
  • Keep accelerated XZ CRC64 reads within their input buffers, including short and unaligned tails.

  • Support native productbuild XAR 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

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 19 Sep 22:02
Immutable release. Only release title and notes can be modified.
v0.7.0
0bcb461
  • 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_total in JSONL and quote ambiguous data labels
    in text tables, preserving real groups named total.

  • 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 --explain with 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 --explain from 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=summary with 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...
Read more

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 17 Sep 00:25
Immutable release. Only release title and notes can be modified.
v0.6.0
84bc696
  • Raise compiled-output CI cache budgets to 1 GB uncompressed by default and 3 GB for ASan.

  • Add --summary-scope for combined-root, per-root, and comparison statistics. In comparison mode,
    scopes select ordered column groups in one table: compare expands to left-total,right-total,
    diff to left-only,right-only,different, and each explicit category gets its own statistics.
    left and right alias the side totals; output labels use canonical names. Ordinary summaries
    default to compare during comparison and all otherwise; 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=0 consistently removes a prior limit;
    aligned summary output now works in comparison mode. Accept the implemented --summary=owner alias
    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 main first 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=md or markdown.

  • 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---top totals 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

Choose a tag to compare

@github-actions github-actions released this 15 Sep 06:20
Immutable release. Only release title and notes can be modified.
v0.5.0
98e10ab
  • 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=summary as shorthand for status comparison with per-path output disabled and
    a comparison summary enabled. --compare-select=none or an empty value suppresses records;
    summaries always count all comparison outcomes.

  • Add --summary=compare with 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

Choose a tag to compare

@github-actions github-actions released this 14 Sep 10:15
Immutable release. Only release title and notes can be modified.
v0.4.0
d0956d7
  • Use --block-policy-categories=LIST to 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 --xffrc files and unreadable existing configuration, including
    dangling symlinks and requested skips. Missing automatic system/user files remain normal.

  • Evaluate .xffrc admission controls in requested selector order, including composed configs.

  • Make --no-system-config and --no-user-config exclude named sections while retaining existing
    globals by default. --no-config combines those exclusions and disables .xffrc autoloading.

  • Add config-only --require-system-globals / --no-require-system-globals and
    --require-user-globals / --no-require-user-globals pairs. 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-xffrc controls 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 --re2 and --pcre as direct regex-engine selectors, plus BSD/macOS
    find-compatible -E using the configured extended grammar.

  • Add the always-available --regextype=ERE engine for native POSIX extended
    regular expressions, with platform locale semantics and explicit NUL handling.

  • Add distinct root-spanning traversal orders: --sort=roots sorts only the search operands,
    while --sort=global sorts 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 @destructive rule by a sensitive primary on the same line.

  • Clarify concurrency and matching controls, including worker defaults and -exec timing,
    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

Choose a tag to compare

@github-actions github-actions released this 09 Sep 12:59
Immutable release. Only release title and notes can be modified.
v0.3.7
d74a822
  • 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-config absolute: 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, --explain output, and -H / -L / -P symlink 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

Choose a tag to compare

@github-actions github-actions released this 07 Sep 18:30
Immutable release. Only release title and notes can be modified.
v0.3.6
ab69af0
  • Make --compare run 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 / -L symlink 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, including xff_full or an xff symlink. Downloads
    use a unique temporary directory and clean it on exit instead of polluting the caller's directory.
  • Publish xff and xff_full symmetrically: each has a directly downloadable, fully stripped
    executable and a matching .tar.zst containing 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

Choose a tag to compare

@github-actions github-actions released this 06 Sep 21:20
Immutable release. Only release title and notes can be modified.
v0.3.5
51b05a7
  • 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 for xff and 7.3% smaller for xff_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

Choose a tag to compare

@github-actions github-actions released this 06 Sep 14:50
Immutable release. Only release title and notes can be modified.
v0.3.4
2f01ebc
  • Restore the four directly downloadable platform binaries and additionally publish each platform's
    debug bundle as a level-19 Zstandard-compressed .tar.zst archive; do not publish .tar.gz
    duplicates.
  • Publish an attested SHA256SUMS manifest 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

Choose a tag to compare

@github-actions github-actions released this 06 Sep 12:17
Immutable release. Only release title and notes can be modified.
v0.3.3
2d9b192
  • 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.

Release resources