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 usinglexopt. - All flag definitions moved into a static
&dyn Flagtable incrates/core/flags/defs.rs. LowArgsandHiArgswere introduced as the two-layer argument representation.- The man page,
--helpoutput, 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). aarch64Windows release artifacts;powerpc64artifacts dropped.- All distribution binaries now build with full LTO.
- Globs got nested alternates:
{a,b{c,d}}(FEATURE #3048).
Longest-standing features
- The
Matchertrait: 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_matchvia internal iteration) are unchanged. WalkandWalkBuilder: 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-accelfeature: present from 0.10.0 era through 14.1.0. Removed in 14.1.1 (Sep 2024) because runtime SIMD dispatch in the underlyingregexcrate made the build-time feature redundant, and because thesimd-accelbuild was frequently broken with newer Rust versions (cited as MISC #2748). - The
avx-accelfeature: deprecated alongsidesimd-accel. Both are still listed incrates/grep/Cargo.tomlas no-op aliases for backwards compatibility. powerpc64release 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
.debinstead.
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
rgbinary 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.