finds.dev← search

// the find

jf-tech/omniparser

★ 1,088 · Go · MIT · updated Feb 2025

omniparser: a native Golang ETL streaming parser and transform library for CSV, JSON, XML, EDI, text, etc.

omniparser is a Go library for parsing CSV, fixed-length text, XML, JSON, and EDI/X12/EDIFACT input and transforming it into JSON output using a declarative, XPath-based JSON schema instead of hand-written parsing code. It's aimed at teams building ETL/integration pipelines, especially ones that have to deal with EDI formats, where Go tooling is thin on the ground.

The EDI/X12/EDIFACT support is the real draw — there's almost nothing else in Go for this, and the README is honest that the closest competitors (Smooks, BeanIO, Jolt) either can't do EDI at all or are effectively dead. It reads input in a streaming fashion rather than loading the whole file into memory, which matters when your EDI or CSV files are large. Test coverage looks genuinely solid: per-format snapshot tests, CI, and a codecov badge that isn't just decoration. It's also extensible at the right seams — custom file formats and custom functions, including a javascript custom_func for inline transform logic without recompiling Go.

You're trading hand-written parsing code for a bespoke JSON+XPath schema DSL, and the doc folder is as large as it is because that DSL needs a lot of explaining — expect a real ramp-up before you're productive. The project is low-bus-factor (three contributors) and cooling off: the last meaningful feature landed mid-2024, and the README flatly states the hosted playground is dead with no replacement found. It still pins a minimum Go version of 1.16, which suggests the core hasn't been revisited to take advantage of generics or newer stdlib idioms. Embedding a full JavaScript engine for custom_func is convenient but adds a second runtime and a bigger attack surface inside what's supposed to be a focused parsing library.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →