PackageTrack
Sign in Get early access

rxml

Minimalistic, restricted XML 1.0 parser which does not include dangerous XML features.

0.14.0 5.7M downloads/mo #4266 most downloaded on crates.io source

What this package is like to depend on

Last release 6 months ago

21 Feb 2026

Release timing varies

gaps range from 2 weeks to 1.1 years

Some releases are documented

notes for 9 of 21 stable releases

1 version withdrawn

withdrawn after publishing

5 years old

22 releases · first in 2021

3 releases in the last 12 months

see the full history below

Release timeline

22 releases · May 2021 to Feb 2026
2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 22
  1. 0.14.0 21 Feb 2026
    Release notes

    Breaking changes

    • Further work on the Namespace type. It now has a lifetime to allow
      for borrows. It is also used in several places throughout the code
      now.

    • Support for parsing comments was added. This breaks code which
      constructs the Options struct manually, as it gained a new comments
      field.

      Defaulting this field or setting it explicitly to
      CommentMode::Reject preserves the previous behaviour of rejecting
      comments.

    Improvements

    • Name and NcName are now exposed in no_std environments.

    • Global prefix declarations in SimpleNamespaces will now also be used
      for namespaced attributes (instead of generating a temporary prefix).

    • Support for additional platforms, gated behind the extra-platforms
      feature flag.

      Note that this is likely to have bad performance, because a
      critical-section will have to be acquired for every Arc operation
      (which is the backing storage for the Namespace enum!).

      Future versions may improve upon this by disabling the Arc variant of
      Namespace when built with extra-platforms or similar workarounds.

    Bug fixes

    • Fix benchmarks failing to build on no_std (they are now (correctly)
      skipped).
    Open source →
  2. 0.13.3 03 Oct 2025
    Release notes
    • Fix overly strict lifetimes in XmlMap::get and XmlMap::get_mut.

    • Make the xml_ncname! and xml_name! macro exports from rxml usable
      through re-exports.

      This requires bumping rxml_proc to 0.12.1.

    This release was originally numbered 0.13.2, but due to the issue in rxml_proc 0.12.0, we cut a second release to ensure that rxml depends on the fixed version only.

    Open source →
  3. 0.13.2 03 Oct 2025 withdrawn

    Nothing published for this version

  4. 0.13.1 22 Apr 2025
    Release notes

    This release fixes two documentation oversights in 0.13.0:

    • The std feature was not documented.
    • The items requiring std were not marked.
    Open source →
  5. 0.13.0 22 Apr 2025
    Release notes
    • rxml now consistently uses single quotes for all XML attributes. This may break your tests if you did exact string matching against rxml output. Thanks @linkmauve.

    • rxml now uses Rust edition 2021. Thanks @linkmauve.

    • rxml is now no_std-capable (but needs alloc in any case). Disabling the enabled-by-default std feature will remove a couple of types from the public API. Due to an oversight, the affected types are not marked in the documentation and the std feature itself is also not documented. This will be fixed in 0.13.1.

      Thanks @linkmauve.

    • Helpers to work with the special xml:lang attribute were added, see XmlLangTracker and the xml_lang module.

    • Various code cleanup tasks such as fixing clippy warnings (thanks @linkmauve).

    • Bumped the compact_str dependency (thanks @linkmauve).

    All over all, 0.13.0 seems to improve parsing performance by roughly 15%.

    Open source →
  6. 0.12.0 12 Aug 2024
    Release notes

    This release carries more breaking changes which do not have seamless deprecations than previous releses.

    • The error types were reworked completely. Aside from the obvious renaming which went down, one thing is particularly notable: The high level objects (Reader / AsyncReader) now return std::io::Error instead of directly returning rxml::Error.

      Any rxml error from a reader will cause an io::Error with io::ErrorKind::InvalidData. The original error can be extracted with the corresponding functions on io::Error (most notably, io::Error::downcast) if necessary.

      The rxml::error::XmlError type was flattened into rxml::Error as a follow-up to that. The writer/encoder now also uses rxml::Error instead of its own error type, simplifying the use in full-duplex applications (e.g. tokio_util codecs).

    • The AsyncReader was made more versatile, by loosening trait bounds and providing functions for accessing its inner state while pinned.

    • Support for controlling the buffering of incoming text nodes was added. The default behaviour of buffering parsed text up to the maximum token size or a delimiting syntax element (such as start of a child element) is preserved. However, users can now turn that off in order to receive text data which is parsed immediately when it is available.

    Open source →
  7. 0.11.1 23 Jun 2024
    Release notes

    This release is a minor feature release which adds the Debug trait to rxml::writer::Item, nothing more.

    Open source →
  8. 0.11.0 15 Jun 2024
    Release notes

    This release continues the path started with 0.10.0 to simplify the public API. Thus, this release contains once more a couple of breaking changes. We tried to introduce compatibility aliases and such in order to ease the transition. In case you get stuck upgrading from 0.10.0, we'd nevertheless like you to not hesitate to file an issue to get help.

    Notable changes from 0.10.0:

    • ResolvedQName and ResolvedEvent have been re-renamed to QName and Event, respectively. As those are most often used, it makes sense to make their names short.

    • A new Namespace type was introduced. It contains a namespace name (i.e. a URI). Previously, that was done with RcPtr<CData>, which led to some inefficiencies around statically known namespaces, as well as nuisances around use in map types.

      The Namespace type should be more usable than RcPtr<CData> throughout.

    • A new AttrMap type (and its generic form, XmlMap) was introduced. XmlMap allows to map a qualified name tuple (namespace uri and local name) to a generic type. It exists because using tuple keys with the standard libraries map types is quite annoying and inefficient. AttrMap is a type alias which specialises XmlMap for string values, and it is used for attributes throughout the public API now.

    • bytes::Buf was removed from the internal APIs and from the main parsing entrypoint (Parse::parse). A helper method for parsing Buf objects exists (Parse::parse_buf) but it now must be used explicitly. The main APIs now only offer &[u8] inputs, which is more efficient.

    • The string types have been moved to rxml_validation (while still being re-exported by rxml, and they will continue to be). This allows use of strongly typed validated strings in proc macros besides rxml_proc.

    • The CData type has been removed. The benefits it brought did not outweigh the explicit type casts and error handling required at various places in user code. The error handling for invalid data is now concentrated at serialisation time.

    • smartstring was removed in favour of compact_str. The feature flag has been renamed accordingly. compact_str is more efficient and has better code quality. See eb3d18b for details.

    • The sync feature is now deprecated, as its functionality is now enabled by default.

    • A minor bookkeeping mistake in the event metrics around element footers was fixed.

    • The incorrect InvalidUtf8Byte error emitted if an UTF-8 sequence straddled a text token boundary was fixed (same fix as in 0.10.1; see #15 on Codeberg for more details).

    • Some feature flags and types deprecated in 0.10.0 have been removed.

    Open source →
  9. 0.10.1 08 Jun 2024
    Release notes

    This release is a bugfix release.

    Bugs fixed:

    • Incorrect InvalidUtf8Byte error if an UTF-8 sequence straddled a text
      token boundary
      #15.

      Thanks @meezookee for the report!

    Open source →
  10. 0.10.0 16 Mar 2024
    Release notes

    This release contains a major refactor of the public API for all things
    related to parsing XML. This is to make the API easier to use.

    Notable changes:

    • The code is now hosted on codeberg.org instead of github.com.
    • Everything related to the Lexer has been removed from the public API
    • NamespaceResolver has been moved from the crate root to rxml::parser
    • PullDriver, PushDriver and AsyncDriver have been removed; there are transitional type aliases which should help the migration.
    • The EventRead and AsyncEventRead traits have been removed; they are now unnecessary.
    • If you have been using the FeedParser or PushDriver, you will now need to import the rxml::Parse trait.
    • Some items which have been deprecated since 0.8 or earlier have been deleted.

    In general, the deprecation notices should help the migration. If you don't know how to proceed the upgrade, please file an issue.

    Open source →
  11. 0.9.1 25 Jan 2023

    Nothing published for this version

  12. 0.8.2 17 Dec 2022

    Nothing published for this version

  13. 0.8.1 15 May 2022

    Nothing published for this version

  14. 0.8.0 23 Apr 2022

    Nothing published for this version

  15. 0.7.1 12 Apr 2022

    Nothing published for this version

  16. 0.7.0 11 Apr 2022

    Nothing published for this version

  17. 0.6.0 25 Mar 2022

    Nothing published for this version

  18. 0.5.0 15 Dec 2021

    Nothing published for this version

  19. 0.4.0 18 Aug 2021

    Nothing published for this version

  20. 0.3.0 26 Jun 2021

    Nothing published for this version

  21. 0.2.0 16 May 2021

    Nothing published for this version

  22. 0.1.0 14 May 2021

    Nothing published for this version

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