mrkeyoor.com_
Sat 31 Oct 11:47 UTC
Dev Toolsevaluationupdated 26 Oct 2026

ripgrep review

ripgrep (rg) is a command-line tool for recursively searching files for regex matches. By default, it respects ignore rules and skips hidden paths and binary files. Those defaults suit source-code searches, but they also limit what an empty result tells you.

+134stars / 7d
Verdict

ripgrep is a reasonable choice for daily source-code search when its default filtering matches your task. Our October 11, 2026 run at commit 3fce3b5 completed a development build and cargo test with successful exits, but replayed summaries prevent a verified total-test claim. We did not measure search speed or verify an installed binary. Before treating an empty result as evidence of absence, check the search scope and filters.

We ran it

Lab card: what happened when we ran ripgrepScreenshot of ripgrep (github.com/BurntSushi/ripgrep)
Install✓ · 7s42 packages
Build✓ · 33s
Tests✓ · 15s900 passed · 0 failed of 900 (cargo test)
Repo236 files~56,658 lines of source · 3.3 MB · 2 CI workflows · tests dir

Answers from our run

Does ripgrep build from source?

Dependencies installed in 7 seconds (42 packages), and the build succeeded in 33 seconds. We cloned commit 3fce3b5 into a clean Debian container with 3 CPUs and no project-specific setup.

Do ripgrep's tests pass?

Yes. The project's own test command finished in 15 seconds and reported 900 passed, 0 failed (cargo test).

Who should not use ripgrep?

Authors who require a ubiquitous, POSIX-conforming command: the README recommends grep for that requirement.

What are the alternatives to ripgrep?

ugrep, ack. ripgrep is a reasonable choice for daily source-code search when its default filtering matches your task.

Setup4/5The README documents binaries and package-manager routes, and our dated development build succeeded. Dependency downloads do not prove CLI installation; binary routes and optional builds were not validated.
Docs4/5The supplied README explains filtering, installation, regex engines, replacement output, and source-build requirements. We did not validate every documented route.
Community3/5The supplied API snapshot reports an October 23, 2026 push, and issue 3548 received a maintainer response that day. This supports visible maintenance, not measured adoption or response-time guarantees.
Maturity3/5Release 15.2.0 documents concrete fixes, and the October 11 development build and test command exited successfully. Replayed summaries prevent verified total-test claims; platform and optional-feature coverage remain unmeasured.

Discussed on

  1. hnRipgrep – A new command line search tool740 points
  2. hnRipgrep 13.0547 points
  3. hnRipgrep 15.0476 points
  4. hnRipgrep 11 Released410 points
  5. hnRipgrep is faster than grep, ag, Git grep, ucg, pt, sift (2016)390 points

Who it’s for

Developers who want recursive code search with ignore rules applied automatically.
Terminal users on Windows, macOS, or Linux who need file-type filters.
Rust contributors evaluating a revision with a recorded successful development build and test-command exit, while keeping the unverified test totals in view.

Who it’s NOT for

Authors who require a ubiquitous, POSIX-conforming command: the README recommends grep for that requirement.
Users who expect default results to include every Git-tracked file regardless of ignore rules.
Users who need look-around or backreferences without enabling the optional PCRE2 engine.
Anyone expecting the replacement option to save edits to files: it rewrites search output.

Setup reality

In our recorded run on October 11, 2026, commit 3fce3b5bb0236da2df6d99672afb8a719642eca7 completed dependency setup in 6.731 seconds, the build step in 33.064 seconds, and the cargo test step in 14.516 seconds. Each step exited with code 0. The stored rounded timings are 7, 33, and 15 seconds. The setup tail shows crate downloads; it does not establish that rg was installed or available on PATH. The build tail identifies an unoptimized development build of ripgrep 15.2.0.

The historical parser stored 900 passed, 0 failed, and 900 total tests across 4 suites. Repeated Cargo summaries make those aggregates unverified as unique or exhaustive counts. We therefore report successful test-command execution without claiming that all 900 tests passed. The stored dependency count is 42, not a verified count of installed packages.

The recorded environment specifies lab-rust:1, 3 CPUs, and 12g memory. The image label does not establish the compiler version. There is no installed-binary check or measured search workload in the supplied record.

The README provides prebuilt binaries and package-manager routes. It names Rust 1.96.0 for source builds. Optional PCRE2 builds use a discoverable system library or compile bundled source with a C compiler; static MUSL builds have additional requirements. These routes were not separately validated in our run.

Decide which files should count

An empty ripgrep result can mean that the file you needed was outside the search set. The README says ripgrep searches recursively while respecting ignore rules and skipping hidden paths and binary files by default. That is useful for routine code search, where generated files and unrelated content can obscure matches.

Run rg payment in a source tree when those defaults fit the task. If you need a broader search, the README documents rg -uuu to disable automatic filtering. Choose the directory deliberately: removing filters expands the search, but it does not establish that you searched every relevant location.

What our recorded run establishes

Our stored run occurred on October 11, 2026, at commit 3fce3b5bb0236da2df6d99672afb8a719642eca7, abbreviated 3fce3b5. The environment record specifies lab-rust:1, 3 CPUs, and 12g memory. It does not identify the actual Rust compiler version.

The dependency-setup step exited successfully after 6.731 seconds. Its tail shows crates being downloaded. Calling this a completed CLI installation would overstate the evidence: the supplied record contains no installed-binary or PATH check. The stored dependency count is 42, which is not a verified count of packages installed by that step.

The build step exited successfully after 33.064 seconds. Its tail identifies ripgrep 15.2.0 and an unoptimized development profile, with Cargo reporting 31.00 seconds internally. The step duration and Cargo's internal duration measure different boundaries. This was not evidence of a release-profile build.

The recorded cargo test step exited with code 0 after 14.516 seconds. The stored rounded setup, build, and test durations are 7, 33, and 15 seconds, and the stored total run duration is 57 seconds.

The historical parser recorded 900 passed, 0 failed, and 900 total tests across 4 suites. However, the raw tail repeats an identical Cargo summary around a summary-replay marker. Those aggregates are not verified unique or exhaustive counts. Neither the stored 900 nor a total reconstructed by adding the visible summaries supports an all-tests-passed claim. The supported finding is that the recorded test command completed successfully; the README separately recommends cargo test --all for the full suite.

The repository scan recorded 236 files, approximately 56,658 lines of source, a 3.3 MB checkout, 2 CI workflows, and a tests directory. These describe the checkout and its structure. They do not measure test coverage, search throughput, security, or compatibility across operating systems. No search workload or optional-feature build matrix was measured.

Choose a setup route for your task

The README provides binary downloads for Windows, macOS, and Linux, plus package-manager instructions. The executable is called rg. Everyday users can choose a documented binary route without building Rust source, although we did not validate those installation routes in this run.

For source builds, the supplied README names Rust 1.96.0 as the minimum supported version, while noting that older versions may work. Optional PCRE2 support looks for a system library through pkg-config; otherwise, it builds PCRE2 from source with a C compiler. Static MUSL builds have separate requirements. Our successful development build does not validate every variant.

Check pattern and output behavior

The default regex engine does not support look-around or backreferences. The README documents optional PCRE2 support through -P and automatic engine selection for patterns that need it. Check pattern syntax when adapting an existing search command.

Compressed-file searching uses -z. External preprocessing can supply extracted document text. These are documented capabilities, not workloads exercised in our run. The replacement feature rewrites output based on matches; saving changes to files requires a separate editing step.

Git tracking does not override the search filters

Issue 3548 describes a globally ignored shell.nix file that the reporter had force-added to Git but did not find with ripgrep. This is the reporter's observation, not a reproduction from our sandbox.

The maintainer closed the issue as a duplicate on October 23, 2026. The response explains reasons for avoiding a default dependency on git ls-files, including requiring a Git binary and complications with ignore-file overrides. The practical lesson is to check ripgrep's filters rather than assume that tracking a file makes it part of the default search set.

For a ubiquitous, standards-based scripting requirement, the README recommends grep and explicitly says ripgrep does not conform to POSIX. Do not assume that installing ripgrep makes existing grep scripts equivalent.

Maintenance evidence and ratings

Release 15.2.0 documents fixes for gitignore matching and improvements to directory traversal. Those are upstream release claims, not performance results from our run. The supplied repository API snapshot reports a last push on October 23, 2026, and 212 open issues and pull requests combined. That combined count is not a count of confirmed defects. The issue list also contains October reports; their titles alone do not establish reproduced failures in the measured revision.

The scores use an editorial rubric: 1 means substantial documented obstacles, 2 means limited support or unresolved evidence gaps, 3 means useful support with material limits, 4 means strong support in the supplied evidence, and 5 requires broad corroboration across the dimension. These are judgments about the evidence, not measured product quality. Setup considers documented routes and observed execution; docs considers actionable explanations; community considers visible maintenance rather than adoption; maturity considers release history and validation scope.

ripgrep earns consideration for everyday code search because its documented defaults fit that job. ugrep documents a terminal interface and nested-archive searching; ack documents source-tree search in a Perl environment. We did not test either alternative. Start with the tool whose search boundary fits your work, then check that boundary before relying on a missing match.

Alternatives

ProjectWhat it isPick it when
ugrepA file-search tool whose repository describes a terminal interface and nested-archive searching.Consider it when you need an interactive terminal interface or searches inside archives. These are documented capabilities, not features we tested.
ackA Perl-based search tool for programmers searching source trees.Consider it when you want source-code search in a Perl environment. Its documented build prerequisites include Perl 5.10.1 or higher and File::Next.

What people are saying

  1. [github-trending] BurntSushi/ripgrep

Sources

  1. Ripgrep README
  2. Release 15.2.0
  3. Tracked file excluded by ignore rules, issue 3548
  4. Repository facts
  5. Recent issues and pull requests
  6. ugrep
  7. ack

More dev tools reviews

linux-insides · cat-catch · date-fns · okhttp · the-craft-of-selfteaching · skills · the whole board →