// the find
vladimirvivien/automi
A stream processing API for Go (now with generic type support)
Automi is a channel-based stream processing library for Go, recently rewritten to use generics instead of reflection. It lets you compose data pipelines from typed sources, operations (filter, map, reduce, window), and sinks. Aimed at Go developers who want Kafka Streams-style pipeline composition without pulling in a JVM or a heavyweight framework.
Generics adoption is done properly — the type parameters flow through the pipeline so the compiler catches mismatched stages at build time, not at runtime. The back-pressure story is honest: it's Go channels under the hood, so slow consumers naturally throttle producers without any extra machinery. The built-in source/sink coverage (CSV, io.Reader/Writer, slices, channels) handles the common cases without ceremony. Test coverage is solid — every operator and sink has a corresponding _test.go file, which is more than most hobby-scale Go libraries manage.
848 stars after years of development suggests the library hasn't found a real user base, and the v0.1.0 reflection branch being abandoned means anyone on the old API has to rewrite. There's no fan-out, merge, or broadcast primitive — if your pipeline needs to split into parallel branches and rejoin, you're on your own with raw channels. The windowing support is minimal: batch-all and size/duration triggers, but nothing for event-time semantics, watermarks, or out-of-order event handling, which is the hard part of stream processing. Error handling propagates through a returned channel from Open(), but there's no per-element error routing — one bad record can kill the whole stream.