Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Feeds Laravel Package

dragon-code/laravel-feeds

dragon-code/laravel-feeds is a lightweight Laravel package for generating RSS and Atom feeds from your application data. Define channels and items with a simple API, customize feed metadata, and serve standards-compliant XML to readers and aggregators without hand-writing feed markup.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Unchanged in substance. Laravel Feeds remains a serialization layer between your query/data layer and a feed consumer (marketplace, price aggregator, ad platform). The 2.0.0 release actually sharpens this picture: the notable additions — per-feed converter configuration, per-item date formatting, slug-derived filenames — are all output-shaping concerns, not pipeline concerns. That confirms the package is deliberately narrow, which keeps coupling low and keeps the real contract at the file format rather than the package API. The "split feeds" work referenced in the performance fixes (#313, #314) suggests the package does handle partitioned output for large catalogs, which nudges it slightly closer to a batch-export tool but still nowhere near ETL/CDC territory. Fit is good for scheduled catalog and pricing exports from a Laravel app; still a poor fit for streaming, sub-minute freshness, or general data movement.

Integration feasibility. Composer install, config publish, feed definition, artisan/queue entry point — same as before, and the docs surface has grown again (API config-attribute reference, 1.x→2.x upgrade guide, README clarity pass on commands). Feasibility now hinges on a version-matrix question rather than a discovery-cost question: 2.0.0 is explicitly built for PHP 8.4, Laravel 13, Pest 5. That is a forward-leaning support matrix. If your fleet is on Laravel 10/11 or PHP 8.1–8.3, this release may not be installable, and you would be adopting the 1.x line — which in turn raises the question of how long 1.x gets fixes. Confirm the actual composer.json constraints rather than inferring from release notes. [unverified] I still have not read the generation path to confirm whether output is streamed to disk or buffered; the batch-related fixes imply chunked iteration exists, but chunked iteration and streamed writes are not the same thing.

Technical risk. The maturity picture has improved materially and should be re-weighted. A 2.0.0 with a written upgrade guide, a documented config-attribute API, and a run of targeted performance fixes (#313 quadratic split-feed lookups, #314/#315 repeated config resolution, #316 per-row path resolution) is the behaviour of a maintained project with real users hitting real scaling walls. PR numbers in the 280–320 range also imply sustained throughput, not a hobby repo. Risks that remain:

  • Bus factor is still one. Every item in this release is authored by the same maintainer. High output from a single person is both a good sign (engagement) and the same concentration risk as before.
  • Breaking changes are bundled into a major that also moves the platform floor. You cannot take the incremental features (converter config, date format) without also taking PHP 8.4 / Laravel 13. That couples a feature upgrade to a runtime upgrade, which is an expensive coupling for most teams.
  • Consumer-visible naming changed. Removing the "Feed" suffix from feed titles and generating files from title-derived slugs (#287, #293) can change generated filenames and therefore pull URLs. That is a silent breakage vector for marketplace ingestion if the old path is bookmarked or allow-listed on the consumer side.
  • Feed format specs still drift on the consumer side, and target maintenance remains your problem regardless of package health.
  • The prior note about a future-dated release now reads differently. Laravel 13 / PHP 8.4 targeting suggests a roadmap-ahead-of-GA posture. Verify tag dates and CI matrix against released framework versions, not announced ones, before planning.

Key questions to resolve before adoption.

  • What are the exact 2.x constraints for PHP and Laravel, and which versions are covered in CI? Does 2.0 drop Laravel 10/11, or is it additive?
  • Is there a supported 1.x maintenance window, and what is the recommended path for teams not yet on PHP 8.4?
  • Does the 1.x→2.x upgrade guide enumerate the title/slug changes as breaking, with a migration recipe for existing feed URLs?
  • Are slugs stable across releases, and can they be pinned in config so filenames do not drift?
  • Does generation stream to disk? What is peak memory for a 100k-row catalog under 2.0.0 versus 1.x?
  • Are writes atomic (temp file + rename), or can a consumer read a half-written feed? Nothing in the release notes addresses this.
  • What does "split capacity" (#313) control — a configurable batch/row ceiling? What happens at the boundary?
  • Which feed formats/targets ship in-box versus user-supplied templates, and did any target templates change in this release?
  • Is there a regression benchmark behind the performance fixes, or are they untested claims?
  • Test coverage, and whether tests assert byte-level output against fixtures.

Integration Approach

Stack fit. Still assumes a current Laravel app, but the assumption is now sharper: 2.x targets Laravel 13 / PHP 8.4. Confirm your upgrade runway before scoping the package work — the integration is trivial next to a PHP runtime bump. Composition with the standard operational stack (scheduler, queue workers, object storage, signed URLs/CDN) is unchanged; the package produces the artifact and nothing else.

Migration path. Two migrations are now in play and should not be conflated:

  1. 1.x → 2.x. Follow the published upgrade guide. Treat the feed-title suffix removal and slug-derived filenames as the risky items: enumerate every generated filename and every consumer-configured URL before and after, and diff the artifact paths, not just the bytes. If a consumer has a hard-coded path or an allow-list, stage the new filenames alongside the old for one cycle.
  2. Incumbent exporter → this package. Unchanged: pick one low-value feed, run in parallel, diff output across several cycles including edge cases (missing images, zero price, non-ASCII titles), keep the old path behind a config flag for one release.

If you are already on this package at 1.x, the pragmatic sequence is: take the performance fixes only if you are already planning the runtime upgrade; otherwise stay on 1.x and track its support window.

Compatibility. Pin the exact 2.x version in composer.json. Run composer why-not against both your Laravel and PHP constraints before attempting the bump — the failure mode here is a resolver error, not a runtime error, so it surfaces early. Verify ext-xml and ext-mbstring. Treat the marketplace feed specification version as the compatibility boundary that matters most, with the package's own semver second.

Sequencing.

  1. Confirm 2.x installs against your actual PHP/Laravel constraints. If it does not, stop and scope the runtime upgrade as a separate project.
  2. Read the 1.x→2.x upgrade guide and enumerate consumer-visible changes (titles, slugs, filenames, date formats).
  3. Spike in a throwaway branch: one feed target, real data sample, measure wall time and peak memory against your 1.x baseline if you have one.
  4. Define the feed class and config; keep business rules (which products, which prices, which locales) in your domain layer, not the feed definition. Move per-item date formatting into config only where it is genuinely presentation, not business logic.
  5. Wrap generation in a queued job with retry and a freshness timestamp written alongside the artifact.
  6. Add a contract test: fixture dataset in, expected feed bytes out — this is your only defence against silent output drift across minor bumps.
  7. Run in parallel against the incumbent or the 1.x output and diff, including filenames.
  8. Promote to production for one consumer, monitor, then expand targets incrementally.

Operational Impact

Maintenance. Small code surface, so routine upkeep stays low. The cost that went up, not down, is upgrade cadence: a maintainer shipping majors with platform-floor jumps means you should expect to re-verify dependency constraints and re-run contract tests roughly once per framework cycle, and to absorb consumer-visible naming changes as part of that. Budget for the possibility of vendoring or forking; the code surface makes that tractable, and the release notes suggest the internals are reasonably modular (converters, per-item formatting, split-feed publishers).

Support. Community-only, no SLA. The escalation path remains a GitHub issue. Set expectations internally: the maintainer is highly active, which improves the odds of a fix and worsens the concentration risk if they step away. Keep a named internal owner and a documented fallback — a hand-rolled generator is a few hundred lines — so an unanswered issue never blocks a feed.

Scaling. Generation is CPU- and IO-bound; scale with queue workers, not by tuning the package. The split-feed capability is now the relevant lever for very large catalogs: understand the split capacity, size partitions to stay well under memory limits, and stream each part to a temp file on local disk before moving to object storage. The 2.0.0 fixes target exactly the pathologies that bite at scale — quadratic lookups when publishing split feeds, repeated per-row config resolution, per-row diagnostic path resolution — so large-catalog throughput should be measurably better, but confirm with your own data before assuming it. Watch disk headroom: N concurrent split jobs multiply footprint quickly. Prefer delta/incremental feeds where the consumer accepts them.

Failure modes. Ranked by likelihood:

  • Renamed artifacts after the 2.x title/slug change, leaving the consumer pulling a stale or 404ing URL. Enumerate filenames pre- and post-upgrade; keep old paths served for one cycle.
  • Partial file published after an exception — consumer ingests a truncated feed silently. Require atomic write and a success marker; still not evidenced in release notes.
  • Stale feed served because the job failed and nobody noticed. Alert on artifact age, not job status.
  • Schema drift on the consumer side rejecting the feed. Add consumer-side validation in CI or pre-publish.
  • Memory exhaustion at a split-feed boundary, or from lazy() used without chunking inside a template, or eager-loaded relations.
  • Encoding and locale issues (UTF-8, decimal separators, currency codes, and now per-item date formats) producing a technically valid but semantically wrong feed.
  • Duplicate SKUs producing a feed the marketplace rejects wholesale.

Ramp-up. A Laravel developer on a compatible stack reaches a first working feed in about a day; the docs have improved again with the config-attribute API reference and the upgrade guide. The effort that needs planning is unchanged and still larger than the integration: scheduling, atomicity, freshness alerting, consumer-side validation, and now a version-migration rehearsal. Treat the package as the easy part and the runtime/filename migration as the project.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core