juststeveking/feed-parser
A simple Laravel package for fetching and parsing RSS and Atom feeds into a clean, consistent structure, so you can work with feed items and metadata through a friendly PHP API instead of handling raw XML yourself.
What shipped: JustSteveKing/feed-parser 0.0.1 — an initial public release of a PHP feed parser with "basic support" for RSS and Atom. This is the first cut, not an increment on prior code we have assessed.
Architecture fit
Integration feasibility
Technical risk
| Risk | Severity | Rationale |
|---|---|---|
| Pre-1.0 API instability | High | 0.0.x reserves the right to break on any patch. Public surface is unproven and may be redesigned wholesale. |
| Single-maintainer dependency | Medium-High | One author, one release. Bus factor of one; abandonment is a realistic scenario. |
| Format coverage gaps | Medium | "Basic" RSS/Atom strongly implies no Media RSS, Dublin Core, iTunes/podcast namespaces, or JSON Feed. Podcast and content-marketing feeds will likely fail or silently drop fields. |
| Malformed-feed robustness | Medium | Initial releases rarely handle truncated XML, encoding mismatches, or hostile input (XXE, billion-laughs). Unverified for 0.0.1. |
| Security posture | Medium | Parsing untrusted remote XML is an attack surface. No stated hardening, size limits, or entity-expansion protection. |
| Documentation maturity | Medium | Release notes are two sentences; expect to read source to integrate. |
Key questions
SimpleXMLElement?false?libxml external entity loading disabled, and is there a size/entity guard?Stack fit
FeedSource/FeedParser port in our domain layer, with the package as one adapter. This contains the pre-1.0 blast radius to a single class.Migration path
simplexml_load_file parsing in-house, treat the package as a replacement candidate only after a side-by-side comparison on our real feed corpus. Do not rip out working parsers for a 0.0.1.composer.json with an exact or tilde constraint (0.0.1, not ^0.0), and expose only our own interface to callers so a future swap or fork is a one-file change.Compatibility
0.0.x → 0.0.y; a tilde on 0.0.1 still allows 0.0.x drift, so prefer 0.0.1 as an exact constraint and upgrade deliberately.ext-libxml/ext-simplexml are present in all target environments (including CI and any containerised workers) — a classic late-breaking surprise.Sequencing
FeedParser interface over the package, with normalisation to our own DTOs.Gate steps 3–5 on the spike answering the output-shape and error-handling questions. If the package fetches URLs itself or returns raw XML nodes, re-scope before proceeding.
Maintenance
0.0.x API and to re-verify on every bump.Support
Scaling
Failure modes
| Mode | Expected behaviour | Mitigation |
|---|---|---|
| Malformed/truncated XML | Likely throws or returns empty; unverified | Catch at adapter boundary; record feed as failed, do not crash the job |
| Unsupported namespace | Silent field loss — the dangerous one | Assert on required fields per source; alert on unexpected nulls |
| Upstream feed schema drift | Partial/empty parses | Store raw payload alongside parsed output for reprocessing |
| Package API break on bump | Fatal at boot or call site | Exact pin + adapter isolation + CI test on upgrade PRs |
| Hostile XML (XXE/entity expansion) | Depends on libxml config | Explicit security review; disable external entities; size caps |
| Maintainer abandonment | Frozen at a working version | Vendoring plan; MIT-style licence check for fork viability |
Silent field loss is the failure mode to design against. It produces plausible-looking output that is wrong, which is far more expensive than a crash.
Ramp-up
Recommendation: Adopt for evaluation and low-stakes internal ingestion only. Proceed to production for non-critical feeds after the spike, security review, and shadow-mode comparison. Do not place this on a critical path — customer-facing content pipelines or anything where silently missing fields cause commercial harm — until it reaches a stable release or we have absorbed the code. Re-assess on the next release, and specifically on whether typed output, namespace support, and error semantics have stabilised.
How can I help you explore Laravel packages today?