PackageTrack
Sign in Get early access

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 2026
2024 2025 2026
Release Pre-release

Releases

latest 60 of 111
  1. 1.0.4 13 Jul 2026
    Release notes

    chore: Release winnow version 1.0.4

    Open source →
    Release notes

    Fixes

    • Expand the number of supported fields for seq! from 22 to 32
    Open source →
  2. 1.0.3 14 May 2026
    Release notes

    chore: Release winnow version 1.0.3

    Open source →
    Release notes

    Fixes

    • Remove unused AsBStr bound on ascii::float
    Open source →
  3. 1.0.2 21 Apr 2026
    Release notes

    chore: Release winnow version 1.0.2

    Open source →
    Release notes

    Fixes

    • Support TreeError in binary::bits (regression from 1.0.0)
    Open source →
  4. 1.0.1 30 Mar 2026
    Release notes

    chore: Release winnow version 1.0.1

    Open source →
    Release notes

    Documentation

    • Ensure macros are visible at winnow::combinator
    Open source →
  5. 1.0.0 17 Mar 2026
    Release notes

    chore: Release winnow version 1.0.0

    Open source →
    Release notes

    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

    1. Update to latest v0.7 release
    2. Resolve deprecations
    3. Upgrade to v1
    4. Add ascii, binary, or parser features as needed
    5. Break tuples into tuples-of-tuples as needed
    6. Break alt tuples into tuples of alt tuples as needed

    Compatibility

    • Added parser, ascii, and binary feature 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) with binary::bits::Bits to clarify intent
    • Moved BitOffsets from stream to binary::bits to consolidate the API
    • Make iterator impure like parsers
    • Replace Stream::raw with Stream::trace
    • Remove deprecated APIs

    Performance

    Build time

    • Reduce macro-generated code
    • Split off parser, ascii, and binary features

    Runtime

    • Optimize hex_uint

    Features

    • Add Parser::parse_iter

    Fixes

    • Export Needed in stream
    • Correct trace for oct_digit1
    • Allow escaped into a Cow
    • Accept a parser for escaped, take_escaped control character for not-quite unicode parsing
    Open source →
  6. 0.7.15 05 Mar 2026
    Release notes

    chore: Release winnow version 0.7.15

    Open source →
    Release notes

    Compatibility

    • Deprecate combinator::permutation in favor of combinator::unordered_seq!

    Features

    • Add combinator::unordered_seq!, like seq! but where the order of values does not matter
    Open source →
  7. 0.7.14 26 Nov 2025
    Release notes

    chore: Release winnow version 0.7.14

    Open source →
    Release notes

    Features

    • Add combinator::expression parser for parsing expressions with precedence (a pratt parser)
    Open source →
  8. 0.7.13 22 Aug 2025
    Release notes

    chore: Release winnow version 0.7.13

    Open source →
    Release notes

    Features

    • Allow accumulating String into String
    • Allow accumulating Cow<str> into String
    Open source →
  9. 0.7.12 11 Jul 2025
    Release notes

    chore: Release winnow version 0.7.12

    Open source →
    Release notes

    Features

    • Add impl Accumulate for VecDeque
    Open source →
  10. 0.7.11 10 Jun 2025
    Release notes

    Fixes

    • Remove a stackoverflow in PartialEq and PartialOrd with Bytes and BStr
    Open source →
  11. 0.7.10 06 May 2025
    Release notes

    Compatibility

    • Deprecated Stream::raw

    Features

    • Added Stream::trace for better customization of trace parsers

    Fixes

    • Remove initial from TokenSlice / LocatingSlices Debug impl
    • Stream::trace prints non-pretty output for &[T] and TokenSlice<T>
    Open source →
  12. 0.7.9 02 May 2025
    Release notes

    Features

    • Add ContextError::extend
    • Add Parser::context_with
    Open source →
  13. 0.7.8 01 May 2025
    Release notes

    Features

    • Add ContextError::push
    • Add Parser::map_err
    Open source →
  14. 0.7.7 24 Apr 2025
    Release notes

    Fixes

    • Ensure LocatedSlice and Statefuls Stream::raw gets the inner input
    Open source →
  15. 0.7.6 07 Apr 2025
    Release notes

    Features

    • Add TokenSlice::previous_tokens
    Open source →
  16. 0.7.5 07 Apr 2025
    Release notes

    Features

    • Add Stream::next_slice_unchecked and Stream::peek_slice_unchecked
    Open source →
  17. 0.7.4 12 Mar 2025
    Release notes

    Documentation

    • Clarify empty
    • Clarify dispatch!
    • (cookbook) Discuss lexing
    • (tutorial) Iterate on how we discuss errors
    Open source →
  18. 0.7.3 19 Feb 2025
    Release notes

    Features

    • Add ParseError::char_span
    Open source →
  19. 0.7.2 10 Feb 2025
    Release notes

    Fixes

    • Make Range Copyable
    Open source →
  20. 0.7.1 03 Feb 2025
    Release notes

    Fixes

    • Don't panic when calling .next(), .next(), .finish() on iterator
    Open source →
  21. 0.7.0 30 Jan 2025
    Release notes

    Migration Guide

    1. Upgrade to the latest 0.6 release
    2. Resolve all deprecations
    3. Replace impl Parser<_, _, _> with impl ModalParser<_, _, _>
    4. Upgrade to 0.7.0
    5. Resolve any compiler errors
    • For custom errors, remove switch from from_error_kind to from_input and remove other kind parameters
    • For seq!(<tuple>), you may need to add mut to shared parsers
    • For Stream::peek* calls, update for lack of Stream being returned
    • Where ModalParser couldn't be used, change Parser<I, O, E> to Parser<I, O, ErrMode<E>>
    1. Resolve all deprecations

    If you do not use cut_err or Partial, you can further clean up the code and improve performance by removing the use of ErrMode

    • Replace ModalResult<O, E> with winnow::Result<O> (if using default error type) or just Result<O, E>
    • Replace impl ModalParser with impl Parser
    • Remove uses of ErrMode

    Compatibility

    • escaped and take_escaped now assert, rather than stop, on empty normal output
    • Some parsers used in seq(<tuple>) must now be mut
    • Stream::peek_token, Stream::peek_slice, Stream::peek_finish no longer return a clone of Stream
    • trait Locations functions have changed to improve parsing of lexed tokens
    • ParserError::append and FromExternalError::from_external_errors kind parameter has been removed
    • ParserError, AsChar, ContainsToken, Stream were added to the prelude
    • Some trait bounds changed
    • Deprecated functionality removed
    • Deprecated escaped_transform in favor of the new name escaped

    Features

    • Decoupled ErrMode from the core traits through new ModalError trait and ParserError modal functions, allowing better performance and greater flexibility
    • Add ParserError, AsChar, ContainsToken, Stream to the prelude
    • Add stream::TokenSlice to help parsing of lexed tokens
    • Implement ErrorConvert for ErrMode

    Fixes

    • Borrow parsers in seq!(<tuple>) so they can be used multiple times
    • escaped and take_escaped now assert, rather than stop, on empty normal output
    • Improve type inference for Parser::by_ref, Parser::complete_err
    • Improve error reports for float
    • Added an inherent ParserError::append to reduce boilerplate with custom errors
    • Added support for TreeError with binary::bits parsers
    • escaped can now have separate types for normal and escaped parsers

    Documentation

    • Modernized reference examples
    Open source →
  22. 0.6.26 30 Jan 2025
    Release notes

    Compatibility

    • Deprecate ParserError::from_error_kind in favor of ParserError::from_input
    • Deprecate InputError::new in favor of InputError::at
    • Deprecate ErrorKind
      • If used as an error, consider EmptyError
      • For ParserError::append, just add an #[allow(deprecated)]

    Features

    • Add EmptyError which is like () but compatible with Parser::parse
    • Add ParserError::from_input to help with the transition to 0.7
    • Add InputError::at to help with the transition to 0.7
    Open source →
  23. 0.6.25 27 Jan 2025
    Release notes

    Compatibility

    • Deprecated PResult in favor of ModalResult: v0.7 will make ErrMode optional and PResult will no longer be descriptive enough
    • Deprecate IResult in favor of PResult<(I, O)>

    Documentation

    • Update comparison with nom

    Fixes

    • Ensure we append errors in repeat(_).fold(1..)
    Open source →
  24. 0.6.24 10 Jan 2025
    Release notes

    Fixes

    • Add back in winnow::Located which was removed by accident
    Open source →
  25. 0.6.23 10 Jan 2025
    Release notes

    Compatibility

    • stream::Located is deprecated in favor of stream::LocatingSlice
    • combnator::rest is deprecated in favor of token::rest
    • combnator::rest_len is deprecated in favor of token::rest_len
    • combinator::<Struct> have mostly been deprecated in favor of combinator::impls::<Struct>
    • unpeek is deprecated

    Features

    • Added repeat().try_fold() and repeat().verify_fold()
    Open source →
  26. 0.6.22 03 Jan 2025
    Release notes

    Fixes

    • Respect is_partial in take_till
    Open source →
  27. 0.6.21 31 Dec 2024
    Release notes

    Performance

    • More inlining

    Documentation

    • Clarify roles of peek and Parser::parse_peek
    • Provide more context for people coming from nom
    Open source →
  28. 0.6.20 25 Sep 2024
    Release notes

    Internal

    • Dependency update
    Open source →
  29. 0.6.19 24 Sep 2024
    Release notes

    Features

    • Add Located::reset_to_start for parsing encoded graphs with start-relative pointers
    Open source →
  30. 0.6.18 31 Jul 2024

    Nothing published for this version

  31. 0.6.17 31 Jul 2024
    Release notes

    Features

    • Make Checkpoints comparable
    Open source →
  32. 0.6.16 25 Jul 2024

    Nothing published for this version

  33. 0.6.15 22 Jul 2024
    Release notes

    Compatibility

    • Deprecated Parser::recognize in favor of Parser::take
    • Deprecated Parser::with_recognized in favor of Parser::taken

    Fixes

    • Renamed Parser::recognize to Parser::take to be consistent with other take parsers
    • Renamed Parser::with_recognized to Parser::with_taken to be consistent with other take parsers
    Open source →
  34. 0.6.14 19 Jul 2024
    Release notes

    Fixes

    • Removed unused I: Clone bound on Parser::parse
    Open source →
  35. 0.6.13 06 Jun 2024
    Release notes

    Documentation

    • Expand on error reporting
    Open source →
  36. 0.6.12 06 Jun 2024
    Release notes

    Fixes

    • Improve compilation errors when using non-parsers with seq! struct syntax
    Open source →
  37. 0.6.11 03 Jun 2024
    Release notes

    Fixes

    • Remove AsBytes bounds, unblocking parsing frames of binary input
    Open source →
  38. 0.6.10 03 Jun 2024
    Release notes

    Features

    • Extend seq! to constructing enum variants
    Open source →
  39. 0.6.9 28 May 2024
    Release notes

    Compatibility

    • Bump MSRV to 1.65

    Features

    • Add Debug impls for stream::Stateful and stream::Recoverable
    Open source →
  40. 0.6.8 06 May 2024
    Release notes

    Features

    • Support &mut [impl Parser] within alt
    Open source →
  41. 0.6.7 26 Apr 2024
    Release notes

    Fixes

    • Improve debug traces when Input wrapper types are used
    Open source →
  42. 0.6.6 11 Apr 2024
    Release notes

    Fixes

    • Add impl ErrorConvert for ContextError so it can be used with bit parsing
    Open source →
  43. 0.6.5 29 Feb 2024
    Release notes

    Compatibility

    • Deprecated escaped in favor of take_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
    Open source →
  44. 0.6.4 29 Feb 2024
    Release notes

    Documentation

    • Provide examples of concrete signatures
    Open source →
  45. 0.6.3 28 Feb 2024
    Release notes

    Fixes

    • Make take_until("") consistent between simd or not, with or without empty buffer

    Documentation

    • Clarify generic and value parameters
    • Cross reference *until and *till parsers
    • (tutorial) Step through parts more slowly
    Open source →
  46. 0.6.2 19 Feb 2024

    Nothing published for this version

  47. 0.6.1 14 Feb 2024
    Release notes

    Fixes

    • Fix regression where dec_int / dec_uint didn't parse 0
    Open source →
  48. 0.6.0 13 Feb 2024

    Nothing published for this version

  49. 0.5.40 12 Feb 2024
    Release notes

    Features

    • Add support to take_until for char needles on &[u8] haystacks
    Open source →
  50. 0.5.39 06 Feb 2024
    Release notes

    Fixes

    • Be consistent about inlining slice_len
    Open source →
  51. 0.5.38 06 Feb 2024
    Release notes

    Compatibility

    • Deprecate token::tag for token::literal
    • Deprecate binary::bits::tag for binary::bits::pattern

    Features

    • Allow a byte (u8) to be a tag

    Fixes

    • Clarify name of token::tag as token::literal
    • Clarify name of binary::bits::tag as binary::bits::pattern
    Open source →
  52. 0.5.37 02 Feb 2024
    Release notes

    Features

    • Initial support for error recovery behind unstable-recover feature
    Open source →
  53. 0.5.36 31 Jan 2024
    Release notes

    Compatibility

    • Deprecate fold_repeat in favor of repeat().fold()

    Features

    • Add repeat().fold()
    Open source →
  54. 0.5.35 26 Jan 2024
    Release notes

    Compatibility

    • Deprecate success(value) in favor of empty.value(value)
    • Deprecated winnow::trace::trace in favor of the more centrally located winnow::combinator::trace
    • Deprecated take_until0 / take_until1 in favor of take_until
    • Deprecated repeat_till0 in favor of repeat_till
    • Deprecated not_line_ending in favor of till_line_ending

    Features

    • Add more general empty combinator
    • Added take_until that can handle any range of tokens to consume
    • Added repeat_till that can handle any range of parsers to repeat

    Documentation

    • Made it easier to discover cut_err and how to use it
    • Move trace documentation into the tutorial
    Open source →
  55. 0.5.34 10 Jan 2024
    Release notes

    Fixes

    • Don't require Statefuls State to be clone (a leftover from pre &mut input)
    Open source →
  56. 0.5.33 06 Jan 2024
    Release notes

    Features

    • Support char with tag parser which is faster than using one_of
    Open source →
  57. 0.5.32 03 Jan 2024
    Release notes

    Fixes

    • Parse +/- inf/nan with ascii::float
    Open source →
  58. 0.5.31 27 Dec 2023
    Release notes

    Performance

    • Help the optimizer trim unused instructions in any when parsing a complete buffer
    Open source →
  59. 0.5.30 18 Dec 2023
    Release notes

    Features

    • Add Parser::default_value
    Open source →
  60. 0.5.29 18 Dec 2023
    Release notes

    Features

    • New combinator::seq! for easier initialization of structs/tuples
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive