NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #4411 most downloaded on crates.io
Minimalistic, restricted XML 1.0 parser which does not include dangerous XML features.
Last release 7 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
One column per quarter.
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.
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.
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.
Fix overly strict lifetimes in XmlMap::get and XmlMap::get_mut.
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.
Nothing published for this version
This release fixes two documentation oversights in 0.13.0 :
This release fixes two documentation oversights in 0.13.0:
std feature was not documented.std were not marked.rxml now consistently uses single quotes for all XML attributes. This may break your tests if you did exact string matching against rxml output. Thank
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%.
This release carries more breaking changes which do not have seamless deprecations than previous releses.
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.
This release is a minor feature release which adds the Debug trait to rxml::Item , nothing more.
This release is a minor feature release which adds the Debug trait to rxml::writer::Item, nothing more.
Thus, this release contains once more a couple of breaking changes. We tried to introduce compatibility aliases and such in order to ease the transiti…
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.
This release is a bugfix release.
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!
Some items which have been deprecated since 0.8 or earlier have been deleted.
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:
Lexer has been removed from the public APINamespaceResolver has been moved from the crate root to rxml::parserPullDriver, PushDriver and AsyncDriver have been removed; there are transitional type aliases which should help the migration.EventRead and AsyncEventRead traits have been removed; they are now unnecessary.FeedParser or PushDriver, you will now need to import the rxml::Parse trait.In general, the deprecation notices should help the migration. If you don't know how to proceed the upgrade, please file an issue.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →