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.
build! — a breaking build change). If you are not on that stack yet, install ^1.0 and plan the jump separately. Do not half-upgrade.composer require dragon-code/laravel-feeds. Laravel package discovery registers the provider. Publish the config with php artisan vendor:publish and pick the feeds entry from the list instead of guessing the tag name.php artisan list | grep -i feed to confirm the names on your version.https://feeds.dragon-code.pro. Four pages carry most of the weight — api/config-attributes (what every config key does, now explicitly documented in #303), feed-targets (which targets ship in the box), receipt-target-feeds (a worked example end to end), and the 1.x → 2.x upgrade guide.vendor/dragon-code/laravel-feeds/src is small. With 36 stars and 0 dependents there is no blog-post corpus and no Stack Overflow trail. The code and the docs site are the whole reference. Budget an hour.Product model, map the required fields, generate into storage/app/feeds/products.xml, validate the file against the marketplace's own checker, then put it on a schedule. Do not start with five targets — start with one you can validate by hand.feeds/products.xml.tmp → feeds/products.xml. Consumers poll these URLs; a half-written file served once can get the feed rejected or, worse, silently imported with missing rows.$tmp = storage_path('app/feeds/products.xml.tmp');
$final = storage_path('app/feeds/products.xml');
$this->feed->generate($tmp); // verify the real API surface in the source
rename($tmp, $final); // atomic on the same filesystem
chunkById, never get(). The package exists because catalogs are large; loading the collection first defeats the point and will OOM on a real dataset.with(['brand', 'category', 'images']) per chunk. Missing relations are fine, missing relation queries per row are not.^1.0 if you cannot move all three at once. Pest 5 is a test-suite change, not just a runtime one — your own tests around the generator may need updating too.api/config-attributes before setting anything: know whether a value is global, per-feed, or per-item, and which one wins. Guessing here produces a feed that is structurally valid and semantically wrong.--timeout and --memory you set to survive 1.x may now be far too generous — or, if the old numbers were the reason you chunked conservatively, verify chunking still behaves.--timeout and --memory on the worker deliberately.xmllint --noout in CI or in the job itself before publishing.php artisan config:cache freezes env values. Anything per-environment (base URL, output disk) must come from env() in config/feeds.php, never from a runtime call inside the config array. This matters more now that converter and date settings can be nested per feed.config/feeds.php and the driver directory before writing a generator from scratch. If the built-in target is 90% right, extend it; do not fork the package.composer.json, keep a test that runs the generator, and accept that an upstream break is yours to patch. The MIT license and small surface make that cheap; a large abstract dependency would not.[unverified]). Confirm the actual 2.0.0 publication and its composer.json constraints on Packagist directly before you plan the upgrade around it.How can I help you explore Laravel packages today?