Open-Source Wikis

/

ripgrep

/

Lore

BurntSushi/ripgrep

Lore

A timeline of how ripgrep evolved. Dates derive from git history, tag dates, and CHANGELOG.md entries. Where commits are silent on motivation, hedging language ("appears to have", "likely") is used.

Eras

The single-binary era (Sep 2016 – Aug 2018)

The repository's first commit is dated 2016-02-27 by Andrew Gallant (BurntSushi), titled simply "initial commit". For the first ~2.5 years, ripgrep was a single binary crate. The famous introductory blog post appeared the same year and pitched ripgrep on three claims: faster than grep, smarter defaults than ack/ag, full Unicode without the LC_ALL=C performance trick.

The ground rules established in this era — respect .gitignore, skip hidden and binary files by default, expose Rust's regex engine — have not changed since.

The libripgrep split (Aug 2018 – Mar 2020)

In August 2018, three commits all titled "libripgrep: initial commit introducing libripgrep" carved the search machinery out of the binary into independently-published library crates: grep-cli, grep-matcher, grep-pcre2, grep-printer, grep-regex, grep-searcher. The grep facade crate was added at the same time.

This re-architecture took about two months in calendar time but doubled the longevity of the project's ideas: any Rust application can now embed grep-style search without depending on the rg binary. Cargo, several language servers, and many build tools subsequently adopted ignore and globset as direct dependencies.

The release of ripgrep 0.10.0 in late 2018 was the first to ship the new layered design.

The workspace consolidation (Feb 2020)

On 2020-02-17, two commits — repo: move all source code in crates directory and repo: make ripgrep build with the new organization — moved every crate from its own top-level directory into crates/. The Cargo workspace was reorganised to declare members under crates/*. ripgrep 12.0.0 (Mar 2020) shipped with this layout.

This is the directory layout the project has today. The move was structural; no public APIs changed.

Quiet years (2020 – 2023)

After 12.0.0, the project entered a period of relative quiet. Commits per year:

  • 2020: 210
  • 2021: 118
  • 2022: 61

ripgrep 13.0.0 (Jun 2021) added new flags (--field-context-separator, --field-match-separator, --include-zero) but no architectural changes. The 2022 trough was the lowest commit count of any year in the project's history.

The 14.0.0 reflag rewrite (mid-2023 – Nov 2023)

In 2023, activity climbed sharply (275 commits) culminating in ripgrep 14.0.0 on 2023-11-26. The major change was a complete rewrite of the CLI argument-handling layer:

  • The previous clap-based parser was replaced by a hand-rolled parser using lexopt.
  • All flag definitions moved into a static &dyn Flag table in crates/core/flags/defs.rs.
  • LowArgs and HiArgs were introduced as the two-layer argument representation.
  • The man page, --help output, and shell completions began being generated from the same registry.

This is the design described in features: cli flags. It was a big change with no user-visible loss of functionality (every previous flag still works) and a much smaller dependency surface — clap and its transitive dependencies were dropped.

14.0.0 was followed by patch releases 14.0.1, 14.0.2, and 14.0.3 over the next month and a half cleaning up regressions, plus a minor 14.1.0 (Jan 2024) adding fish-shell completion improvements and a memory-leak fix in the ignore crate.

The 15.0.0 stabilisation (mid-2024 – Oct 2025)

After 14.1.1 (Sep 2024) — a one-bug-fix patch release — the project went quiet again until late summer 2025. Activity exploded:

  • September 2025: 77 commits
  • October 2025: 67 commits

These culminated in ripgrep 15.0.0 on 2025-10-15 and a small follow-up patch 15.1.0 on 2025-10-22. The CHANGELOG for 15.0.0 lists ~18 bug fixes and ~10 feature enhancements; the dominant theme is gitignore-correctness fixes that had accumulated as open issues for years.

Highlights:

  • A unified fix for parent-directory gitignore behaviour (rolled up eight separate issues: BUG #829, #2731, #2747, #2770, #2778, #2836, #2933, #3067).
  • Memory regressions on huge gitignore files fixed (BUG #2750).
  • Jujutsu (.jj) directories started being treated as git repositories for ignore purposes (FEATURE #2842).
  • aarch64 Windows release artifacts; powerpc64 artifacts dropped.
  • All distribution binaries now build with full LTO.
  • Globs got nested alternates: {a,b{c,d}} (FEATURE #3048).

Longest-standing features

  • The Matcher trait: introduced in the libripgrep split (Aug 2018). The interface has been mostly stable for nearly eight years. Default-method additions have happened, but the core required methods (find_at, confirm_match via internal iteration) are unchanged.
  • Walk and WalkBuilder: also from the libripgrep split. The parallel walker has gained options but the public API is largely the same as in 0.10.0.
  • The default-types table: present from the very first commits. It has grown with every release but the structure (name + glob list) is unchanged.
  • globset's three-index strategy (extension / basename / regex set): present essentially since the crate's first release. The implementation has been incrementally tuned but the architecture is the same.

Deprecated / removed features

  • The simd-accel feature: present from 0.10.0 era through 14.1.0. Removed in 14.1.1 (Sep 2024) because runtime SIMD dispatch in the underlying regex crate made the build-time feature redundant, and because the simd-accel build was frequently broken with newer Rust versions (cited as MISC #2748).
  • The avx-accel feature: deprecated alongside simd-accel. Both are still listed in crates/grep/Cargo.toml as no-op aliases for backwards compatibility.
  • powerpc64 release artifacts: dropped in 15.0.0 because the CI workflow stopped building successfully and the maintainer deemed it not worth the time to debug.
  • Various Ubuntu snap installation paths: still mentioned in the README as not recommended ("various snaps for ripgrep on Ubuntu are also available, but none of them seem to work right and generate a number of very strange bug reports..."). The recommendation is the binary .deb instead.

Major rewrites

Rewrite Date What changed
Library extraction (libripgrep) Aug 2018 Search engine carved out of the binary into seven library crates
Workspace reorganisation Feb 2020 All crates moved to crates/*, Cargo workspace consolidated
CLI parser rewrite 2023 (shipped in 14.0.0) clap replaced with lexopt + the hand-rolled Flag registry
Gitignore parent-dir handling 2025 (shipped in 15.0.0) Eight related bug reports rolled into a single unified fix

Growth trajectory

The repository started with one author and one binary. It has grown to:

  • 11 Cargo manifests (1 binary, 9 libraries, 1 fuzz target).
  • ~52K lines of Rust.
  • 465 unique contributors over a decade.
  • Active downstream library users beyond the rg binary itself.

But the activity profile has remained remarkably maintainer-centric: 1,534 of 2,209 commits (~69%) are by Andrew Gallant. The project's ability to absorb intermittent contributions from the long tail (single-commit file-type additions, completion script tweaks, doc fixes) is preserved by the strict code conventions documented in CONTRIBUTING and reflected in rustfmt.toml, clippy, and a thorough test harness — all of which give drive-by contributors clear acceptance criteria.

Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.

Lore – ripgrep wiki | Factory