element.version === currentVersion)) { versionNodes.unshift({ version: currentVersion, url: "#" }); } document.querySelector("#project-version").innerHTML = versionNodes.reduce( (acc, element) => { const status = currentVersion === element.version ? "selected disabled" : ""; return ` ${acc} `; }, `
taffy · v1.1.1

taffy

YAML 1.2 parser for Gleam. Optional native fast_yaml C NIF backend on Erlang.

Install

gleam add taffy
gleam add fast_yaml   # optional, native backend (Erlang only)

Usage

import taffy

pub fn main() {
  let assert Ok(value) = taffy.parse("name: John\nage: 30")
  let assert Ok(name) = taffy.get(value, "name")
  let json = taffy.to_json_string(value)
}

Native backend — same API, faster:

import taffy/native

let assert Ok(value) = native.parse(input)
taffy.parsetaffy/native.parse
TargetErlang + JSErlang only
Speed (small / medium / large)15k / 1.4k / 400 ops/s55k / 5.7k / 560 ops/s

Measured on Ryzen 7 PRO 7840U, OTP 28, single run via gleam run -m benchmark. Small = 5-key flat map, medium = ~80-line OpenAPI, large = ~2000-line spec. Treat as order-of-magnitude.

Reference

  • parse, parse_all, parse_with_options, parse_all_with_options
  • get, get_or, get_path, index
  • as_string, as_int, as_float, as_bool, as_list, as_dict, as_pairs, is_null
  • to_json, to_json_string, to_yaml
  • validate_unique_keys, error_location

parse rejects alias bombs (>10M nodes) and block nesting >1024 levels. Override via parse_with_options(input, Options(..taffy.default_options(), max_depth: 64)).

Development

gleam test
gleam run -m benchmark

License

Apache 2.0

Search Document