A robust Go library for parsing RSS, Atom, and JSON feeds with support for extensions and invalid feed handling.
gofeed is a Go library for parsing RSS, Atom, and JSON feeds. It provides a unified interface to handle multiple feed formats, supports extensions, and gracefully deals with invalid or broken feeds. The library solves the problem of reliably consuming syndicated content from various sources in Go applications.
Go developers building applications that need to consume, aggregate, or process syndicated content from RSS, Atom, or JSON feeds, such as news readers, content aggregators, or monitoring tools.
Developers choose gofeed for its robustness in handling malformed feeds, comprehensive support for feed formats and extensions, and flexible parsing options with both universal and specialized parsers. Its best-effort approach and extensible architecture make it a reliable and adaptable solution.
Parse RSS, Atom and JSON feeds in Go
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Supports RSS (0.90 to 2.0), Atom (0.3, 1.0), and JSON (1.0, 1.1) feeds, as detailed in the Features section, making it versatile for diverse feed sources.
Uses a best-effort approach to handle broken XML feeds, including unescaped markup and incorrect date formats, ensuring resilience in real-world scenarios where feeds are often malformed.
Offers both universal and specialized parsers, allowing developers to choose between ease of use (unified model) and granular control (feed-specific models), with clear examples in Basic Usage.
Includes built-in support for Dublin Core and Apple iTunes extensions, and enables custom translators for tailored parsing, as shown in the Advanced Usage section with the iTunes author example.
Relies on multiple external libraries like goxpp, goquery, testify, and jsoniter, which can increase project complexity, binary size, and potential maintenance overhead.
Only Dublin Core and Apple iTunes are natively parsed into dedicated structs; other extensions require manual access via the extensions tree, adding development effort for less common formats.
The universal parser introduces translation steps between feed types, which may impact performance in high-throughput scenarios compared to using specialized parsers directly.