PHPackages                             lucinda/rss - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. lucinda/rss

ActiveLibrary[API Development](/categories/api)

lucinda/rss
===========

Very light weight PHP API for RSS feed generation covering official version 2.0 specifications

v3.0.1(3y ago)417.7k3[1 issues](https://github.com/aherne/rss-generator/issues)MITPHPPHP ^8.1

Since Jul 25Pushed 3y ago1 watchersCompare

[ Source](https://github.com/aherne/rss-generator)[ Packagist](https://packagist.org/packages/lucinda/rss)[ Docs](https://github.com/aherne/rss-generator)[ RSS](/packages/lucinda-rss/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (1)Versions (17)Used By (0)

PHP RSS Feed Generator API
==========================

[](#php-rss-feed-generator-api)

Very light weight PHP API encapsulating entire [RSS-2](https://validator.w3.org/feed/docs/rss2.html) specification, the worldwide standard at this moment for generating RSS feeds.

API only requires PHP 8.1+ and comes with a class for each RSS tag, all belonging to Lucinda\\RSS namespace, each implementing [Tag](#Tag) interface. Following are factually mandatory:

ClassDescription[RSS](#rss)Encapsulates [**rss**](https://www.rssboard.org/rss-profile#element-rss) tag, the grand holder of your RSS feed[Channel](#channel)Encapsulates [**channel**](https://www.rssboard.org/rss-profile#element-channel) tag, child of [**rss**](https://www.rssboard.org/rss-profile#element-rss), containing your RSS feed description[Item](#item)Encapsulates [**item**](https://www.rssboard.org/rss-profile#element-channel-item) tag, child of [**channel**](https://www.rssboard.org/rss-profile#element-channel), containing an article in your RSS feedSimple example:

```
$channel = new \Lucinda\RSS\Channel("Lucinda Framework", "https://www.lucinda-framework.com", "Current headlines from Lucinda Framework");
$channel->addItem(new \Lucinda\RSS\Item("STDOUT MVC API", "STDOUT MVC API was upgraded to a new version"));
$channel->addItem(new \Lucinda\RSS\Item("STDERR MVC API", "STDERR MVC API was upgraded to a new version"));
$rss = new \Lucinda\RSS\RSS($channel);
echo $rss; // displays RSS feed
```

API enjoys 100% unit test coverage for its classes and methods, reproductible in console by running:

```
composer update
php test.php
```

*NOTICE*: since superglobal *\_\_toString* is not unit testable, unit tests were done on *toString* method instead!

RSS[](rss)
----------

[](#rss)

Class [RSS](https://github.com/aherne/rss-generator/blob/master/src/RSS.php) encapsulates [**rss**](https://www.rssboard.org/rss-profile#element-rss) tag logic via following void returning methods:

MethodArgumentsDescription\_\_construct[Channel](#channel) $channelConstructs feed based on mandatory RSS **channel**addNamespacestring $name
string $urlAdds a RSS namespace able to add custom functionality to feedTo understand more how namespaces can be used to add non-standard tags to feed, visit [this guide](https://www.rssboard.org/rss-profile#namespace-elements)!

Channel[](channel)
------------------

[](#channel)

Class [Channel](https://github.com/aherne/rss-generator/blob/master/src/Channel.php) encapsulates [**channel**](https://www.rssboard.org/rss-profile#element-channel) tag logic via following void returning methods:

MethodArgumentsDescription\_\_constructstring $title
string $link
string $descriptionSets values of required sub-tags: [**title**](https://www.rssboard.org/rss-profile#element-channel-title), [**link**](https://www.rssboard.org/rss-profile#element-channel-link), [**description**](https://www.rssboard.org/rss-profile#element-channel-description) \[1\]addItem[Item](#item) $itemSets value of sub-tag [**item**](https://www.rssboard.org/rss-profile#element-channel-item)setLanguagestring $languageSets value of sub-tag [**language**](https://www.rssboard.org/rss-profile#element-channel-language)setCopyrightstring $copyrightSets value of sub-tag [**copyright**](https://www.rssboard.org/rss-profile#element-channel-copyright)setManagingEditorstring $emailSets value of sub-tag [**managingEditor**](https://www.rssboard.org/rss-profile#element-channel-managingeditor)setWebMasterstring $emailSets value of sub-tag [**webMaster**](https://www.rssboard.org/rss-profile#element-channel-webmaster)setPubDateint $unixTimeSets value of sub-tag [**pubDate**](https://www.rssboard.org/rss-profile#element-channel-pubdate) by corresponding unix timesetLastBuildDateint $unixTimeSets value of sub-tag [**lastBuildDate**](https://www.rssboard.org/rss-profile#element-channel-lastbuilddate) by corresponding unix timesetCategorystring $categorySets value of sub-tag [**category**](https://www.rssboard.org/rss-profile#element-channel-category)setGeneratorstring $generatorSets value of sub-tag [**generator**](https://www.rssboard.org/rss-profile#element-channel-generator)setDocsstring $urlSets value of sub-tag [**docs**](https://www.rssboard.org/rss-profile#element-channel-docs)setCloud[Cloud](https://github.com/aherne/rss-generator/blob/master/src/Cloud.php) $cloudSets value of sub-tag [**cloud**](https://www.rssboard.org/rss-profile#element-channel-cloud)setTtlint $numberSets value of sub-tag [**ttl**](https://www.rssboard.org/rss-profile#element-channel-ttl)setImage[Image](https://github.com/aherne/rss-generator/blob/master/src/Image.php) $imageSets value of sub-tag [**image**](https://www.rssboard.org/rss-profile#element-channel-image)setTextInput[Input](https://github.com/aherne/rss-generator/blob/master/src/Input.php) $textInputSets value of sub-tag [**textInput**](https://www.rssboard.org/rss-profile#element-channel-textinput)setSkipHours[SkipHours](https://github.com/aherne/rss-generator/blob/master/src/SkipHours.php) $skipHoursSets value of sub-tag [**skipHours**](https://www.rssboard.org/rss-profile#element-channel-skiphours)setSkipDays[SkipDays](https://github.com/aherne/rss-generator/blob/master/src/SkipDays.php) $skipDaysSets value of sub-tag [**skipDays**](https://www.rssboard.org/rss-profile#element-channel-skipdays)addCustomTag[Tag](#Tag) $tagAdds custom non-standard sub-tag\[1\] Value of $description is automatically escaped using CDATA via [Escape](#escape) class, in order to make it possible to put HTML inside

Item[](item)
------------

[](#item)

Class [Item](https://github.com/aherne/rss-generator/blob/master/src/Item.php) encapsulates [**item**](https://www.rssboard.org/rss-profile#element-channel-item) tag logic via following void returning methods:

MethodArgumentsSpecification\_\_constructstring $title
string $descriptionSets values of required sub-tags: [**title**](https://www.rssboard.org/rss-profile#element-channel-item-title), [**description**](https://www.rssboard.org/rss-profile#element-channel-item-description) \[1\]setLinkstring $urlSets value of sub-tag [**link**](https://www.rssboard.org/rss-profile#element-channel-item-link)setAuthorstring $emailSets value of sub-tag [**author**](https://www.rssboard.org/rss-profile#element-channel-item-author)setCategoriesstring $categorySets value of sub-tag [**categories**](https://www.rssboard.org/rss-profile#element-channel-item-categories)setCommentsstring $urlSets value of sub-tag [**comments**](https://www.rssboard.org/rss-profile#element-channel-item-comments)setEnclosure[Enclosure](https://github.com/aherne/rss-generator/blob/master/src/Enclosure.php) $enclosureSets value of sub-tag [**enclosure**](https://www.rssboard.org/rss-profile#element-channel-item-enclosure)setGuidstring $guidSets value of sub-tag [**guid**](https://www.rssboard.org/rss-profile#element-channel-item-guid)setPubDateint $unixTimeSets value of sub-tag [**pubDate**](https://www.rssboard.org/rss-profile#element-channel-item-pubdate) by corresponding unix timesetSourcestring $urlSets value of sub-tag [**source**](https://www.rssboard.org/rss-profile#element-channel-item-source)addCustomTag[Tag](#Tag) $tagAdds custom non-standard sub-tag\[1\] Value of $description is automatically escaped using CDATA via [Escape](#escape) class, in order to make it possible to put HTML inside

Tag[](tag)
----------

[](#tag)

Interface [Tag](https://github.com/aherne/rss-generator/blob/master/src/Tag.php) defines common ability of all RSS tags to be [\\Stringable](https://www.php.net/manual/en/class.stringable.php)

Escape[](escape)
----------------

[](#escape)

Class [Escape](https://github.com/aherne/rss-generator/blob/master/src/Escape.php) envelopes a value using CDATA via following method inherited from [Tag](#tag):

MethodArgumentsReturns\_\_toString-string

###  Health Score

35

—

LowBetter than 79% of packages

Maintenance15

Infrequent updates — may be unmaintained

Popularity26

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity72

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~48 days

Recently: every ~38 days

Total

15

Last Release

1442d ago

Major Versions

v1.0.1 → v2.0.02020-07-25

v1.0.2 → v2.0.22020-08-24

v1.0.4 → v2.0.32021-02-25

v2.0.4 → v3.0.x-dev2022-01-01

v2.0.x-dev → v3.0.12022-06-04

PHP version history (2 changes)v3.0.0PHP ^8.1

v2.0.5PHP ^7.1|^8.0

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/3382770?v=4)[Lucian Gabriel Popescu](/maintainers/aherne)[@aherne](https://github.com/aherne)

---

Top Contributors

[![aherne](https://avatars.githubusercontent.com/u/3382770?v=4)](https://github.com/aherne "aherne (12 commits)")

---

Tags

feedrss

### Embed Badge

![Health badge](/badges/lucinda-rss/health.svg)

```
[![Health](https://phpackages.com/badges/lucinda-rss/health.svg)](https://phpackages.com/packages/lucinda-rss)
```

###  Alternatives

[laminas/laminas-feed

provides functionality for creating and consuming RSS and Atom feeds

16749.2M47](/packages/laminas-laminas-feed)[mibe/feedwriter

Generate feeds in either RSS 1.0, RSS 2.0 or ATOM formats

1951.1M5](/packages/mibe-feedwriter)[debril/rss-atom-bundle

RSS / Atom and JSONFeed support for Symfony

1381.3M2](/packages/debril-rss-atom-bundle)[eko/feedbundle

A Symfony bundle to build RSS feeds from entities

142574.6k3](/packages/eko-feedbundle)[pgrimaud/instagram-user-feed

This is a scraper to easily fetch any feed and interact with Instagram (like, follow, etc.) without OAuth for PHP.

940657.1k5](/packages/pgrimaud-instagram-user-feed)[sokolnikov911/yandex-turbo-pages

PHP7 Yandex Turbo Pages RSS feed generator

4686.9k](/packages/sokolnikov911-yandex-turbo-pages)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
