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.parse | taffy/native.parse |
| Target | Erlang + JS | Erlang only |
| Speed (small / medium / large) | 15k / 1.4k / 400 ops/s | 55k / 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