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_optionsget,get_or,get_path,indexas_string,as_int,as_float,as_bool,as_list,as_dict,as_pairs,is_nullto_json,to_json_string,to_yamlvalidate_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 benchmarkLicense
Apache 2.0