NimYAML is a pure Nim YAML implementation without any dependencies other than Nim's standard library. It enables you to serialize Nim objects to a YAML stream and back. It also provides a low-level event-based API.
Documentation, examples and an online demo are available here. Releases are available as tags in this repository and can be fetched via nimble:
nimble install yaml
This library is stable. NimYAML passes all tests of the current YAML 1.2 test suite. This project follows SemVer.
I am committed to maintaining the library, but will seldom introduce new features. PRs are welcome.
NimYAML requires Nim 2.0.0 or later.
The last version supporting Nim 1.6.x is v1.1.0.
Use this in your .nimble file if you haven't migrated to Nim 2.x yet:
requires "yaml ^= 1.1.0"Be aware that serialization currently doesn't support the following features in types that are used for loading and dumping:
- Polymorphism: If a field has a type
ref Parent, you cannot load aref Childinto it. - Generic objects: The code auto-generating loading and dumping functions currently cannot process instances of generic objects anywhere in the type you want to load/dump.
- Default values: NimYAML uses its own
{.defaultVal: "foo".}pragma. It currently cannot process default values introduced in Nim 2.0.
Nix users can nix develop to get a devshell with the required Nim version. You'll need to have Flakes enabled.
nim test # runs all tests
nim lexerTests # run lexer tests
nim parserTests # run parser tests (git-clones yaml-dev-kit)
nim nativeTests # runs native value tests
nim quickstartTests # run tests for quickstart snippets from documentation
nim clean # guess
nim build # build a libraryWhen debugging crashes in this library, use the d:debug compile flag to enable printing of the internal stack traces for calls to internalError and yAssert.
The online documentation on nimyaml.org, including the testing ground, is generated via Nix Flake.
You can build & run the docs server at via
nix run .#webdocsIt can be deployed to NixOS by importing the Flake's NixOS module and then doing
services.nimyaml-webdocs.enable = true;This will run the documentation server locally at 127.0.0.1:5000.
Since there isn't much of a use-case for third parties to host this documentation, there is no support for running the server without Nix.
If you want to support this project financially, there's a GitHub Sponsor button to the right.