PackageTrack
Sign in Get early access

lexopt

Minimalist pedantic command line parser

0.3.2 12M downloads/mo #2803 most downloaded on crates.io blyxxyz/lexopt

What this package is like to depend on

Last release 5 months ago

28 Feb 2026

Release timing varies

gaps range from 3 months to 2.2 years

Nearly every release is documented

notes for 6 of 6 stable releases

Nothing withdrawn

no release was ever pulled

5 years old

6 releases · first in 2021

1 release in the last 12 months

see the full history below

Release timeline

6 releases · Jul 2021 to Feb 2026
2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 6
  1. 0.3.2 28 Feb 2026
    Release notes

    New:

    • Add Parser::set_short_equals() to opt out of the nonstandard -o=value syntax. (#24)
    Open source →
    Release notes

    New:

    • Add Parser::set_short_equals() to opt out of the nonstandard -o=value syntax.
    Open source →
  2. 0.3.1 31 Mar 2025
    Release notes

    New:

    • Support the wasm32-wasip2 target. Previous releases failed to build.

    Changes:

    • Tweaked sanitization of invalid UTF-8 in option names to match String::from_utf8_lossy().
    • Removed special handling for WASI since WASI is de facto Unicode-only.
    Open source →
    Release notes

    New:

    • Support the wasm32-wasip2 target.

    Changes:

    • Tweaked sanitization of invalid UTF-8 in options.
    • Removed special handling for WASI since WASI is de facto Unicode-only.
    Open source →
  3. 0.3.0 16 Jan 2023
    Release notes

    This release adds a new preferred way to cast OsString into String (.string()?) and makes raw argument processing more flexible.

    Almost no programs should need changes to keep working, but .string()? makes it easier to use lexopt with other error types like anyhow's and using it is therefore recommended.

    New:

    • Add ValueExt::string() as the preferred method for converting from OsString into String. Unlike OsString::into_string() it has a normal error type so it's compatible with catch-all error types like anyhow::Error. (#10)
      • into_string()? will stay supported for the time being.
    • Add RawArgs::as_slice() for unlimited lookahead. (#15)
    • Add Parser::try_raw_args() to get raw arguments without consuming any arguments in case of failure.
    • Parser now implements Clone, Send, and Sync. Its Debug output now shows the remaining arguments.

    Changes:

    • The input iterator is now consumed when you create a Parser, instead of during parsing. This breaks certain clever code that inspects the state of the iterator, but RawArgs::as_slice() may provide an alternative. (If you don't know what this means then you aren't affected.) (#16)
    • Calling Parser::values() no longer consumes any arguments if you don't use the iterator.
    • RawArgs::peek() now takes &self instead of &mut self.
    Open source →
    Release notes

    This release adds a new preferred way to cast OsString into String (.string()?) and makes raw argument processing more flexible.

    Almost no programs should need changes to keep working, but .string()? makes it easier to use lexopt with other error types like anyhow's and using it is therefore recommended.

    New:

    • Add ValueExt::string() as the preferred method for converting from OsString into String. Unlike OsString::into_string() it has a normal error type so it's compatible with catch-all error types like anyhow::Error.
      • into_string()? will stay supported for the time being.
    • Add RawArgs::as_slice() for unlimited lookahead.
    • Add Parser::try_raw_args() to get raw arguments without consuming any arguments in case of failure.
    • Parser now implements Clone, Send, and Sync. Its Debug output now shows the remaining arguments.

    Changes:

    • The input iterator is now consumed when you create a Parser, instead of during parsing. This breaks certain clever code that inspects the state of the iterator, but RawArgs::as_slice() may provide an alternative. (If you don't know what this means then you aren't affected.)
    • Calling Parser::values() no longer consumes any arguments if you don't use the iterator.
    • RawArgs::peek() now takes &self instead of &mut self.
    Open source →
  4. 0.2.1 10 Jul 2022
    Release notes

    New:

    • Add Parser::raw_args() for collecting raw unparsed arguments. (#12)
    • Implement Debug for ValuesIter.

    Bug fixes:

    • Change "missing argument at end of command" error message. (#11)
    Open source →
    Release notes

    New:

    • Add Parser::raw_args() for collecting raw unparsed arguments. (#12)
    • Implement Debug for ValuesIter.

    Bug fixes:

    • Change "missing argument at end of command" error message. (#11)
    Open source →
  5. 0.2.0 23 Oct 2021
    Release notes

    While this release is not strictly backward-compatible it should break very few programs.

    New:

    • Add Parser::values() for options with multiple arguments.
    • Add Parser::optional_value() for options with optional arguments.
    • Add Parser::from_iter() to construct from an iterator that includes the binary name. (#5)
    • Document how to use Parser::value() to collect all remaining arguments.

    Changes:

    • Support = as a separator for short options (as in -o=value). (#18)
    • Sanitize the binary name if it's invalid unicode instead of ignoring it.
    • Make Error::UnexpectedValue.option a String instead of an Option<String>.

    Bug fixes:

    • Include bin_name in Parser's Debug output.
    Open source →
    Release notes

    While this release is not strictly backward-compatible it should break very few programs.

    New:

    • Add Parser::values() for options with multiple arguments.
    • Add Parser::optional_value() for options with optional arguments.
    • Add Parser::from_iter() to construct from an iterator that includes the binary name. (#5)
    • Document how to use Parser::value() to collect all remaining arguments.

    Changes:

    • Support = as a separator for short options (as in -o=value). (#18)
    • Sanitize the binary name if it's invalid unicode instead of ignoring it.
    • Make Error::UnexpectedValue.option a String instead of an Option<String>.

    Bug fixes:

    • Include bin_name in Parser's Debug output.
    Open source →
  6. 0.1.0 16 Jul 2021
    Release notes

    Small documentation tweaks

    Open source →
    Release notes

    Initial release.

    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