This is a mature Rust library for parsing and serializing RSS feeds (versions 0.90 through 2.0). It provides a complete data model for RSS channels, items, categories, enclosures, and other elements, with support for common extensions like iTunes, Dublin Core, Syndication, and Atom. The library uses quick-xml for efficient XML processing and offers optional builder patterns, validation against the RSS 2.0 specification, and serde serialization. The codebase is well-structured, with clear separation of concerns across modules, comprehensive test coverage (including round-trip read/write tests), and active maintenance with regular dependency updates. It is a solid, production-ready library for any Rust project needing RSS feed handling.
node-feedparser is a streaming RSS/Atom/RDF feed parser for Node.js. In production, it consumes XML from any readable stream and emits normalized feed metadata and article objects through a Transform stream. Consumers use the `meta` event for feed-level data, the `readable`/`data` events for individual items, or async iteration via `for await...of`. The parser handles real-world feed quirks: XML namespaces, CDATA, xml:base URL resolution, embedded HTML in content, duplicate enclosures, malformed XML, and SAX errors that can optionally be resumed past. A small CLI wrapper (`bin/feedparser.js`) allows piping feeds directly to JSON output. The architecture is a classic Node.js library rather than a service or pipeline. The core is `lib/feedparser.js`, which wires SAX events into a normalized model, with `lib/utils.js` providing URL resolution, HTML stripping, and namespace helpers, and `lib/constants.js` mapping namespaces to prefixes. There is no database, API server, or analytics layer. The library depends only on small utility packages (`sax`, `readable-stream`, lodash helpers, `mri` for the CLI), making it embeddable and portable. The repository includes an extensive Mocha test suite with realistic feed fixtures, TypeScript type definitions, and CI coverage across multiple Node.js versions. This is not a data-research repository; it is a general-purpose parsing utility with strong attention to edge cases in syndicated XML. The codebase is mature and actively maintained, with recent commits addressing parser edge cases and type definitions. Technical drift is moderate: some dependencies and code patterns (readable-stream v2, lodash v4, `var` usage) reflect an older Node.js baseline, though the package is still tested against modern Node versions.
Vienna is a mature, macOS-native RSS/Atom/JSON feed reader that operates as a traditional desktop application. In production, it periodically fetches subscribed feeds via HTTP, parses them into structured articles (RSS, Atom, JSON Feed), stores articles and folder metadata in a local SQLite database (via FMDB), and presents them through a Cocoa/AppKit interface with a folder tree, article list, and built-in WebKit-based browser for reading. It supports smart folders, OPML import/export, and synchronization with Open Reader-compatible services (BazQux, FeedHQ, InoReader, TheOldReader). The application also provides a plugin system for extending feed sources, sharing, search, and actions, and uses Sparkle for automatic updates. The architecture follows a classic MVC pattern with a heavy reliance on notifications and the singleton pattern for the database and preferences. Key entry points include `AppController` (application delegate), `ArticleController` (article list management), `FoldersTree` (folder outline), `RefreshManager` (feed fetching), and `Database` (persistence). External dependencies include FMDB, MMTabBarView, TRVSURLSessionOperation, and Sparkle, all managed via Swift Package Manager or manual vendoring. The codebase is a mix of Objective-C and Swift, with some deprecated API usage and private WebKit hooks, but is actively maintained with a comprehensive test suite and CI pipeline.