winnow
A byte-oriented, zero-copy, parser combinators library
1.0.4
817M downloads/mo
#85 most downloaded on crates.io
winnow-rs/winnow
What this package is like to depend on
Last release 1 months ago
13 Jul 2026
Release timing varies
gaps range from 8 days to 3 months
Nearly every release is documented
notes for 107 of 111 stable releases
Nothing withdrawn
no release was ever pulled
3 years old
111 releases · first in 2023
7 releases in the last 12 months
see the full history below
Release timeline
111 releases · Feb 2023 to Jul 2026Releases
latest 60 of 111-
1.0.413 Jul 2026 -
1.0.314 May 2026 -
1.0.221 Apr 2026 -
1.0.130 Mar 2026 -
1.0.017 Mar 2026Release notes
Open source →Note: going to v1 is more a reflection of the rate of churn in Winnow's API than the quality of previous releases or any statement against future breaking changes.
Migration Guide
- Update to latest v0.7 release
- Resolve deprecations
- Upgrade to v1
- Add
ascii,binary, orparserfeatures as needed - Break tuples into tuples-of-tuples as needed
- Break
alttuples into tuples ofalttuples as needed
Compatibility
- Added
parser,ascii, andbinaryfeature gates to improve build times - Reduce 'impl ContainsToken for Tuple' to 10 elements to improve build times
- Reduce 'impl Alt for Tuple' to 10 elements to improve build times
- Reduce 'impl Parser for Tuple' to 10 elements to improve build times
- Replaced
(I, usize)withbinary::bits::Bitsto clarify intent - Moved
BitOffsetsfromstreamtobinary::bitsto consolidate the API - Make
iteratorimpure like parsers - Replace
Stream::rawwithStream::trace - Remove deprecated APIs
Performance
Build time
- Reduce macro-generated code
- Split off
parser,ascii, andbinaryfeatures
Runtime
- Optimize
hex_uint
Features
- Add
Parser::parse_iter
Fixes
- Export
Neededinstream - Correct trace for
oct_digit1 - Allow
escapedinto aCow - Accept a parser for
escaped,take_escapedcontrol character for not-quite unicode parsing
-
0.7.1505 Mar 2026Release notes
Open source →Compatibility
- Deprecate
combinator::permutationin favor ofcombinator::unordered_seq!
Features
- Add
combinator::unordered_seq!, likeseq!but where the order of values does not matter
- Deprecate
-
0.7.1426 Nov 2025Release notes
Open source →Features
- Add
combinator::expressionparser for parsing expressions with precedence (a pratt parser)
- Add
-
0.7.1322 Aug 2025Release notes
Open source →Features
- Allow accumulating
StringintoString - Allow accumulating
Cow<str>intoString
- Allow accumulating
-
0.7.1211 Jul 2025 -
0.7.1110 Jun 2025Release notes
Open source →Fixes
- Remove a stackoverflow in
PartialEqandPartialOrdwithBytesandBStr
- Remove a stackoverflow in
-
0.7.1006 May 2025Release notes
Open source →Compatibility
- Deprecated
Stream::raw
Features
- Added
Stream::tracefor better customization oftraceparsers
Fixes
- Remove
initialfromTokenSlice/LocatingSlices Debug impl Stream::traceprints non-pretty output for&[T]andTokenSlice<T>
- Deprecated
-
0.7.902 May 2025 -
0.7.801 May 2025 -
0.7.724 Apr 2025Release notes
Open source →Fixes
- Ensure
LocatedSliceandStatefulsStream::rawgets the inner input
- Ensure
-
0.7.607 Apr 2025 -
0.7.507 Apr 2025Release notes
Open source →Features
- Add
Stream::next_slice_uncheckedandStream::peek_slice_unchecked
- Add
-
0.7.412 Mar 2025Release notes
Open source →Documentation
- Clarify
empty - Clarify
dispatch! - (cookbook) Discuss lexing
- (tutorial) Iterate on how we discuss errors
- Clarify
-
0.7.319 Feb 2025 -
0.7.210 Feb 2025 -
0.7.103 Feb 2025 -
0.7.030 Jan 2025Release notes
Open source →Migration Guide
- Upgrade to the latest 0.6 release
- Resolve all deprecations
- Replace
impl Parser<_, _, _>withimpl ModalParser<_, _, _> - Upgrade to 0.7.0
- Resolve any compiler errors
- For custom errors, remove switch from
from_error_kindtofrom_inputand remove otherkindparameters - For
seq!(<tuple>), you may need to addmutto shared parsers - For
Stream::peek*calls, update for lack ofStreambeing returned - Where
ModalParsercouldn't be used, changeParser<I, O, E>toParser<I, O, ErrMode<E>>
- Resolve all deprecations
If you do not use
cut_errorPartial, you can further clean up the code and improve performance by removing the use ofErrMode- Replace
ModalResult<O, E>withwinnow::Result<O>(if using default error type) or justResult<O, E> - Replace
impl ModalParserwithimpl Parser - Remove uses of
ErrMode
Compatibility
escapedandtake_escapednow assert, rather than stop, on emptynormaloutput- Some parsers used in
seq(<tuple>)must now bemut Stream::peek_token,Stream::peek_slice,Stream::peek_finishno longer return a clone ofStreamtrait Locations functions have changed to improve parsing of lexed tokensParserError::appendandFromExternalError::from_external_errorskindparameter has been removedParserError,AsChar,ContainsToken,Streamwere added to the prelude- Some trait bounds changed
- Deprecated functionality removed
- Deprecated
escaped_transformin favor of the new nameescaped
Features
- Decoupled
ErrModefrom the core traits through newModalErrortrait andParserErrormodal functions, allowing better performance and greater flexibility - Add
ParserError,AsChar,ContainsToken,Streamto the prelude - Add
stream::TokenSliceto help parsing of lexed tokens - Implement
ErrorConvertforErrMode
Fixes
- Borrow parsers in
seq!(<tuple>)so they can be used multiple times escapedandtake_escapednow assert, rather than stop, on emptynormaloutput- Improve type inference for
Parser::by_ref,Parser::complete_err - Improve error reports for
float - Added an inherent
ParserError::appendto reduce boilerplate with custom errors - Added support for
TreeErrorwithbinary::bitsparsers escapedcan now have separate types fornormalandescapedparsers
Documentation
- Modernized reference examples
-
0.6.2630 Jan 2025Release notes
Open source →Compatibility
- Deprecate
ParserError::from_error_kindin favor ofParserError::from_input - Deprecate
InputError::newin favor ofInputError::at - Deprecate
ErrorKind- If used as an error, consider
EmptyError - For
ParserError::append, just add an#[allow(deprecated)]
- If used as an error, consider
Features
- Add
EmptyErrorwhich is like()but compatible withParser::parse - Add
ParserError::from_inputto help with the transition to 0.7 - Add
InputError::atto help with the transition to 0.7
- Deprecate
-
0.6.2527 Jan 2025Release notes
Open source →Compatibility
- Deprecated
PResultin favor ofModalResult: v0.7 will makeErrModeoptional andPResultwill no longer be descriptive enough - Deprecate
IResultin favor ofPResult<(I, O)>
Documentation
- Update comparison with nom
Fixes
- Ensure we append errors in
repeat(_).fold(1..)
- Deprecated
-
0.6.2410 Jan 2025 -
0.6.2310 Jan 2025Release notes
Open source →Compatibility
stream::Locatedis deprecated in favor ofstream::LocatingSlicecombnator::restis deprecated in favor oftoken::restcombnator::rest_lenis deprecated in favor oftoken::rest_lencombinator::<Struct>have mostly been deprecated in favor ofcombinator::impls::<Struct>unpeekis deprecated
Features
- Added
repeat().try_fold()andrepeat().verify_fold()
-
0.6.2203 Jan 2025 -
0.6.2131 Dec 2024Release notes
Open source →Performance
- More inlining
Documentation
- Clarify roles of
peekandParser::parse_peek - Provide more context for people coming from
nom
-
0.6.2025 Sep 2024 -
0.6.1924 Sep 2024Release notes
Open source →Features
- Add
Located::reset_to_startfor parsing encoded graphs with start-relative pointers
- Add
-
0.6.1831 Jul 2024Nothing published for this version
-
0.6.1731 Jul 2024 -
0.6.1625 Jul 2024Nothing published for this version
-
0.6.1522 Jul 2024Release notes
Open source →Compatibility
- Deprecated
Parser::recognizein favor ofParser::take - Deprecated
Parser::with_recognizedin favor ofParser::taken
Fixes
- Renamed
Parser::recognizetoParser::taketo be consistent with othertakeparsers - Renamed
Parser::with_recognizedtoParser::with_takento be consistent with othertakeparsers
- Deprecated
-
0.6.1419 Jul 2024 -
0.6.1306 Jun 2024 -
0.6.1206 Jun 2024Release notes
Open source →Fixes
- Improve compilation errors when using non-parsers with
seq!struct syntax
- Improve compilation errors when using non-parsers with
-
0.6.1103 Jun 2024 -
0.6.1003 Jun 2024 -
0.6.928 May 2024Release notes
Open source →Compatibility
- Bump MSRV to 1.65
Features
- Add
Debugimpls forstream::Statefulandstream::Recoverable
-
0.6.806 May 2024 -
0.6.726 Apr 2024 -
0.6.611 Apr 2024Release notes
Open source →Fixes
- Add impl
ErrorConvertforContextErrorso it can be used with bit parsing
- Add impl
-
0.6.529 Feb 2024Release notes
Open source →Compatibility
- Deprecated
escapedin favor oftake_escaped(rename)
Documentation
- Fix some bugs in concrete signatures
- Explain what "Partial version" means
- When discussing the signature, highlight the most relevant trait for
input
- Deprecated
-
0.6.429 Feb 2024 -
0.6.328 Feb 2024Release notes
Open source →Fixes
- Make
take_until("")consistent betweensimdor not, with or without empty buffer
Documentation
- Clarify generic and value parameters
- Cross reference
*untiland*tillparsers - (tutorial) Step through parts more slowly
- Make
-
0.6.219 Feb 2024Nothing published for this version
-
0.6.114 Feb 2024 -
0.6.013 Feb 2024Nothing published for this version
-
0.5.4012 Feb 2024 -
0.5.3906 Feb 2024 -
0.5.3806 Feb 2024Release notes
Open source →Compatibility
- Deprecate
token::tagfortoken::literal - Deprecate
binary::bits::tagforbinary::bits::pattern
Features
- Allow a byte (
u8) to be a tag
Fixes
- Clarify name of
token::tagastoken::literal - Clarify name of
binary::bits::tagasbinary::bits::pattern
- Deprecate
-
0.5.3702 Feb 2024Release notes
Open source →Features
- Initial support for error recovery behind
unstable-recoverfeature
- Initial support for error recovery behind
-
0.5.3631 Jan 2024Release notes
Open source →Compatibility
- Deprecate
fold_repeatin favor ofrepeat().fold()
Features
- Add
repeat().fold()
- Deprecate
-
0.5.3526 Jan 2024Release notes
Open source →Compatibility
- Deprecate
success(value)in favor ofempty.value(value) - Deprecated
winnow::trace::tracein favor of the more centrally locatedwinnow::combinator::trace - Deprecated
take_until0/take_until1in favor oftake_until - Deprecated
repeat_till0in favor ofrepeat_till - Deprecated
not_line_endingin favor oftill_line_ending
Features
- Add more general
emptycombinator - Added
take_untilthat can handle any range of tokens to consume - Added
repeat_tillthat can handle any range of parsers to repeat
Documentation
- Made it easier to discover
cut_errand how to use it - Move
tracedocumentation into the tutorial
- Deprecate
-
0.5.3410 Jan 2024Release notes
Open source →Fixes
- Don't require
StatefulsStateto be clone (a leftover from pre&mutinput)
- Don't require
-
0.5.3306 Jan 2024 -
0.5.3203 Jan 2024 -
0.5.3127 Dec 2023Release notes
Open source →Performance
- Help the optimizer trim unused instructions in
anywhen parsing a complete buffer
- Help the optimizer trim unused instructions in
-
0.5.3018 Dec 2023 -
0.5.2918 Dec 2023Release notes
Open source →Features
- New
combinator::seq!for easier initialization of structs/tuples
- New