Releases: BurntSushi/ripgrep
12.0.0
ripgrep 12 is a new major version release of ripgrep that contains many bug
fixes, several important performance improvements and a few minor new features.
In case you haven't heard of it before, ripgrep is a line-oriented search
tool that recursively searches your current directory for a regex pattern. By
default, ripgrep will respect your .gitignore
and automatically skip hidden
files/directories and binary files.
In a near future release, I am hoping to add an
indexing feature
to ripgrep, which will dramatically speed up searching by building an index.
Feedback would very much be appreciated, especially on the user experience
which will be difficult to get right.
This release has no known breaking changes.
Deprecations:
- The
--no-pcre2-unicode
flag is deprecated. Instead, use the--no-unicode
flag, which applies to both the default regex engine and PCRE2. For now,
--no-pcre2-unicode
and--pcre2-unicode
are aliases to--no-unicode
and--unicode
, respectively. The--[no-]pcre2-unicode
flags may be
removed in a future release. - The
--auto-hybrid-regex
flag is deprecated. Instead, use the new--engine
flag with theauto
value.
Performance improvements:
- PERF #1087:
ripgrep is smarter when detected literals are whitespace. - PERF #1381:
Directory traversal is sped up with speculative ignore-file existence checks. - PERF cd8ec38a:
Improve inner literal detection to cover more cases more effectively.
e.g.,+Sherlock Holmes +
now hasSherlock Holmes
extracted instead
of - PERF 6a0e0147:
Improve literal detection when the-w/--word-regexp
flag is used. - PERF ad97e9c9:
Improve overall performance of the-w/--word-regexp
flag.
Feature enhancements:
- Added or improved file type filtering for erb, diff, Gradle, HAML, Org,
Postscript, Skim, Slim, Slime, RPM Spec files, Typoscript, xml. - FEATURE #1370:
Add--include-zero
flag that shows files searched without matches. - FEATURE #1390:
Add--no-context-separator
flag that always hides context separators. - FEATURE #1414:
Add--no-require-git
flag to allow ripgrep to respect gitignores anywhere. - FEATURE #1420:
Add--no-ignore-exclude
to disregard rules in.git/info/exclude
files. - FEATURE #1466:
Add--no-ignore-files
flag to disable all--ignore-file
flags. - FEATURE #1488:
Add '--engine' flag for easier switching between regex engines. - FEATURE 75cbe88f:
Add--no-unicode
flag. This works on all supported regex engines.
Bug fixes:
- BUG #1291:
ripgrep now works in non-existent directories. - BUG #1319:
Fix match bug due to errant literal detection. - BUG #1335:
Fixes a performance bug when searching plain text files with very long lines.
This was a serious performance regression in some cases. - BUG #1344:
Document usage of--type all
. - BUG #1389:
Fixes a bug where ripgrep would panic when searching a symlinked directory. - BUG #1439:
Improve documentation for ripgrep's automatic stdin detection. - BUG #1441:
Remove CPU features from man page. - BUG #1442,
BUG #1478:
Improve documentation of the-g/--glob
flag. - BUG #1445:
ripgrep now respects ignore rules from .git/info/exclude in worktrees. - BUG #1485:
Fish shell completions from the release Debian package are now installed to
/usr/share/fish/vendor_completions.d/rg.fish
.
11.0.2
ripgrep 11.0.2 is a new patch release that fixes a few bugs, including a
performance regression and a matching bug when using the -F/--fixed-strings
flag.
In case you haven't heard of it before, ripgrep is a line-oriented search
tool that recursively searches your current directory for a regex pattern. By
default, ripgrep will respect your .gitignore
and automatically skip hidden
files/directories and binary files.
Feature enhancements:
- FEATURE #1293:
Added--glob-case-insensitive
flag that makes--glob
behave as--iglob
.
Bug fixes:
- BUG #1246:
Add translations to README, starting with an unofficial Chinese translation. - BUG #1259:
Fix bug where the last byte of a-f file
was stripped if it wasn't a\n
. - BUG #1261:
Document that no error is reported when searching for\n
with-P/--pcre2
. - BUG #1284:
Mention.ignore
and.rgignore
more prominently in the README. - BUG #1292:
Fix bug where--with-filename
was sometimes enabled incorrectly. - BUG #1268:
Fix major performance regression in GitHubx86_64-linux
binary release. - BUG #1302:
Show better error messages when a non-existent preprocessor command is given. - BUG #1334:
Fix match regression with-F
flag when patterns contain meta characters.
11.0.1
ripgrep 11.0.1 is a new patch release that fixes a search regression introduced
in the previous 11.0.0 release. In particular, ripgrep can enter an infinite
loop for some search patterns when searching invalid UTF-8.
Bug fixes:
- BUG #1247:
Fix search bug that can cause ripgrep to enter an infinite loop.
11.0.0
ripgrep 11 is a new major version release of ripgrep that contains many bug
fixes, some performance improvements and a few feature enhancements. Notably,
ripgrep's user experience for binary file filtering has been improved. See the
guide's new section on binary data for more details.
In case you haven't heard of it before, ripgrep is a line-oriented search
tool that recursively searches your current directory for a regex pattern. By
default, ripgrep will respect your .gitignore
and automatically skip hidden
files/directories and binary files.
This release also marks a change in ripgrep's versioning. Where as the previous
version was 0.10.0
, this version is 11.0.0
. Moving forward, ripgrep's
major version will be increased a few times per year. ripgrep will continue to
be conservative with respect to backwards compatibility, but may occasionally
introduce breaking changes, which will always be documented in this CHANGELOG.
See issue 1172 for a bit
more detail on why this versioning change was made.
This release increases the minimum supported Rust version from 1.28.0 to
1.34.0.
BREAKING CHANGES:
- ripgrep has tweaked its exit status codes to be more like GNU grep's. Namely,
if a non-fatal error occurs during a search, then ripgrep will now always
emit a2
exit status code, regardless of whether a match is found or not.
Previously, ripgrep would only emit a2
exit status code for a catastrophic
error (e.g., regex syntax error). One exception to this is if ripgrep is run
with-q/--quiet
. In that case, if an error occurs and a match is found,
then ripgrep will exit with a0
exit status code. - Supplying the
-u/--unrestricted
flag three times is now equivalent to
supplying--no-ignore --hidden --binary
. Previously,-uuu
was equivalent
to--no-ignore --hidden --text
. The difference is that--binary
disables
binary file filtering without potentially dumping binary data into your
terminal. That is,rg -uuu foo
should now be equivalent togrep -r foo
. - The
avx-accel
feature of ripgrep has been removed since it is no longer
necessary. All uses of AVX in ripgrep are now enabled automatically via
runtime CPU feature detection. Thesimd-accel
feature does remain available
(only for enabling SIMD for transcoding), however, it does increase
compilation times substantially at the moment.
Performance improvements:
Feature enhancements:
- Added or improved file type filtering for Apache Thrift, ASP, Bazel, Brotli,
BuildStream, bzip2, C, C++, Cython, gzip, Java, Make, Postscript, QML, Tex,
XML, xz, zig and zstd. - FEATURE #855:
Add--binary
flag for disabling binary file filtering. - FEATURE #1078:
Add--max-columns-preview
flag for showing a preview of long lines. - FEATURE #1099:
Add support for Brotli and Zstd to the-z/--search-zip
flag. - FEATURE #1138:
Add--no-ignore-dot
flag for ignoring.ignore
files. - FEATURE #1155:
Add--auto-hybrid-regex
flag for automatically falling back to PCRE2. - FEATURE #1159:
ripgrep's exit status logic should now match GNU grep. See updated man page. - FEATURE #1164:
Add--ignore-file-case-insensitive
for case insensitive ignore globs. - FEATURE #1185:
Add-I
flag as a short option for the--no-filename
flag. - FEATURE #1207:
Addnone
value to-E/--encoding
to forcefully disable all transcoding. - FEATURE da9d7204:
Add--pcre2-version
for querying showing PCRE2 version information.
Bug fixes:
- BUG #306,
BUG #855:
Improve the user experience for ripgrep's binary file filtering. - BUG #373,
BUG #1098:
**
is now accepted as valid syntax anywhere in a glob. - BUG #916:
ripgrep no longer hangs when searching/proc
with a zombie process present. - BUG #1052:
Fix bug where ripgrep could panic when transcoding UTF-16 files. - BUG #1055:
Suggest-U/--multiline
when a pattern contains a\n
. - BUG #1063:
Always strip a BOM if it's present, even for UTF-8. - BUG #1064:
Fix inner literal detection that could lead to incorrect matches. - BUG #1079:
Fixes a bug where the order of globs could result in missing a match. - BUG #1089:
Fix another bug where ripgrep could panic when transcoding UTF-16 files. - BUG #1091:
Add note about inverted flags to the man page. - BUG #1093:
Fix handling of literal slashes in gitignore patterns. - BUG #1095:
Fix corner cases involving the--crlf
flag. - BUG #1101:
Fix AsciiDoc escaping for man page output. - BUG #1103:
Clarify what--encoding auto
does. - BUG #1106:
--files-with-matches
and--files-without-match
work with one file. - BUG #1121:
Fix bug that was triggering Windows antimalware when using the--files
flag. - BUG #1125,
BUG #1159:
ripgrep shouldn't panic forrg -h | rg
and should emit correct exit status. - BUG #1144:
Fixes a bug where line numbers could be wrong on big-endian machines. - BUG #1154:
Windows files with "hidden" attribute are now treated as hidden. - BUG #1173:
Fix handling of**
patterns in gitignore files. - BUG #1174:
Fix handling of repeated**
patterns in gitignore files. - BUG #1176:
Fix bug where-F
/-x
weren't applied to patterns given via-f
. - BUG #1189:
Document cases where ripgrep may use a lot of memory. - BUG #1203:
Fix a matching bug related to the suffix literal optimization. - BUG 8f14cb18:
Increase the default stack size for PCRE2's JIT.
0.10.0
ripgrep is a line-oriented search tool that recursively searches your current directory for a regex pattern while respecting your gitignore rules. ripgrep has first class support on Windows, macOS and Linux, with binary downloads available for every release. ripgrep is similar to other popular search tools like The Silver Searcher, ack and grep.
This is a new minor version release of ripgrep that contains some major new
features, a huge number of bug fixes, and is the first release based on
libripgrep. The entirety of ripgrep's core search and printing code has been
rewritten and generalized so that anyone can make use of it.
Major new features include PCRE2 support, multi-line search and a JSON output
format.
BREAKING CHANGES:
- The minimum version required to compile Rust has now changed to track the
latest stable version of Rust. Patch releases will continue to compile with
the same version of Rust as the previous patch release, but new minor
versions will use the current stable version of the Rust compile as its
minimum supported version. - The match semantics of
-w/--word-regexp
have changed slightly. They used
to be\b(?:<your pattern>)\b
, but now it's
(?:^|\W)(?:<your pattern>)(?:$|\W)
. This matches the behavior of GNU grep
and is believed to be closer to the intended semantics of the flag. See
#389 for more details.
Feature enhancements:
- FEATURE #162:
libripgrep is now a thing. The primary crate is
grep
. - FEATURE #176:
Add-U/--multiline
flag that permits matching over multiple lines. - FEATURE #188:
Add-P/--pcre2
flag that gives support for look-around and backreferences. - FEATURE #244:
Add--json
flag that prints results in a JSON Lines format. - FEATURE #321:
Add--one-file-system
flag to skip directories on different file systems. - FEATURE #404:
Add--sort
and--sortr
flag for more sorting. Deprecate--sort-files
. - FEATURE #416:
Add--crlf
flag to permit$
to work with carriage returns on Windows. - FEATURE #917:
The--trim
flag strips prefix whitespace from all lines printed. - FEATURE #993:
Add--null-data
flag, which makes ripgrep use NUL as a line terminator. - FEATURE #997:
The--passthru
flag now works with the--replace
flag. - FEATURE #1038-1:
Add--line-buffered
and--block-buffered
for forcing a buffer strategy. - FEATURE #1038-2:
Add--pre-glob
for filtering files through the--pre
flag.
Bug fixes:
- BUG #2:
Searching with non-zero context can now use memory maps if appropriate. - BUG #200:
ripgrep will now stop correctly when its output pipe is closed. - BUG #389:
The-w/--word-regexp
flag now works more intuitively. - BUG #643:
Detection of readable stdin has improved on Windows. - BUG #441,
BUG #690,
BUG #980:
Matching empty lines now works correctly in several corner cases. - BUG #764:
Color escape sequences now coalesce, which reduces output size. - BUG #842:
Add man page to binary Debian package. - BUG #922:
ripgrep is now more robust with respect to memory maps failing. - BUG #937:
Color escape sequences are no longer emitted for empty matches. - BUG #940:
Context from the--passthru
flag should not impact process exit status. - BUG #984:
Fixes bug inignore
crate where first path was always treated as a symlink. - BUG #990:
Read stderr asynchronously when running a process. - BUG #1013:
Add compile time and runtime CPU features to--version
output. - BUG #1028:
Don't complete bare pattern after-f
in zsh.
0.9.0
This is a new minor version release of ripgrep that contains some minor new
features and a panoply of bug fixes.
Releases provided on Github for x86_64
will now work on all target CPUs, and
will also automatically take advantage of features found on modern CPUs (such
as AVX2) for additional optimizations.
This release increases the minimum supported Rust version from 1.20.0 to
1.23.0.
It is anticipated that the next release of ripgrep (0.10.0) will provide
multi-line search support and a JSON output format.
BREAKING CHANGES:
- When
--count
and--only-matching
are provided simultaneously, the
behavior of ripgrep is as if the--count-matches
flag was given. That is,
the total number of matches is reported, where there may be multiple matches
per line. Previously, the behavior of ripgrep was to report the total number
of matching lines. (Note that this behavior diverges from the behavior of
GNU grep.) - Octal syntax is no longer supported. ripgrep previously accepted expressions
like\1
as syntax for matchingU+0001
, but ripgrep will now report an
error instead. - The
--line-number-width
flag has been removed. Its functionality was not
carefully considered with all ripgrep output formats.
See #795 for more
details.
Feature enhancements:
- Added or improved file type filtering for Android, Bazel, Fuschia, Haskell,
Java and Puppet. - FEATURE #411:
Add a--stats
flag, which emits aggregate statistics after search results. - FEATURE #646:
Add a--no-ignore-messages
flag, which suppresses parse errors from reading
.ignore
and.gitignore
files. - FEATURE #702:
Support\u{..}
Unicode escape sequences. - FEATURE #812:
Add-b/--byte-offset
flag that shows the byte offset of each matching line. - FEATURE #814:
Add--count-matches
flag, which is like--count
, but for each match. - FEATURE #880:
Add a--no-column
flag, which disables column numbers in the output. - FEATURE #898:
Add support forlz4
when using the-z/--search-zip
flag. - FEATURE #924:
termcolor
has moved to its own repository:
https://github.com/BurntSushi/termcolor - FEATURE #934:
Add a new flag,--no-ignore-global
, that permits disabling global
gitignores. - FEATURE #967:
Rename--maxdepth
to--max-depth
for consistency. Keep--maxdepth
for
backwards compatibility. - FEATURE #978:
Add a--pre
option to filter inputs with an arbitrary program. - FEATURE fca9709d:
Improve zsh completion.
Bug fixes:
- BUG #135:
Release portable binaries that conditionally use SSSE3, AVX2, etc., at
runtime. - BUG #268:
Print descriptive error message when trying to use look-around or
backreferences. - BUG #395:
Show comprehensible error messages for regexes like\s*{
. - BUG #526:
Support backslash escapes in globs. - BUG #795:
Fix problems with--line-number-width
by removing it. - BUG #832:
Clarify usage instructions for-f/--file
flag. - BUG #835:
Fix small performance regression while crawling very large directory trees. - BUG #851:
Fix-S/--smart-case
detection once and for all. - BUG #852:
Be robust with respect toENOMEM
errors returned bymmap
. - BUG #853:
Upgradegrep
crate toregex-syntax 0.6.0
. - BUG #893:
Improve support for git submodules. - BUG #900:
When no patterns are given, ripgrep should never match anything. - BUG #907:
ripgrep will now stop traversing after the first file when--quiet --files
is used. - BUG #918:
Don't skip tar archives when-z/--search-zip
is used. - BUG #934:
Don't respect gitignore files when searching outside git repositories. - BUG #948:
Use exit code 2 to indicate error, and use exit code 1 to indicate no
matches. - BUG #951:
Add stdin example to ripgrep usage documentation. - BUG #955:
Use buffered writing when not printing to a tty, which fixes a performance
regression. - BUG #957:
Improve the error message shown for--path separator /
in some Windows
shells. - BUG #964:
Add a--no-fixed-strings
flag to disable-F/--fixed-strings
. - BUG #988:
Fix a bug in theignore
crate that prevented the use of explicit ignore
files after disabling all other ignore rules. - BUG #995:
Respect$XDG_CONFIG_DIR/git/config
for detectingcore.excludesFile
.
0.8.1
This is a patch release of ripgrep that primarily fixes regressions introduced
in 0.8.0 (#820 and #824) in directory traversal on Windows. These regressions
do not impact non-Windows users.
Feature enhancements:
- Added or improved file type filtering for csv and VHDL.
- FEATURE #798:
Addunderline
support totermcolor
and ripgrep. See documentation on the
--colors
flag for details.
Bug fixes:
- BUG #684:
Improve documentation for the--ignore-file
flag. - BUG #789:
Don't show(rev )
if the revision wasn't available during the build. - BUG #791:
Add man page to ARM release. - BUG #797:
Improve documentation for "intense" setting intermcolor
. - BUG #800:
Fix a bug in theignore
crate for custom ignore files. This had no impact
on ripgrep. - BUG #807:
Fix a bug whererg --hidden .
behaved differently fromrg --hidden ./
. - BUG #815:
Clarify a common failure mode in user guide. - BUG #820:
Fixes a bug on Windows where symlinks were followed even if not requested. - BUG #824:
Fix a performance regression in directory traversal on Windows.
0.8.0
This is a new minor version releae of ripgrep that satisfies several popular
feature requests (config files, search compressed files, true colors), fixes
many bugs and improves the quality of life for ripgrep maintainers. This
release also includes greatly improved documentation in the form of a
User Guide and a FAQ.
This release increases the minimum supported Rust version from 1.17 to
1.20.
BREAKING CHANGES:
Note that these are all very minor and unlikely to impact most users.
- In order to support configuration files, flag overrides needed to be
rethought. In some cases, this changed ripgrep's behavior. For example,
in ripgrep 0.7.1,rg foo -s -i
will perform a case sensitive search
since the-s/--case-sensitive
flag was defined to always take precedence
over the-i/--ignore-case
flag, regardless of position. In ripgrep 0.8.0
however, the override rule for all flags has changed to "the most recent
flag wins among competing flags." That is,rg foo -s -i
now performs a
case insensitive search. - The
-M/--max-columns
flag was tweaked so that specifying a value of0
now makes ripgrep behave as if the flag was absent. This makes it possible
to set a default value in a configuration file and then override it. The
previous ripgrep behavior was to suppress all matching non-empty lines. - In all globs,
[^...]
is now equivalent to[!...]
(indicating class
negation). Previously,^
had no special significance in a character class. - For downstream packagers, the directory hierarchy in ripgrep's archive
releases has changed. The root directory now only contains the executable,
README and license. There is now a new directory calleddoc
which contains
the man page (previously in the root), a user guide (new), a FAQ (new) and
the CHANGELOG (previously not included in release). Thecomplete
directory remains the same.
Feature enhancements:
- Added or improved file type filtering for
Apache Avro, C++, GN, Google Closure Templates, Jupyter notebooks, man pages,
Protocol Buffers, Smarty and Web IDL. - FEATURE #196:
Support a configuration file. See
the new user guide
for details. - FEATURE #261:
Add extended or "true" color support. Works in Windows 10!
See the FAQ for details. - FEATURE #539:
Search gzip, bsip2, lzma or xz files when given-z/--search-zip
flag. - FEATURE #544:
Add support for line number alignment via a new--line-number-width
flag. - FEATURE #654:
Support linuxbrew in ripgrep's Brew tap. - FEATURE #673:
Bring back.rgignore
files. (A higher precedent, application specific
version of.ignore
.) - FEATURE #676:
Provide ARM binaries. WARNING: This will be provided on a best effort
basis. - FEATURE #709:
Suggest-F/--fixed-strings
flag on a regex syntax error. - FEATURE #740:
Add a--passthru
flag that causes ripgrep to print every line it reads. - FEATURE #785:
Overhaul documentation. Cleaned up README, added user guide and FAQ. - FEATURE 7f5c07:
Add hidden flags for convenient overrides (e.g.,--no-text
).
Bug fixes:
- BUG #553:
Permit flags to be repeated. - BUG #633:
Fix a bug where ripgrep would panic on Windows while following symlinks. - BUG #649:
Fix handling of!**/
in.gitignore
. - BUG #663:
BREAKING CHANGE: Support[^...]
glob syntax (as identical to[!...]
). - BUG #693:
Don't display context separators when not printing matches. - BUG #705:
Fix a bug that prevented ripgrep from searching OneDrive directories. - BUG #717:
Improve--smart-case
uppercase character detection. - BUG #725:
Clarify that globs do not override explicitly given paths to search. - BUG #742:
Write ANSI reset code as\x1B[0m
instead of\x1B[m
. - BUG #747:
Removeyarn.lock
from YAML file type. - BUG #760:
ripgrep can now search/sys/devices/system/cpu/vulnerabilities/*
files. - BUG #761:
Fix handling of gitignore patterns that contain a/
. - BUG #776:
BREAKING CHANGE:--max-columns=0
now disables the limit. - BUG #779:
Clarify documentation for--files-without-match
. - BUG #780,
BUG #781:
Fix bug where ripgrep missed some matching lines.
Maintenance fixes:
- MAINT #772:
Dropenv_logger
in favor of simpler logger to avoid many new dependencies. - MAINT #772:
Add git revision hash to ripgrep's version string. - MAINT #772:
(Seemingly) improve compile times. - MAINT #776:
Automatically generate man page during build. - MAINT #786:
Remove use ofunsafe
inglobset
. 🎉 - MAINT e9d448:
Add an issue template (has already drastically improved bug reports). - MAINT ae2d03:
Remove thecompile
script.
Friends of ripgrep:
I'd like to extend my gratitude to
@balajisivaraman
for their recent hard work in a number of areas, and in particular, for
implementing the "search compressed files" feature. Their work in sketching out
a specification for that and other work has been exemplary.
Thanks
@balajisivaraman!
0.7.1
0.7.0
This is a new minor version release of ripgrep that includes mostly bug fixes.
ripgrep continues to require Rust 1.17, and there are no known breaking changes
introduced in this release.
Feature enhancements:
- Added or improved file type filtering for config & license files, Elm,
Purescript, Standard ML, sh, systemd, Terraform - FEATURE #593:
Using both-o/--only-matching
and-r/--replace
does the right thing.
Bug fixes:
- BUG #200:
ripgrep will stop when its pipe is closed. - BUG #402:
Fix context printing bug when the-m/--max-count
flag is used. - BUG #521:
Fix interaction between-r/--replace
and terminal colors. - BUG #559:
Ignore test that tried reading a non-UTF-8 file path on macOS. - BUG #599:
Fix color escapes on empty matches. - BUG #600:
Avoid expensive (on Windows) file handle check when using --files. - BUG #618:
Clarify installation instructions for Ubuntu users. - BUG #633:
Faster symlink loop checking on Windows.