ripgrep

Developer ToolsUnlicense OR MIT

Recursively search directories for a regex pattern, fast.

Latest 15.2.0 · by BurntSushiWebsitecrates.io · ripgrepRSS

Release activity

Release activity — 3 releases across 3 days in the last year. Each cell is one day; darker means more releases that day. Older weeks are hidden at this screen width.
JunJulAugSep
SundayNo releases on May 24, 2026No releases on May 31, 2026No releases on Jun 7, 2026No releases on Jun 14, 2026No releases on Jun 21, 2026No releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 2026No releases on Aug 16, 2026No releases on Aug 23, 2026No releases on Aug 30, 2026No releases on Sep 6, 2026
MondayNo releases on May 25, 2026No releases on Jun 1, 2026No releases on Jun 8, 2026No releases on Jun 15, 2026No releases on Jun 22, 2026No releases on Jun 29, 2026No releases on Jul 6, 2026No releases on Jul 13, 2026No releases on Jul 20, 2026No releases on Jul 27, 2026No releases on Aug 3, 2026No releases on Aug 10, 2026No releases on Aug 17, 2026No releases on Aug 24, 2026No releases on Aug 31, 2026No releases on Sep 7, 2026
TuesdayNo releases on May 26, 2026No releases on Jun 2, 2026No releases on Jun 9, 2026No releases on Jun 16, 2026No releases on Jun 23, 2026No releases on Jun 30, 2026No releases on Jul 7, 2026No releases on Jul 14, 2026No releases on Jul 21, 2026No releases on Jul 28, 2026No releases on Aug 4, 2026No releases on Aug 11, 2026No releases on Aug 18, 2026No releases on Aug 25, 2026No releases on Sep 1, 2026No releases on Sep 8, 2026
WednesdayNo releases on May 27, 2026No releases on Jun 3, 2026No releases on Jun 10, 2026No releases on Jun 17, 2026No releases on Jun 24, 2026No releases on Jul 1, 2026No releases on Jul 8, 20261 release on Jul 15, 2026No releases on Jul 22, 2026No releases on Jul 29, 2026No releases on Aug 5, 2026No releases on Aug 12, 2026No releases on Aug 19, 2026No releases on Aug 26, 2026No releases on Sep 2, 2026No releases on Sep 9, 2026
ThursdayNo releases on May 28, 2026No releases on Jun 4, 2026No releases on Jun 11, 2026No releases on Jun 18, 2026No releases on Jun 25, 2026No releases on Jul 2, 2026No releases on Jul 9, 2026No releases on Jul 16, 2026No releases on Jul 23, 2026No releases on Jul 30, 2026No releases on Aug 6, 2026No releases on Aug 13, 2026No releases on Aug 20, 2026No releases on Aug 27, 2026No releases on Sep 3, 2026No releases on Sep 10, 2026
FridayNo releases on May 29, 2026No releases on Jun 5, 2026No releases on Jun 12, 2026No releases on Jun 19, 2026No releases on Jun 26, 2026No releases on Jul 3, 2026No releases on Jul 10, 2026No releases on Jul 17, 2026No releases on Jul 24, 2026No releases on Jul 31, 2026No releases on Aug 7, 2026No releases on Aug 14, 2026No releases on Aug 21, 2026No releases on Aug 28, 2026No releases on Sep 4, 2026No releases on Sep 11, 2026
SaturdayNo releases on May 30, 2026No releases on Jun 6, 2026No releases on Jun 13, 2026No releases on Jun 20, 2026No releases on Jun 27, 2026No releases on Jul 4, 2026No releases on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 2026No releases on Aug 15, 2026No releases on Aug 22, 2026No releases on Aug 29, 2026No releases on Sep 5, 2026

3 releases in the last year

Changelog

What changed from 14 to 15

15.2.0

Latest
Added 2
  • aarch64-unknown-linux-musl is now included in the release binaries for ripgrep
  • ripgrep now respects GIT_CONFIG_GLOBAL and GIT_CONFIG_SYSTEM
Changed 1
  • Improve directory traversal time on very large corpora
Fixed 2
  • Don't check for the existence of .jj when --no-ignore is used
  • Fix gitignore matching bug when searching across multiple directories

From ripgrep

This release fixes a number of bugs related to gitignore matching as well as some performance improvements in directory tree traversal.

Platform support:

  • aarch64-unknown-linux-musl is now included in the release binaries for ripgrep.

Performance improvements:

  • PERF #3293: Improves directory traversal time on very large corpora.

Feature enhancements:

  • FEATURE #3275: ripgrep now respects GIT_CONFIG_GLOBAL and GIT_CONFIG_SYSTEM.

Bug fixes:

View originalPermalink
How 15.2.0 went

15.1.0

Added 1
  • Add hyperlink alias for Cursor
Fixed 1
  • Fix a regression with --line-buffered introduced in ripgrep 15.0.0

From ripgrep

This is a small release that fixes a bug with how ripgrep handles line buffering. This might manifest as ripgrep printing output later than you expect or not working correctly with tail -f (even if you're using the --line-buffered flag).

Bug fixes:

  • BUG #3194: Fix a regression with --line-buffered introduced in ripgrep 15.0.0.

Feature enhancements:

View originalPermalink
How 15.1.0 went

15.0.0

Added 6
  • Treat Jujutsu (`jj`) repositories as git repositories and respect their gitignores
  • Globs now support nested curly braces
  • Add `aarch64` release artifacts for Windows
  • Add `italic` to the list of available style attributes in `--color`
  • Add `highlight` color type for styling non-matching text in a matching line
  • Globs now support nested alternates
Changed 5
  • The `-r/--replace` flag now works with `--json`
  • Compile ripgrep binaries with full LTO enabled
  • Ignore UTF-8 BOM marker at the start of `.gitignore` and similar files
  • Fish shell completions take ripgrep's config file into account
  • Schedule files to search in order given on CLI when using multithreading
Fixed 13
  • Fix bugs related to gitignores from parent directories
  • Fix memory usage regression when handling very large gitignore files
  • Make `rg -vf file` where `file` is empty match everything
  • Fix bug where the 'bytes searched' in `--stats` output could be incorrect
  • Fix bug where ripgrep would mishandle globs that ended with a `.`
  • Fix bug with `-m/--max-count` and `-U/--multiline` showing too many matches
Removed 1
  • Stop generating `powerpc64` release artifacts

From ripgrep

ripgrep 15 is a new major version release of ripgrep that mostly has bug fixes, some minor performance improvements and minor new features. Here are some highlights:

  • Several bugs around gitignore matching have been fixed. This includes a commonly reported bug related to applying gitignore rules from parent directories.
  • A memory usage regression when handling very large gitignore files has been fixed.
  • rg -vf file, where file is empty, now matches everything.
  • The -r/--replace flag now works with --json.
  • A subset of Jujutsu (jj) repositories are now treated as if they were git repositories. That is, ripgrep will respect jj's gitignores.
  • Globs can now use nested curly braces.

Platform support:

  • aarch64 for Windows now has release artifacts.
  • powerpc64 no longer has release artifacts generated for it. The CI release workflow stopped working, and I didn't deem it worth my time to debug it. If someone wants this and can test it, I'd be happy to add it back.
  • ripgrep binaries are now compiled with full LTO enabled. You may notice small performance improvements from this and a modest decrease in binary size.

Performance improvements:

  • PERF #2111: Don't resolve helper binaries on Windows when -z/--search-zip isn't used.
  • PERF #2865: Avoid using path canonicalization on Windows when emitting hyperlinks.

Bug fixes:

  • BUG #829, BUG #2731, BUG #2747, BUG #2770, BUG #2778, BUG #2836, BUG #2933, BUG #3067: Fix bug related to gitignores from parent directories.
  • BUG #1332, BUG #3001: Make rg -vf file where file is empty match everything.
  • BUG #2177: Ignore a UTF-8 BOM marker at the start of .gitignore (and similar files).
  • BUG #2750: Fix memory usage regression for some truly large gitignore files.
  • BUG #2944: Fix a bug where the "bytes searched" in --stats output could be incorrect.
  • BUG #2990: Fix a bug where ripgrep would mishandle globs that ended with a ..
  • BUG #2094, BUG #3076: Fix bug with -m/--max-count and -U/--multiline showing too many matches.
  • BUG #3100: Preserve line terminators when using -r/--replace flag.
  • BUG #3108: Fix a bug where -q --files-without-match inverted the exit code.
  • BUG #3131: Document inconsistency between -c/--count and --files-with-matches.
  • BUG #3135: Fix rare panic for some classes of large regexes on large haystacks.
  • BUG #3140: Ensure hyphens in flag names are escaped in the roff text for the man page.
  • BUG #3155: Statically compile PCRE2 into macOS release artifacts on aarch64.
  • BUG #3173: Fix ancestor ignore filter bug when searching whitelisted hidden files.
  • BUG #3178: Fix bug causing incorrect summary statistics with --json flag.
  • BUG #3179: Fix gitignore bug when searching absolute paths with global gitignores.
  • BUG #3180: Fix a panicking bug when using -U/--multiline and -r/--replace.

Feature enhancements:

  • Many enhancements to the default set of file types available for filtering.
  • FEATURE #1872: Make -r/--replace work with --json.
  • FEATURE #2708: Completions for the fish shell take ripgrep's config file into account.
  • FEATURE #2841: Add italic to the list of available style attributes in --color.
  • FEATURE #2842: Directories containing .jj are now treated as git repositories.
  • FEATURE #2849: When using multithreading, schedule files to search in order given on CLI.
  • FEATURE #2943: Add aarch64 release artifacts for Windows.
  • FEATURE #3024: Add highlight color type, for styling non-matching text in a matching line.
  • FEATURE #3048: Globs in ripgrep (and the globset crate) now support nested alternates.
  • FEATURE #3096: Improve completions for --hyperlink-format in bash and fish.
  • FEATURE #3102: Improve completions for --hyperlink-format in zsh.
View originalPermalink
How 15.0.0 went

14.1.1

Fixed 1
  • Fix bug where ripgrep could miss some matches that it should report
Removed 1
  • Remove ripgrep's simd-accel feature because it was frequently broken

From ripgrep

This is a minor release with a bug fix for a matching bug. In particular, a bug was found that could cause ripgrep to ignore lines that should match. That is, false negatives. It is difficult to characterize the specific set of regexes in which this occurs as it requires multiple different optimization strategies to collide and produce an incorrect result. But as one reported example, in ripgrep, the regex (?i:e.x|ex) does not match e-x when it should. (This bug is a result of an inner literal optimization performed in the grep-regex crate and not in the regex crate.)

Bug fixes:

  • BUG #2884: Fix bug where ripgrep could miss some matches that it should report.

Miscellaneous:

  • MISC #2748: Remove ripgrep's simd-accel feature because it was frequently broken.
View originalPermalink
How 14.1.1 went

14.1.0

Added 1
  • Add release binaries for armv7-unknown-linux-gnueabihf, armv7-unknown-linux-musleabihf and armv7-unknown-linux-musleabi
Changed 2
  • Improve file type filtering for Lean and Meson
  • Improve completions for the fish shell
Fixed 1
  • Fix unbounded memory growth in the ignore crate

From ripgrep

This is a minor release with a few small new features and bug fixes. This release contains a bug fix for unbounded memory growth while walking a directory tree. This release also includes improvements to the completions for the fish shell, and release binaries for several additional ARM targets.

Bug fixes:

  • BUG #2664: Fix unbounded memory growth in the ignore crate.

Feature enhancements:

  • Added or improved file type filtering for Lean and Meson.
  • FEATURE #2684: Improve completions for the fish shell.
  • FEATURE #2702: Add release binaries for armv7-unknown-linux-gnueabihf, armv7-unknown-linux-musleabihf and armv7-unknown-linux-musleabi.
View originalPermalink
How 14.1.0 went

14.0.3

This is a patch release with a bug fix for the --sortr flag.

Bug fixes:

  • BUG #2664: Fix --sortr=path. I left a todo!() in the source. Oof.
View originalPermalink
How 14.0.3 went

14.0.2

This is a patch release with a few small bug fixes.

Bug fixes:

  • BUG #2654: Fix deb release sha256 sum file.
  • BUG #2658: Fix partial regression in the behavior of --null-data --line-regexp.
  • BUG #2659: Fix Fish shell completions.
  • BUG #2662: Fix typo in documentation for -i/--ignore-case.
View originalPermalink
How 14.0.2 went

14.0.1

This a patch release meant to fix cargo install ripgrep on Windows.

Bug fixes:

  • BUG #2653: Include pkg/windows/Manifest.xml in crate package.
View originalPermalink
How 14.0.1 went

14.0.0

ripgrep 14 is a new major version release of ripgrep that has some new features, performance improvements and a lot of bug fixes.

The headlining feature in this release is hyperlink support. In this release, they are an opt-in feature but may change to an opt-out feature in the future. To enable them, try passing --hyperlink-format default. If you use VS Code, then try passing --hyperlink-format vscode. Please report your experience with hyperlinks, positive or negative.

Another headlining development in this release is that it contains a rewrite of its regex engine. You generally shouldn't notice any changes, except for some searches may get faster. You can read more about the regex engine rewrite on my blog. Please report your performance improvements or regressions that you notice.

Finally, ripgrep switched the library it uses for argument parsing. Users should not notice a difference in most cases (error messages have changed somewhat), but flag overrides should generally be more consistent. For example, things like --no-ignore --ignore-vcs work as one would expect (disables all filtering related to ignore rules except for rules found in version control systems such as git).

BREAKING CHANGES:

  • rg -C1 -A2 used to be equivalent to rg -A2, but now it is equivalent to rg -B1 -A2. That is, -A and -B no longer completely override -C. Instead, they only partially override -C.

Build process changes:

  • ripgrep's shell completions and man page are now created by running ripgrep with a new --generate flag. For example, rg --generate man will write a man page in roff format on stdout. The release archives have not changed.
  • The optional build dependency on asciidoc or asciidoctor has been dropped. Previously, it was used to produce ripgrep's man page. ripgrep now owns this process itself by writing roff directly.

Performance improvements:

  • PERF #1746: Make some cases with inner literals faster.
  • PERF #1760: Make most searches with \b look-arounds (among others) much faster.
  • PERF #2591: Parallel directory traversal now uses work stealing for faster searches.
  • PERF #2642: Parallel directory traversal has some contention reduced.

Feature enhancements:

  • Added or improved file type filtering for Ada, DITA, Elixir, Fuchsia, Gentoo, Gradle, GraphQL, Markdown, Prolog, Raku, TypeScript, USD, V
  • FEATURE #665: Add a new --hyperlink-format flag that turns file paths into hyperlinks.
  • FEATURE #1709: Improve documentation of ripgrep's behavior when stdout is a tty.
  • FEATURE #1737: Provide binaries for Apple silicon.
  • FEATURE #1790: Add new --stop-on-nonmatch flag.
  • FEATURE #1814: Flags are now categorized in -h/--help output and ripgrep's man page.
  • FEATURE #1838: An error is shown when searching for NUL bytes with binary detection enabled.
  • FEATURE #2195: When extra-verbose mode is enabled in zsh, show extra file type info.
  • FEATURE #2298: Add instructions for installing ripgrep using cargo binstall.
  • FEATURE #2409: Added installation instructions for winget.
  • FEATURE #2425: Shell completions (and man page) can be created via rg --generate.
  • FEATURE #2524: The --debug flag now indicates whether stdin or ./ is being searched.
  • FEATURE #2643: Make -d a short flag for --max-depth.
  • FEATURE #2645: The --version output will now also contain PCRE2 availability information.

Bug fixes:

  • BUG #884: Don't error when -v/--invert-match is used multiple times.
  • BUG #1275: Fix bug with \b assertion in the regex engine.
  • BUG #1376: Using --no-ignore --ignore-vcs now works as one would expect.
  • BUG #1622: Add note about error messages to -z/--search-zip documentation.
  • BUG #1648: Fix bug where sometimes short flags with values, e.g., -M 900, would fail.
  • BUG #1701: Fix bug where some flags could not be repeated.
  • BUG #1757: Fix bug when searching a sub-directory didn't have ignores applied correctly.
  • BUG #1891: Fix bug when using -w with a regex that can match the empty string.
  • BUG #1911: Disable mmap searching in all non-64-bit environments.
  • BUG #1966: Fix bug where ripgrep can panic when printing to stderr.
  • BUG #2046: Clarify that --pre can accept any kind of path in the documentation.
  • BUG #2108: Improve docs for -r/--replace syntax.
  • BUG #2198: Fix bug where --no-ignore-dot would not ignore .rgignore.
  • BUG #2201: Improve docs for -r/--replace flag.
  • BUG #2288: -A and -B now only each partially override -C.
  • BUG #2236: Fix gitignore parsing bug where a trailing \/ resulted in an error.
  • BUG #2243: Fix --sort flag for values other than path.
  • BUG #2246: Add note in --debug logs when binary files are ignored.
  • BUG #2337: Improve docs to mention that --stats is always implied by --json.
  • BUG #2381: Make -p/--pretty override flags like --no-line-number.
  • BUG #2392: Improve global git config parsing of the excludesFile field.
  • BUG #2418: Clarify sorting semantics of --sort=path.
  • BUG #2458: Make --trim run before -M/--max-columns takes effect.
  • BUG #2479: Add documentation about .ignore/.rgignore files in parent directories.
  • BUG #2480: Fix bug when using inline regex flags with -e/--regexp.
  • BUG #2505: Improve docs for --vimgrep by mentioning footguns and some work-arounds.
  • BUG #2519: Fix incorrect default value in documentation for --field-match-separator.
  • BUG #2523: Make executable searching take .com into account on Windows.
  • BUG #2574: Fix bug in -w/--word-regexp that would result in incorrect match offsets.
  • BUG #2623: Fix a number of bugs with the -w/--word-regexp flag.
  • BUG #2636: Strip release binaries for macOS.
View originalPermalink
How 14.0.0 went
View all

Discussion