Posted by: Matt Lewis

Published:

Updated:

Hawk Host mascot shining a spotlight on the FreshRSS logo.

Softaculous Spotlight #4: FreshRSS

A self-hosted feed reader with search, filtering, scraping, and mobile sync.

Part of my ongoing series covering the best apps available through Softaculous.

I follow plenty of blogs and software projects, but I don’t want to check every site by hand or trust a social feed to show me what I missed. FreshRSS gathers those updates in one place, gives me useful filters, and runs on shared hosting.

What is FreshRSS?

FreshRSS is a self-hosted feed aggregator written in PHP. You install it on your own hosting account, point it at the sites you follow, and it collects everything into one place that you control.

On the surface, it is a straightforward feed reader. Underneath that interface, FreshRSS can fetch, filter, deduplicate, search, and archive content using a surprisingly capable query language.

It can build feeds for websites that never published one, pull full article text out of truncated feeds, hide predictable noise before you ever see it, and even republish a saved search as a new RSS feed for another tool to consume.

You can use it as a simple reading list. The filters become useful once that list grows and you find yourself skipping the same kinds of posts every day.

At a Glance · FreshRSS
✓  On Softaculous
Developer
License
Open Source: GNU AGPL v3
Category
RSS / Feed Aggregator
Current Version
1.29.1 in Softaculous (Sep 2026)
Works With
Web browserAndroidiOSmacOSLinuxWindowsAny Google Reader API client

Why This One Fits Shared Hosting So Well

FreshRSS needs neither Docker nor a VPS.

Shared hosting support is one of the biggest practical reasons to pick FreshRSS over its competitors.

Many self-hosted readers assume you can “just run the container.” That is fine if you have a VPS. It is less useful if what you have is a cPanel account. Miniflux wants PostgreSQL and a Go binary. Tiny Tiny RSS recommends Docker and says support may be limited without it. CommaFeed is Java.

FreshRSS is PHP and MySQL. No container, no build step, no reverse proxy to configure, and no daemon to keep alive. It installs from Softaculous in about a minute. On Hawk Host, Softaculous also creates the feed refresh cron job; you just need to check its schedule after installation.

The project’s own requirements page says FreshRSS “should run on most shared host servers.” The work grows with your subscriptions, refresh schedule, and retention settings.


Who FreshRSS Is For

And who will be happier with a hosted reader.

FreshRSS makes the most sense if you are one of these people.

You follow A LOT of sources. If you only need updates from a few sources you’re probably better served using a hosted reader.

You want the reading app and the reading data to be separate things. FreshRSS uses the Google Reader API, so it stores and syncs state while some other app handles the actual reading. Switch phones, switch apps, keep your history.

You’re doing research, monitoring, or competitive intelligence. Security advisories, regulatory notices, competitor blogs, job boards, a supplier’s changelog page. FreshRSS can favorite, label, and archive matches automatically, and it will hang onto them long after the source site rotates them off the front page.

You are already paying for hosting. There is a real argument that if you have a cPanel account sitting there anyway, adding a feed reader to it costs you nothing but ten minutes.

You want to keep a local archive of what you read. Ever gone back to reread something only to find that the article was edited, moved, or disappeared entirely? FreshRSS can retain article content in your own database for as long as you’d like to keep it.

Who should skip it? If you only follow a few sources and have no interest in tuning filters, managing retention, or fiddling with the occasional setting, a free hosted reader or app is probably the better choice.


What FreshRSS Does Especially Well

Beyond the usual categories, unread counts, themes, and keyboard shortcuts.

FreshRSS covers the basics well: categories, unread counts, favorites, keyboard shortcuts, a mobile layout, light and dark themes, and more than twenty interface languages.

Here is what sets it apart.

The search box is a query language

You get field operators (intitle:, intext:, author:, inurl:, #tag, label:), boolean OR, negation, parentheses for grouping, ISO 8601 date intervals, and regular expressions on the text fields. Saved searches can even be referenced inside other searches, which means you can compose them.

Those search tools power saved queries, automatic filtering, labels, and several of the workflows covered later in this series.

Filters run automatically on incoming articles

Any expression you can type into the search box can be attached to a feed as a filter action. FreshRSS supports three actions: mark as read, mark as favorite, and apply a label. You can automatically mark sponsored posts as read while starring CVE advisories for review.

It scrapes sites that have no feed

FreshRSS has a built-in HTML + XPath scraper. You give it an XPath expression for “where the items are on this page,” another for the title, another for the link, and it synthesizes a feed out of an ordinary web page. There is a JSON equivalent too, including one for pulling JSON back out of an HTML document.

Saved searches can be republished as feeds

A saved query can be shared at its own HTML, RSS, or OPML URL. Another application can then subscribe to the filtered result instead of processing all fifty source feeds itself.

WebSub, for the feeds that support it

Polling is rate-limited on purpose, so that nobody accidentally builds a DDoS out of a feed reader. But for publishers that support WebSub, the publisher pushes to you instead, and new articles land more or less instantly. This requires your instance to be publicly reachable, which on shared hosting it already is.


Honest Pros & Cons

Pros & Cons
The Good
  • Plain PHP and MySQL, so it runs on ordinary shared hosting with no container wrangling
  • The search and filter syntax is flexible and well documented upstream
  • Built-in web scraping means sites without feeds are not automatically off-limits
  • Google Reader API support lets you use a compatible reading app
  • AGPL v3, no paid tier or upsell in the product
  • Actively maintained since 2012 with a real release cadence
The Drawbacks
  • Filters and scrapers take time to configure and maintain
  • The default interface is dense and unapologetically information-first
  • Scraped feeds break when the source site changes its markup, and they break silently
  • There's no automatic plugin store. You have to extract files to your server to use them.

Performance & System Requirements

Plan for your feed count, refresh schedule, and article storage.

System Requirements
CPU
Shared hosting
RAM
No fixed minimum listed
Storage
App plus article storage
PHP
8.1+ (libxml, cURL, JSON, PDO_MySQL, PCRE, ctype)
MySQL
MySQL 8.0+ / MariaDB 10.6+ (SQLite also supported)
The FreshRSS project does not publish a fixed CPU or RAM minimum. Watch your database as articles accumulate, especially if you enable full-text extraction or long retention.

Installing FreshRSS on Your Hawk Host Account

Check the refresh schedule and file access after installation.

1
Open cPanel
Log in to your Hawk Host client area and launch cPanel for the account where FreshRSS should live.
2
Launch Softaculous
Find Softaculous Apps Installer in the Software section, then search for FreshRSS. It sits under the RSS category.
3
Pick a home for it
A subdomain such as rss.yourdomain.com is the tidiest option, and it keeps the mobile app configuration simple later. A subdirectory like yourdomain.com/rss works fine too.
Think About the API Now, Not Later
Whatever address you choose becomes the address you type into every mobile app you ever connect. Pick something short and permanent.
4
Set your admin account and install
Choose an admin username and a strong password. Before you click Install, check the CRON Job fields. Softaculous will create the refresh job using that schedule; 27 0 * * * means once a day at 00:27 server time, not every 27 minutes. It also creates the database and writes the configuration for you. Once it finishes, log in. You should be looking at a mostly empty reader with a handful of default feeds.
5
Check the refresh cron job
Open Cron Jobs in cPanel and find the job Softaculous created for FreshRSS. Make sure it points to your installation. If you want feeds checked more often, edit that job's schedule. Four times an hour is a reasonable starting point. In this Hawk Host example, rss.yourdomain.com points to /home/USERNAME/rss on the server. That is why the command contains /rss/. With PHP 8.1, it looks like this:
/opt/alt/php81/usr/bin/php /home/USERNAME/rss/app/actualize_script.php > /home/USERNAME/rss/data/users/FreshRSS_cron.log 2>&1
That command runs the refresh script and writes its output to a log. USERNAME stands in for the cPanel account name. Your PHP version or installation directory may be different, even on Hawk Host, so use the paths in the job Softaculous created for your account. On another host or with a manual install, check for an existing job first. If there is none, create one using your host's PHP binary and the path to your own app/actualize_script.php. For four checks an hour, set Minute to 7,22,37,52 and the other schedule fields to *. Those off-hour minutes spread out requests. FreshRSS will not refresh an individual feed more often than its own interval allows; check the global interval under Configuration → Archiving.
6
Check that nothing but p/ is web-facing
FreshRSS is designed so that only its p/ folder is exposed to the web. Everything above that holds configuration and user data. On a subdirectory install you usually cannot repoint the document root, so FreshRSS ships a fallback for exactly this situation: a file named .htaccess.dist in the install root that denies access to data, extensions, vendor, and friends. In cPanel's File Manager, check whether a .htaccess already exists in the FreshRSS root. If one is there, leave it alone. If not, copy .htaccess.dist to .htaccess.
How to Verify
For a subdomain install, visit rss.yourdomain.com/data/config.php. For a subdirectory install, use yourdomain.com/rss/data/config.php. A 403 Forbidden is what you want. If the browser downloads a file instead, fix this before you go any further.

Your First Twenty Minutes

Resist the urge to import three hundred feeds on day one.

Delete the sample feeds. FreshRSS seeds a few defaults. They exist to prove the install works. They have done their job.

Add five feeds you will read. Not fifty. Five. You are calibrating your own tolerance, and it is much easier to add feeds than to prune them.

Check the refresh schedule. Confirm the job exists in cPanel. You can refresh feeds manually now; come back after the job’s next scheduled run to make sure automatic updates are working. If they are not, check the command, install path, and PHP binary.

Turn on the API. Under Authentication, enable API access. Then under Profile, set an API password, which is separate from your login password. Click the API address link on that page and run the built-in server check. If it says PASS, mobile clients should be able to connect. Fix any error while you still have the full admin interface in front of you.

Set a purge policy. Go to Configuration → Archiving and check the defaults on your installation. Something like “keep three months” is a reasonable starting point, and you can override it per feed later.

Then leave it alone for a week. Come back and look at what you actually read versus what you scrolled straight past. That second list is what the filtering in part one of the tips series is for.

A screenshot of the FreshRSS normal view in dark theme, showing feed categories in the left sidebar and an open article in the main pane.
The default FreshRSS reading view: categories in the sidebar, all articles listed in the right pane.

Which Hosting Plan Do You Need?

Hosting Plan Fit · FreshRSS
Recommended

A practical starting point for one person or a household. Tune refresh and retention as your list grows.

Recommended

Worth it once you are running full-text extraction across many feeds, scraping several sites, or hosting accounts for a whole team.

Recommended

For large multi-user instances, aggressive scraping, or when you want to control MySQL tuning and cron frequency yourself.

For one reader, shared hosting is a practical fit. Move up when feed volume, extraction, or the number of users calls for it.

Common Questions About FreshRSS

Yes!

It is open source under the GNU AGPL v3, with no paid tier.

You need a scheduled job for automatic background updates. Softaculous creates one when you install FreshRSS on Hawk Host, so check it in cPanel rather than adding a duplicate. On another host or with a manual install, check whether a job already exists and add one if it does not. Without it, you will need to refresh feeds manually.

Yes, and this is one of the better things about it. FreshRSS implements the Google Reader API, which is supported by practically every major RSS app.

The mobile web interface is also perfectly usable if you would rather not install anything at all.

You export it. FreshRSS exports your feed list as standard OPML that any other reader will import, and it can also export your favorites and labeled articles as actual content rather than just links.

There is a command-line export that produces a ZIP or a SQLite file containing everything, which is the option you want if you have been using FreshRSS as a research archive.

Yes. Each user can have separate feeds, categories, filters, and API passwords. There is also an anonymous reading mode if you want a public instance.

Practically speaking, an administrator has to create the accounts, so it fits a family or a small team better than a public sign-up service.

They overlap heavily, and TT-RSS has been around longer. On shared hosting, deployment is the deciding factor: Tiny Tiny RSS recommends Docker and says support may be limited without it. FreshRSS is a PHP application that installs from Softaculous.

FreshRSS also has XPath scraping built into core, which TT-RSS leaves to plugins.

Usually not for a modest reading list. The refresh job runs on a schedule, does its work, and exits. A few hundred feeds or aggressive refresh settings mean more network and database work, so keep an eye on your account’s resource usage.

The exception is full-text extraction, which fetches every article’s original page individually. Enable it on the handful of feeds that need it, not everywhere.


Alternatives to Consider

FreshRSS is a great pick for shared hosting. If your setup is different, one of these may suit it better.

Miniflux
Open Source
Miniflux is fast, minimal, and distributed as a single Go binary. It requires PostgreSQL and somewhere to run that binary, which rules out most shared hosting but makes it a good VPS option.
Tiny Tiny RSS
Open Source✓ Softaculous
The long-standing PHP incumbent, with a large plugin ecosystem. Still listed in Softaculous, but upstream recommends Docker and warns that support may be limited for other install methods.
selfoss
Open Source✓ Softaculous
A lighter PHP option that also handles scraped and API-based sources through its spouts system. Simpler than FreshRSS, with correspondingly less filtering power.

Start with a few feeds and see what you actually read. When you notice yourself skipping the same sort of post every day, the next guide shows you how to let FreshRSS clear those for you.


Softaculous Spotlight Series
This is post #4 in my Softaculous Spotlight series, where I take an in-depth look at the best software available through your Hawk Host control panel. Subscribe to see new posts as I add them.
Subscribe via RSS
Ready to get started? Build your site from
$1.99/mo
GET STARTED NOW