No description
  • PHP 65%
  • Blade 33.3%
  • CSS 0.5%
  • Shell 0.4%
  • JavaScript 0.3%
  • Other 0.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-05 02:28:27 +00:00
.ai/rules feat: Initial version 2026-10-02 19:35:32 -04:00
.changes chore(release): 0.1.1 2026-10-05 02:28:27 +00:00
.codex feat: Initial version 2026-10-02 19:35:32 -04:00
.forgejo/workflows fix: Docker image name in release action 2026-10-04 22:25:44 -04:00
.github feat: Initial version 2026-10-02 19:35:32 -04:00
app fix/various-bug-fixes (#10) 2026-10-04 22:11:17 -04:00
bootstrap feat: Initial version 2026-10-02 19:35:32 -04:00
config fix/various-bug-fixes (#10) 2026-10-04 22:11:17 -04:00
database feat: Initial version 2026-10-02 19:35:32 -04:00
docker feat: Initial version 2026-10-02 19:35:32 -04:00
public fix/various-bug-fixes (#10) 2026-10-04 22:11:17 -04:00
resources fix/various-bug-fixes (#10) 2026-10-04 22:11:17 -04:00
routes feat: Initial version 2026-10-02 19:35:32 -04:00
storage feat: Initial version 2026-10-02 19:35:32 -04:00
tests feat: Initial version 2026-10-02 19:35:32 -04:00
.changie.yaml fix/various-bug-fixes (#10) 2026-10-04 22:11:17 -04:00
.dockerignore feat: Initial version 2026-10-02 19:35:32 -04:00
.editorconfig feat: Initial version 2026-10-02 19:35:32 -04:00
.env.example feat: Initial version 2026-10-02 19:35:32 -04:00
.envrc feat: Initial version 2026-10-02 19:35:32 -04:00
.gitattributes feat: Initial version 2026-10-02 19:35:32 -04:00
.gitignore feat: Initial version 2026-10-02 19:35:32 -04:00
.npmrc feat: Initial version 2026-10-02 19:35:32 -04:00
artisan feat: Initial version 2026-10-02 19:35:32 -04:00
CHANGELOG.md chore(release): 0.1.1 2026-10-05 02:28:27 +00:00
composer.json feat: Initial version 2026-10-02 19:35:32 -04:00
composer.lock feat: Initial version 2026-10-02 19:35:32 -04:00
devenv.lock feat: Initial version 2026-10-02 19:35:32 -04:00
devenv.nix fix/various-bug-fixes (#10) 2026-10-04 22:11:17 -04:00
devenv.yaml feat: Initial version 2026-10-02 19:35:32 -04:00
docker-compose.dev.yml feat: Initial version 2026-10-02 19:35:32 -04:00
docker-compose.local.yml feat: Initial version 2026-10-02 19:35:32 -04:00
Dockerfile feat: Initial version 2026-10-02 19:35:32 -04:00
package-lock.json feat: Initial version 2026-10-02 19:35:32 -04:00
package.json feat: Initial version 2026-10-02 19:35:32 -04:00
phpstan.neon feat: Initial version 2026-10-02 19:35:32 -04:00
phpunit.xml feat: Initial version 2026-10-02 19:35:32 -04:00
pint.json feat: Initial version 2026-10-02 19:35:32 -04:00
README.md chore: Update README 2026-10-02 20:07:07 -04:00
screenshot.png feat: Initial version 2026-10-02 19:35:32 -04:00
TODO.md feat: Initial version 2026-10-02 19:35:32 -04:00
vite.config.js feat: Initial version 2026-10-02 19:35:32 -04:00

RSSexy logo

RSSexy

A feed reader with a nice UI and good user experience.

screenshot

Self hosting

Docker is the only supported way, however, RSSexy is a regular laravel app. If you want to deploy it on forge or laravel cloud, feel free.

You can deploy a single container that runs the webapp, scheduler and worker. Or you can deploy the worker separately. Both examples below.

Important reverse proxy setup

If the app is behind a reverse proxy that terminates TLS, which is a very common setup, make sure to add OCTANE_HTTPS: true to your environment.

Docker compose (All in one)

services:
    web:
        image: gitgud.boo/javif89/rssexy:latest
        restart: unless-stopped
        ports:
            - "8080:8080"
        environment:
            WORKER_ENABLED: "true"
            APP_ENV: production
            APP_KEY: "base64:" # Read below on how to generate
            APP_URL: http://localhost:8080
            REGISTRATION_ENABLED: "true"
            FEEDS_SYNC_EVERY_MINUTES: "30"
            FEEDS_PRUNE_AFTER_DAYS: "30"
            # Could be sqlite, postgres, or mysql. Read more below
            DB_CONNECTION: pgsql
            DB_HOST: postgres
            DB_PORT: "5432"
            DB_DATABASE: rssexy
            DB_USERNAME: rssexy
            DB_PASSWORD: password

Docker compose (Separate worker)

services:
    web:
        image: gitgud.boo/javif89/rssexy:latest
        restart: unless-stopped
        ports:
            - "8080:8080"
        environment:
            WORKER_ENABLED: "false"
            # Rest of your config variables
    worker:
        image: gitgud.boo/javif89/rssexy:latest
        restart: unless-stopped
        command:
            - php
            - artisan
            - queue:work
            - --sleep=3
            - --tries=3
            - --max-time=3600
        environment:
            # Same environment variables as above

Configuration

All configuration is done through environment variables.

Basic Settings

APP_URL=https://rssexy.yourdomain.com
REGISTRATION_ENABLED=true

Application Key

The APP_KEY env variable is needed for encrypting sessions and cookies.

Generate one with: printf 'base64:%s\n' "$(openssl rand -base64 32)"

Admin User

Note that the first user will be the administrator. If registration is disabled but OIDC is configured, people can still "register" by login in with OIDC.

Database

RSSexy supports sqlite, postgres, and mysql.

SQLite

DB_CONNECTION=sqlite
DB_DATABASE=/absolute/path/to/database.sqlite

Postgres & MySQL

DB_CONNECTION=pgsql # or mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=rssexy
DB_USERNAME=root
DB_PASSWORD=

Feed Sync

FEEDS_SYNC_EVERY_MINUTES=30
FEEDS_PRUNE_AFTER_DAYS=30

Email

Email is done through SMTP.

MAIL_HOST=127.0.0.1
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="RSSexy"

OIDC

OIDC_ISSUER=https://auth.example.com/application/o/rssexy/
OIDC_CLIENT_ID=
OIDC_CLIENT_SECRET=
OIDC_REDIRECT_URI="${APP_URL}/auth/oidc/callback"
OIDC_BUTTON_LABEL="Log in with SSO"