dg/rss-php
dg/rss-php is a lightweight, dependency-free PHP library for reading RSS and Atom feeds. It offers a simple API for fetching and parsing feeds, handles namespaces and enclosures, and works across PHP versions from 5.3 onward.
FeedReader interface (swappable parser) or leaks into domain code. It also forces the related calls: do we store raw parsed items or normalize into our own model; do we sanitize third-party HTML before render; do we poll on a schedule with ETag/Last-Modified, or naively refetch.spatie/laravel-feed or symfony/feed) and not a fit for high-volume, untrusted-source ingestion without significant hardening on our side.Consider it when:
each()), curly-brace string offsets, and untyped/loosely-typed signatures before assuming it works.Look elsewhere when:
laminas/laminas-feed (actively maintained, read and write, namespace-aware) or simplepie/simplepie (enormous real-world feed corpus tolerance, the de facto survivor).willvincent/feeds-style wrappers exist, and for a handful of known-good feeds, Http::get() plus SimpleXMLElement is fewer moving parts than a stale dependency.Executives: "This is a ~500-line, permissively licensed RSS/Atom reader that lets us validate feed-based content ingestion in days rather than weeks, with no vendor contract and no procurement. It is deliberately a short-term accelerator, not a platform bet — the library hasn't been updated since 2015, so my recommendation is to prove the feature with it and then swap in a maintained parser (laminas-feed or SimplePie) before anything feed-related becomes customer-critical. Cost of the swap is low if we keep it behind our own interface, and I'm asking for that boundary up front."
Engineering: "Read-only consumption. Wrap it behind a single FeedReader contract so the parser is swappable, and budget a short spike to confirm PHP 8 compatibility and behavior across our actual feed list. We own everything around the parser regardless: HTTP timeouts and retries, ETag/Last-Modified conditional GETs, per-feed error isolation, dedupe, and sanitizing third-party HTML before render. Don't fork or extend the library — if ingestion turns out to be a core product surface, we move to a maintained parser and build our own normalization layer instead."
How can I help you explore Laravel packages today?