#nintendo #file-format #yaz0 #byml #aamp #sarc


Rust bindings for oead C++ library for common Nintendo formats

46 releases

new 0.25.1 Apr 7, 2024
0.23.1 Jun 12, 2023
0.20.2 Mar 1, 2023
0.18.3 Dec 12, 2022
0.9.0 Nov 18, 2021

#522 in Parser implementations

Download history 18/week @ 2023-12-19 18/week @ 2023-12-26 11/week @ 2024-01-02 26/week @ 2024-01-09 25/week @ 2024-01-16 25/week @ 2024-01-23 23/week @ 2024-01-30 17/week @ 2024-02-06 39/week @ 2024-02-13 51/week @ 2024-02-20 114/week @ 2024-02-27 553/week @ 2024-03-05 74/week @ 2024-03-12 62/week @ 2024-03-19 55/week @ 2024-03-26 319/week @ 2024-04-02

515 downloads per month
Used in 2 crates


18K SLoC

C 12K SLoC // 0.2% comments Rust 6K SLoC // 0.0% comments C++ 126 SLoC // 0.2% comments Shell 23 SLoC // 0.1% comments


crates.io api license build

A Rusty child of the oead C++ library

oead is a C++ library for common file formats that are used in modern first-party Nintendo EAD (now EPD) titles.

Currently, oead only handles very common formats that are extensively used in recent games such as Breath of the Wild and Super Mario Odyssey.

  • AAMP (binary parameter archive): Only version 2 is supported.
  • BYML (binary YAML): Versions 2, 3, and 4 are supported (up to v7 in roead).
  • SARC (archive)
  • Yaz0 (compression algorithm)

The roead project brings oead's core functionality, by directly porting or (for the yaz0 module) providing safe and idiomatic bindings to oead's features. (The Grezzo datasheets are not supported.) For more info on oead itself, visit its GitHub repo.

Each of roead's major modules is configurable as a feature. The default feature set includes byml, aamp, sarc, and yaz0. For compatibility with many existing tools for these formats, there is also a yaml feature which enables serializing/deserializing AAMP and BYML files as YAML documents. Finally, serde support is available using the with-serde feature.

For API documentation, see the docs for each module.

Building from Source

Most of roead is pure Rust and can compiled with any relatively recent release. The stable MSRV is 1.69. However, the yaz0 module provides FFI bindings to oead code, so to use it the following additional requirements are necessary:

  • CMake 3.12+
  • A compiler that supports C++17
  • Everything necessary to build zlib

First, clone the repository, then enter the roead directory and run git submodule update --init --recursive.


Issue tracker: https://github.com/NiceneNerd/roead/issues
Source code: https://github.com/NiceneNerd/roead

This project is licensed under the GPLv3+ license. oead is licensed under the GPLv2+ license.


~386K SLoC