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.
Architecture fit
Feed::loadRss(), Feed::loadAtom()) returning a SimpleXMLElement-derived object graph. Any Laravel integration is scaffolding we own.FeedReader contract. The tiny API makes it trivially swappable, which is the main architectural argument in its favor.laminas/laminas-feed, willdurand/feed, SimplePie). There is no capability here we cannot get elsewhere with better support terms.Integration feasibility
composer require dg/rss-php works on modern PHP, but the manifest predates PHP 7/8 and declares only a legacy floor. Expect no explicit ^8.x constraint — installation succeeds, support does not exist.Technical risk
Key questions
Stack fit
FeedReader interface, DgRssFeedReader implementation, FeedServiceProvider binding, and a config/feeds.php for timeouts, user agent, cache TTL, and URL allowlist.Http facade (Guzzle under the hood) with explicit connect/read timeouts, retry with backoff on 5xx/429, and size caps — then handing the body to the parser. This recovers transport control while retaining the parser we evaluated.SimpleXMLElement graph into a typed DTO (FeedItem) so downstream code never touches the library's shape. This is the seam that makes the eventual swap a one-file change.Migration path
laminas-feed adapter, land dg/rss-php as a second adapter, and let parity tests decide. If the library wins on simplicity, keep it; if it loses on namespace handling, delete it before it reaches production.composer.json, add a replace/fork to a internal/ VCS path once upstream is confirmed dead, and freeze the API surface behind the contract. Exit cost is roughly one adapter file plus fixtures.Compatibility
E_DEPRECATED enabled — dynamic property and SimpleXML coercion warnings are likely and will pollute logs.Sequencing
FeedReader contract, FeedItem DTO, and config schema.PollFeed job with per-feed locking.Maintenance
composer outdated --strict, or a composer audit gate in CI). Expect the abandoned flag to fail policy in regulated environments.Support
Scaling
WithoutOverlapping) and jittered schedules to avoid thundering herds against popular sources.Failure modes
Ramp-up
How can I help you explore Laravel packages today?