A Go library for encoding and decoding Avro data to and from binary and textual JSON formats.
Goavro is a Go library for encoding and decoding Avro data in both binary and textual JSON formats. It enables Go applications to work with Avro, a data serialization system commonly used in data streaming and storage within distributed systems like Apache Kafka. The library provides dynamic schema handling at runtime, allowing schema evolution without recompilation.
Go developers building applications that integrate with Avro-based data pipelines, such as those using Apache Kafka for data streaming or requiring serialization for distributed storage. It is particularly suited for environments where schemas change frequently and runtime flexibility is needed.
Developers choose Goavro for its dynamic, runtime approach to Avro serialization without requiring code generation, making it ideal for schema evolution. It offers significant performance improvements (3x–4x faster than its predecessor), thread-safe operations, and support for native Go maps, simplifying data handling.
Goavro is a library that encodes and decodes Avro data.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Compiles Avro schemas into Codec instances at runtime, enabling schema evolution without recompilation—ideal for environments where schemas change frequently.
Uses native Go maps for record data, simplifying encoding and decoding without custom structs or code generation, which reduces boilerplate and eases development.
Offers 3x–4x faster encoding/decoding than its predecessor by using byte slices instead of io.Reader/Writer, handling complex data efficiently.
The Codec type is stateless and safe for concurrent use by multiple goroutines, supporting high-concurrency applications without additional locking.
Encodes and decodes both binary and textual JSON Avro formats, providing flexibility for debugging, interoperability, and different data pipelines.
The project is in maintenance mode as LinkedIn internally switched to hamba/avro for better performance, indicating reduced active development and potential lack of future updates or bug fixes.
Does not support Avro aliases, limiting schema evolution capabilities, and Kafka streams support has been removed, hindering integration with common Avro ecosystems.
Relies on native Go maps (map[string]interface{}), which can lead to runtime type errors and less compile-time safety compared to code-generated structs, increasing debugging complexity.
Requires manual wrapping with the Union function for non-null union values, adding boilerplate and potential for errors in data translation.