

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
12345# FreshRSS introduction and conventions67FreshRSS is an open-source news aggregator supporting RSS/ATOM/WebSub and also Web scraping.89The market segment is mostly self-hosting, although multiple user accounts are supported.10It is supposed to be installed on a modest server (mostly, but not limited to, Linux) and can be accessed through a Web UI and an API.1112It is written in PHP to make it easy to deploy and easy to contribute to.1314More information can be found in [README](README.md) and in the [documentation](docs/en/) published at <https://freshrss.github.io/FreshRSS/en/>1516## Instruction structure for AI agents and humans1718* [`.github/instructions/`](.github/instructions/) contain the instructions that primarily match filename patterns.19* [`.github/skills/`](.github/skills/) contain the skills to achieve higher-level goals, potentially combining multiple instructions.20* **`AGENTS.md`** is the entry point description for AI coding agents and contributors, referencing other documents such as instructions and skills.21* Favour standard conventions over vendor-specific ones.22* To reduce duplication, refer to enforceable configuration files instead of excessive free-text repetitions.23* **Note:** Please limit AI-assisted pull requests to **10 open at a time** per contributor.2425## Code structure2627* `app/Controllers/` – Controllers extend `FreshRSS_ActionController`, named as `{name}Controller.php` with class `FreshRSS_{name}_Controller`28* `app/Models/` – Domain models extend `Minz_Model`.29 * DAOs may have some database-specific inheritance, e.g.: `*DAO.php` (base or MySQL), `*DAOSQLite.php` (SQLite), `*DAOPGSQL.php` (PostgreSQL)30* `app/views/{controller}/` – View templates are `.phtml` files mixing PHP and HTML31* `app/views/helpers/` – Reusable view elements with `$this->partial('name')`32* `lib/core-extensions/` or `extensions/` – FreshRSS extensions33* `lib/Minz/` – Core framework: routing, sessions, translations, extensions, PDO abstraction34* `lib/lib_rss.php` – Contain `spl_autoload_register` and other global functions35* `p/` – Public Web root. Only the content of this folder should be exposed if possible (`p/` should not be visible in the public URL)36 * Only the `p/i/` path should be access controlled. The main entry point is `p/i/index.php`37 * `p/api/greader.php` – Primary API for mobile clients38 * `p/api/pshb.php` – Receive realtime pushes via WebSub39 * `p/themes/` – UI themes4041### Configuration data4243* Constants: [`constants.php`](constants.php) overridden in `constants.local.php`44* System config: [`config.default.php`](config.default.php) overridden in `data/config.php`45* User config: [`config-user.default.php`](config-user.default.php) overridden in `data/users/{username}/config.php`4647> ℹ Access via `FreshRSS_Context::systemConf()` and `FreshRSS_Context::userConf()`4849## Database patterns5051Three database backends supported: SQLite, PostgreSQL, MySQL/MariaDB.52The SQL differences are implemented through inheritance:5354```php55// Base DAO with common queries56class FreshRSS_EntryDAO extends Minz_ModelPdo { }57// Database-specific overrides58class FreshRSS_EntryDAOSQLite extends FreshRSS_EntryDAO { }59class FreshRSS_EntryDAOPGSQL extends FreshRSS_EntryDAO { }60```6162A factory pattern selects the correct DAO, e.g.:6364```php65FreshRSS_Factory::createEntryDao();66```6768**Important**: in database, VARCHAR/TEXT fields are HTML-encoded, except `attributes` fields, which contain JSON, and which sub-strings are not HTML-encoded.6970## Main development commands7172> ℹ Recommended before committing7374```sh75# Runs all tests: PHPUnit, PHPCS, PHPStan, typos76make test-all7778# Auto-fix all trivial issues: whitespace, RTL CSS, translations79make fix-all8081# See a list of commands:82make help83```8485CI/CD is defined in [`.github/workflows/tests.yml`](.github/workflows/tests.yml)8687A Dev Container is available under [`.devcontainer/`](.devcontainer/).8889## Docker9091> ℹ Check [Docker documentation](Docker/README.md).9293## CLI Tools9495There are scripts in `cli/` for admin tasks, such as:9697```sh98./cli/list-users.php99```100101> ℹ Check [CLI documentation](cli/README.md).102103When possible, it is best to run as Web server user:104105```sh106sudo -u www-data cli/actualize-user.php --user alice107```108109or at least re-apply the file permissions after CLI operations:110111```sh112cli/access-permissions.sh113```114
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| FreshRSS/FreshRSS.github/instructions/css.instructions.md · 16k | Copilot instructions | ui | 51/100 | 14 days ago | |
| FreshRSS/FreshRSS.github/instructions/javascript.instructions.md · 16k | Copilot instructions | lint-format | 41/100 | 14 days ago | |
| FreshRSS/FreshRSS.github/instructions/_general.instructions.md · 16k | Copilot instructions | lint-formatstyleagent-behaviour | 41/100 | 14 days ago | |
| FreshRSS/FreshRSS.github/instructions/i18n.instructions.md · 16k | Copilot instructions | no sections | 65/100 | 14 days ago | |
| FreshRSS/FreshRSS.github/instructions/markdown.instructions.md · 16k | Copilot instructions | no sections | 37/100 | 14 days ago | |
| FreshRSS/FreshRSS.github/instructions/php.instructions.md · 16k | Copilot instructions | no sections | 59/100 | 14 days ago |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| mui/material-uiAGENTS.md · 99k | AGENTS.md | setupbuildtestlint-format+9 | 100/100 | 14 days ago | |
| elastic/elasticsearchx-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/AGENTS.md · 78k | AGENTS.md | buildtestlint-formatstyle+2 | 100/100 | 14 days ago | |
| TryGhost/Ghoste2e/AGENTS.md · 55k | AGENTS.md | setupteststylearch+2 | 100/100 | today | |
| n8n-io/n8npackages/@n8n/agents/AGENTS.md · 201k | AGENTS.md | buildteststylearch+3 | 100/100 | 14 days ago | |
| duckduckgo/content-scope-scriptsspecial-pages/AGENTS.md · 70 | AGENTS.md | buildteststylearch+3 | 100/100 | 14 days ago | |
| deepseek-ai/deepseek-harnessnative/landlock-run/AGENTS.md · 104k | AGENTS.md | setupteststylearch+3 | 100/100 | today | |
| code-yeongyu/oh-my-openagentpackages/web/AGENTS.md · 68k | AGENTS.md | setupbuildtestlint-format+6 | 100/100 | 13 days ago | |
| rails/railsAGENTS.md · 59k | AGENTS.md | teststylearchgit+4 | 100/100 | 14 days ago |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/freshrss-freshrss-agents)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.