Tiny Tiny RSS

Tiny Tiny RSS
is an open source web-based news feed (RSS/Atom) aggregator, designed to allow you to read news from any location, while feeling as close to a real desktop application as possible.
Installation
Install
the
tt-rss
and
php-pgsql
packages.
tt-rss is installed into
/usr/share/webapps/tt-rss/
. You will need to make this directory available from your web server. The simplest way is to do:
With
Apache HTTP Server
:
# ln -s /usr/share/webapps/tt-rss /srv/http/tt-rss
With
Nginx
:
# ln -s /usr/share/webapps/tt-rss /usr/share/nginx/html/tt-rss
You will need to recursively chown
/usr/share/webapps/tt-rss
to
http:http
.
Configuration
Set up PHP and database
You will need to set up a database using
PostgreSQL
.
Create a ttrss user and database in PostgreSQL. For example:
[postgres]$ createuser --createdb ttrss
[postgres]$ createdb -U ttrss ttrss
In
/etc/php/php.ini
, enable the following modules:
extension=curl
extension=iconv
extension=intl
extension=pdo_pgsql ; for PostgreSQL
extension=pgsql ; for legacy PostgreSQL plugins (still required by default)
extension=soap
If
open_basedir
is set in
/etc/php/php.ini
(it is not by default), add
/var/lib/tt-rss:/usr/share/webapps/tt-rss:/etc/webapps/tt-rss
to it.
Application initialization can be done either automatically or manually.
Automatic way:
remove default configuration file
/etc/webapps/tt-rss/config.php
, without this file tt-rss webapp enters installation wizard.
navigate to (your-servers-root)/tt-rss/ and proceed with the installer.
save generated configuration file to
/etc/webapps/tt-rss/config.php
.
Manual way:
edit tt-rss configuration file
/etc/webapps/tt-rss/config.php
and update database settings.
re-create database from
/usr/share/webapps/tt-rss/sql/pgsql/schema.sql
:
$ psql ttrss -U ttrss -f /usr/share/webapps/tt-rss/sql/pgsql/schema.sql
At the end the
/etc/webapps/tt-rss/config.php
file will look like this:
<?php
 putenv('TTRSS_DB_TYPE=pgsql');
 putenv('TTRSS_DB_HOST=localhost');
 putenv('TTRSS_DB_USER=ttrss');
 putenv('TTRSS_DB_NAME=ttrss');
 putenv('TTRSS_DB_PASS=foobar');
 putenv('TTRSS_SELF_URL_PATH=
http://myserver/tt-rss/'
);
FastCGI
Install and configure
FastCGI
for your server
Pacman hook
To do tt-rss database upgrades automatically you may set up pacman post upgrade hook based on following example:
[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = tt-rss

[Action]
Description = Updating TT-RSS Database
When = PostTransaction
Exec = /usr/bin/runuser -u http -- /usr/bin/php /usr/share/webapps/tt-rss/update.php --update-schema=force-yes
You need to put it into /etc/pacman.d/hooks/tt-rss.hook if you did not customize HookDir in pacman.conf.
See also
Pacman#Hooks
Set up an update daemon
See
https://tt-rss.org/wiki/UpdatingFeeds
[
dead link
2025-08-16—HTTP 404]
—however, simply
enabling
the
tt-rss
service should suffice. Check the service's
unit status
to verify that it is running fine.
Troubleshooting
Integrity constraint violation: 1062 Duplicate entry '1' for key 'ttrss_feeds_feed_url_owner_uid_key'
If you update tt-rss database to schema 137 you might see the error
Duplicate entry '1' for key 'ttrss_feeds_feed_url_owner_uid_key'
. To fix the issue please start database shell, e.g.:
$ psql -U ttrss tt-rss
And then run
query from official forum
[
dead link
2025-11-17—domain name not resolved]
that drops duplicated database entries.
PHP UConverter class is missing, it's provided by the Internationalization (intl) module.
The factual accuracy of this article or section is disputed.
Reason:
extension=intl
is added in
#Set up PHP and database
and
/etc/php/php.ini
is owned by
php
. Thus, this configuration file should not get overridden when upgrading
tt-rss
unless
php
is also upgraded. Even then, it is still doubtful that previous changes to
/etc/php/php.ini
are completely overridden when upgrading (if
Pacnew and Pacsave files
are properly handled). (Discuss in
Talk:Tiny Tiny RSS
)
If you see this error after upgrading
tt-rss
, add
extension=intl
to
/etc/php/php.ini
and
restart
the
php-fpm
service.
Unable to install plugins (PI_ERR_NO_WORKDIR)
If you cannot install plugins due to a
PI_ERR_NO_WORKDIR
error, then this is because
/usr/share/webapps/tt-rss/plugins.local/
is not writable by the application server.
If you skipped the step to chown
/usr/share/webapps/tt-rss/
, you can instead symlink
/usr/share/webapps/tt-rss/plugins.local/
to somewhere writable, such as
/var/lib/tt-rss/plugins.local/
, and chowning that directory as the application server user.