Changes in version 0.1.0 (2026-10-07) First release. The API is complete and the package is well tested, but it is not frozen: names, defaults and return types may still change. Pin the version if you depend on it. Features - yaml_parse() / yaml_parse_all() parse YAML 1.2 from a string or a raw vector, yaml_emit() / yaml_emit_all() convert R objects back to YAML, and yaml_read() / yaml_read_all() / yaml_write() / yaml_write_all() do the same for files. Throughout, _all means a YAML stream: several documents separated by ---, which is a different thing from a sequence. - Scalars follow the YAML 1.2 core schema, so yes and no are strings and dates are not coerced. Quoted scalars are always strings, and a quoted empty string never becomes NULL. - Integers beyond 2^53 are preserved as zuyaml_bigint rather than silently rounded. big_integers selects a different policy. - Tags override schema resolution, so !!str 12 is the string "12", in every spelling a core tag has: the shorthand, the verbatim form, and a handle bound by a %TAG directive. Application tags such as !duration are ignored by default; tags = "error" refuses them. - Mappings whose keys are sequences or mappings become zuyaml_map rather than having their structure flattened into names. This is parse-only. - Errors are classed conditions carrying a stable code, line and column, so callers never have to match on message text. - max_size, max_depth and max_nodes bound untrusted input. The last of these is what stops alias-expansion bombs, which are small and shallow by construction and so escape the first two. - A value emitted with yaml_emit() parses back to the same value. Strings containing a line break, and strings with leading or trailing whitespace, are quoted so that neither is lost; a double with an integral value emits as 1.0, so it does not come back as an integer; and mapping keys are treated exactly like values. Asserted over the whole yaml-test-suite and over generated input. The exceptions are listed in vignette("zuyaml"). - A literal NUL byte in the input is refused with an embedded_nul condition and a position. The underlying library treats one as end of input, so the rest of the document -- including any later documents in the stream -- would otherwise be discarded without a word. - A UTF-8 byte order mark at the start of a stream is not part of the document. - A float outside the range of a double converts to the nearest one: 1e309 is Inf, 1e-324 is 0, and 1e-323 is the subnormal it names. One extreme value never changes the R type of a field. Notes - simplify defaults to FALSE: the shape of the result never depends on the contents of the document. - The cyaml C library is bundled and pinned to v0.1.3. See inst/COPYRIGHTS for licensing and the modifications made for R compatibility, and tools/patches/README.md for why each one is required.