Tiny Tiny RSS

Ever since Google announced they were shutting Reader down, I’ve been looking for a new RSS reader to replace it. I have since settled on Tiny Tiny RSS, a self-hosted package with a nice, clean interface. It also has a plugin system, which lets me use the Reeder app on my iPhone by having Tiny Tiny RSS emulate the Fever API.

I’m running all of this here on Nearly Free Speech, and I thought I would document the process in case it helps anyone out, including getting Reeder to sync with TT-RSS.


For the sake of simplicity and easy upgrading, I used a clone of the GitHub repository. As the TT-RSS FAQ says:

I don’t do truly experimental development on it because it’s a daily driver for me personally and my friends who use the same instance, which is why it should stay functional. Actual versioned releases are not much more than tagged trunk snapshots taken at a given date.

Note, though, that cloning the Git repository results in a .git folder that is 80 MB+ big. That’s almost 10 times the rest of my site, and since NFSN charges based on disk usage, that wasn’t going to work. So what I did was clone a copy onto my local computer, then use Transmit to upload the installation, using a rule to skip version control files (#3 in that list), including any system files from Git.

Other than that, installation is straightforward. Upgrading consists of updating the Git clone on your local computer, then uploading any changes (Transmit has a Sync feature that does this).


I set everything to be owned by the web group (chgrp -R web * in the TT-RSS directory), and made the cache, feed-icons, and lock folders writable by members of the web group (chmod -R g+w cache feed-icons lock). This seems to be working fine for me so far.

Setting up the cron task

NFSN recently rolled out scheduled tasks, and I just added the following command…

/usr/local/bin/php /home/public/path/to/tt-rss/update.php --feeds --quiet

…to run every hour (* for every entry) under the web user. This is as frequent as NFSN allows you to schedule tasks, and it’s easy enough to remember that feeds are updated on the hour.

Using Reeder with TT-RSS

When I used Google Reader, I checked my feeds pretty regularly with Reeder on my iPhone. Unfortunately, the developer behind Reeder has yet to include any support for TT-RSS (or any free solution for that matter). Thankfully, someone made a plugin to emulate the Fever API. Since Reeder supports the Fever API, by proxy Reeder also supports the TT-RSS API.

  1. Download the plugin from that link.
  2. Upload the fever directory to /path/to/tt-rss/plugins/.
  3. Activate it in your preferences.
  4. Make sure “Allow API access” is checked.
  5. Set your Fever API password in the Fever preference pane.
  6. Set up your new Fever account in Reeder, and start syncing.

There are pictures in the link for the plugin if necessary. The bold step is the one I missed, and ran around in circles trying to troubleshoot.

Replacing Google Reader

With this solution in place, I haven’t had to log into Google Reader at all. I was concerned about bandwidth usage and disk usage becoming a problem on NFSN, but my bandwidth hasn’t spiked at all, and the only disk usage spike was when I had the 80 MB .git folder in my installation. Once I figured out what caused that spike, my disk usage is actually the same as before I installed TT-RSS.


  • Thank you for taking the time to post this information! I had been trying to set up tt-rss with my NFSN account, and your details made it much easier.

    One question – did you have to enable InnoDB support for your MySQL process?

  • No problem.

    Regarding InnoDB: I did some quick research and it seems TT-RSS says that InnoDB is required (which is probably why you’re asking). To answer your question, no, I did not enable InnoDB to get TT-RSS working.

    Unless your MySQL process is different from mine (unlikely), it seems the only storage engine available is MyISAM. I checked phpMyAdmin and all of the TT-RSS tables are in fact using MyISAM. When I checked the list of storage engines, InnoDB was not on there.

    I assume that 1) InnoDB is not available on NFSN, and 2) it doesn’t seem to be required for TT-RSS. I don’t know why it’s listed on their website, but I have been running on MyISAM the whole time and everything has worked great.

    I hope that answered your question.

    • Since the tt-rss documentation indicated that InnoDB is required, before I set it up I looked into whether or not it’s supported in NFSN, and it is (see details here). I submitted a support request to get it set up, and they added it within a day. I costs a little extra, so it’s good to know that it works without it!

      Edit: fixed your link.

    • That’s good to know. I guess if I ever see problems using MyISAM I’ll have to switch over to that.

      Also, sorry about your comment getting flagged. I think it had to do with your malformed URL.

  • If you don’t mind me asking, how much does it cost to self-host it? I currently only use NFS with static sites and also don’t have a clear idea of the disk usage.

    Thank you. (By the way, if you rather not discuss prices publicly, you could PM me.)

    • No problem, I don’t mind answering this at all. Unfortunately it’s hard to get exact numbers since it’s all lumped together with the stats for the rest of my site.

      I started hosting and using TT-RSS on my NFSN site on May 1, so the only complete monthly numbers I have is for the single month of May, but I also have the predictions for June so far.

      The increase seems to be ~26 MB of site storage and ~200 MB of bandwidth per month on top of what I was using before. I haven’t noticed any big differences in the rate my account balance is being depleted either. Also, while the site storage rate is the same for everyone (I believe), I think bandwidth rates vary based on how much you’ve transferred before.

      Sorry I don’t have any firmer numbers to give you, but there are a lot of variables involved on top of not being able to separate the stats.

      Hope that helped.

    • It would make sense to add the -R flag. I’ll update the post when I’m not on my phone, thanks.

      That modifying headers error is going to happen any time there’s output (even whitespace) and then you try to send a header() after. Commonly you use output buffering to solve this and it’s strange that TT-RSS doesn’t. Glad to hear you figured it out though.