Expand description

This crate provides an iterator and a serializer for EBML files. Its primary goal is to provide typed iteration and serialization as lightly and quickly as possible.

EBML stands for Extensible Binary Meta-Language and is somewhat of a binary version of XML. It’s used for container formats like WebM or MKV.

Important - Specifications

The iterator contained in this crate is spec-agnostic and requires a specification implementing the specs::EbmlSpecification and specs::EbmlTag traits to read files. Typically, you would only use this crate to implement a custom specification - most often you would prefer a crate providing an existing specification, like webm-iterable.

Implementing custom specifications can be made less painful by enabling the "derive-spec" feature flag in this crate and using the #[ebml_specification] macro.


There is currently only one optional feature in this crate, but that may change over time as needs arise.

Known Limitations

This library was not built to work with an “Unknown Data Size” as defined in RFC8794. As such, it likely will not support streaming applications and will only work on complete datasets.


Potential errors that can occur when reading or writing EBML data.

Provides the EBML specification types.

Contains a number of tools that are useful when working with EBML encoded files.


Provides an iterator over EBML files (read from a source implementing the std::io::Read trait). Can be configured to read specific “Master” tags as complete objects rather than just emitting when they start and end.

Provides a tool to write EBML files based on Tags. Writes to a destination that implements std::io::Write.