BymlLibrary 2.0.3

There is a newer version of this package available.
See the version list below for details.
dotnet add package BymlLibrary --version 2.0.3
NuGet\Install-Package BymlLibrary -Version 2.0.3
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="BymlLibrary" Version="2.0.3" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add BymlLibrary --version 2.0.3
#r "nuget: BymlLibrary, 2.0.3"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install BymlLibrary as a Cake Addin
#addin nuget:?package=BymlLibrary&version=2.0.3

// Install BymlLibrary as a Cake Tool
#tool nuget:?package=BymlLibrary&version=2.0.3

Byml Library

Modern Binary Yml IO library written in managed C#

Supports versions 2-7.

Some v7 nodes may not be supported, but everything used in TotK is.

Usage

Reading a Byml File

using BymlLibrary;
using Revrs;

byte[] data = File.ReadAllBytes("path/to/file.byml");
Byml byml = Byml.FromBinary(data);

Reading a Byml for Read-Only use (Much Faster)

using BymlLibrary;
using Revrs;

byte[] data = File.ReadAllBytes("path/to/file.byml");
RevrsReader reader = new(data);
ImmutableByml byml = new(ref reader);

Writing a Byml File

/* ... */

// Avoid writing directly to
// a file stream. Seeking is
// much slower and used extensively
// during serialization.
using MemoryStream ms = new();
byml.WriteBinary(ms, Endianness.Little);

// Write to a byte[]
byte[] data = byml.ToBinary(Endianness.Little);

Benchmarks

Benchmarks for Actors/ActorInfo.product.byml (BotW for Switch)

Method Mean Error StdDev Gen0 Gen1 Gen2 Allocated
Read 66.53 ms 1.312 ms 1.923 ms 3250.0000 3125.0000 625.0000 40.04 MB
ReadImmutable 15.97 ns 0.245 ns 0.217 ns - - - -
Write 26.62 ms 0.530 ms 0.886 ms 531.2500 375.0000 250.0000 12.79 MB
ToBinary 27.09 ms 0.540 ms 1.384 ms 593.7500 437.5000 312.5000 14.66 MB
ToYaml 35.63 ms 0.574 ms 0.537 ms 1785.7143 1500.0000 214.2857 33.94 MB
FromYaml 383.30 ms 6.531 ms 5.790 ms 14000.0000 13000.0000 1000.0000 198.88 MB

Benchmarks for the test file (contains one of every node in a Map)

Method Mean Error StdDev Gen0 Gen1 Allocated
Read 1.587 μs 0.0154 μs 0.0144 μs 0.2384 0.0019 3.68 KB
ReadImmutable 16.13 ns 0.074 ns 0.066 ns - - -
Write 4.486 μs 0.0872 μs 0.1004 μs 0.6332 0.0076 9.73 KB
ToBinary 4.370 μs 0.0530 μs 0.0442 μs 0.6714 0.0076 10.35 KB
ToYaml 2.888 μs 0.0453 μs 0.0485 μs 0.3090 - 4.78 KB
FromYaml 23.004 μs 0.2572 μs 0.2280 μs 2.0447 0.1221 31.73 KB

Note: ns (nanoseconds) is not μs (microseconds)!

Install

NuGet NuGet

NuGet
Install-Package BymlLibrary
Build From Source
git clone https://github.com/EPD-Libraries/BymlLibrary.git
dotnet build BymlLibrary

Special thanks to Léo Lam for his extensive research on EPD file formats.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.1.11 115 4/23/2024
2.1.10 83 4/14/2024
2.1.9 87 4/12/2024
2.1.8 118 4/6/2024
2.1.7 85 4/6/2024
2.1.6 113 2/24/2024
2.1.5 99 2/4/2024
2.1.4 94 1/28/2024
2.1.3 71 1/28/2024
2.1.2 98 1/21/2024
2.1.1 87 1/18/2024
2.1.0 77 1/18/2024
2.0.6 93 1/16/2024
2.0.5 84 1/16/2024
2.0.4 85 1/15/2024
2.0.3 88 1/13/2024
2.0.2 82 1/13/2024
2.0.1 79 1/13/2024
2.0.0 90 1/13/2024
1.1.4 573 10/16/2022
1.1.3 362 8/18/2022
1.1.2 371 8/16/2022
1.1.1 424 7/11/2022
1.1.0 414 6/23/2022
1.0.7 400 6/23/2022
1.0.6 393 6/23/2022
1.0.5 392 6/20/2022
1.0.4 384 6/16/2022
1.0.3 377 6/8/2022
1.0.2 388 6/7/2022
1.0.1 374 6/4/2022
1.0.0 381 6/3/2022