fedi feed router is a self-hosted tool for routing content from RSS/Atom feeds to the fediverse.
| .github/workflows | ||
| app | ||
| bootstrap | ||
| config | ||
| database | ||
| docker | ||
| public | ||
| resources | ||
| routes | ||
| storage | ||
| tests | ||
| .dockerignore | ||
| .editorconfig | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| artisan | ||
| composer.json | ||
| Dockerfile | ||
| Dockerfile.dev | ||
| Jenkinsfile | ||
| package.json | ||
| phpstan.neon | ||
| phpunit.xml | ||
| postcss.config.js | ||
| README.md | ||
| shell.nix | ||
| tailwind.config.js | ||
| vite.config.js | ||
FFR (Feed to Fediverse Router)
A Laravel-based application for routing RSS/Atom feeds to Fediverse platforms like Lemmy. Built with Laravel, Livewire, and FrankenPHP for a modern, single-container deployment.
Features
- Feed aggregation - Fetch articles from multiple RSS/Atom feeds
- Fediverse publishing - Automatically post to Lemmy communities
- Route configuration - Map feeds to specific channels with keywords
- Approval workflow - Optional manual approval before publishing
- Queue processing - Background job handling with Laravel Horizon
- Single container deployment - Simplified hosting with FrankenPHP
Self-hosting
The production image is available at codeberg.org/lvl0/ffr:latest.
docker-compose.yml
services:
app:
image: codeberg.org/lvl0/ffr:latest
container_name: ffr_app
restart: always
ports:
- "8000:8000"
environment:
APP_KEY: "${APP_KEY}"
APP_URL: "${APP_URL}"
DB_DATABASE: "${DB_DATABASE}"
DB_USERNAME: "${DB_USERNAME}"
DB_PASSWORD: "${DB_PASSWORD}"
REDIS_HOST: redis
REDIS_PORT: 6379
volumes:
- app_storage:/app/storage
depends_on:
- db
- redis
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/up"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
db:
image: mariadb:11
container_name: ffr_db
restart: always
environment:
MYSQL_DATABASE: "${DB_DATABASE}"
MYSQL_USER: "${DB_USERNAME}"
MYSQL_PASSWORD: "${DB_PASSWORD}"
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:7-alpine
container_name: ffr_redis
restart: always
volumes:
- redis_data:/data
volumes:
db_data:
redis_data:
app_storage:
Environment Variables
| Variable | Required | Description |
|---|---|---|
APP_KEY |
Yes | Encryption key. Generate with: echo "base64:$(openssl rand -base64 32)" |
APP_URL |
Yes | Your domain (e.g., https://ffr.example.com) |
DB_DATABASE |
Yes | Database name |
DB_USERNAME |
Yes | Database user |
DB_PASSWORD |
Yes | Database password |
DB_ROOT_PASSWORD |
Yes | MariaDB root password |
Development
NixOS / Nix
git clone https://codeberg.org/lvl0/ffr.git
cd ffr
nix-shell
The shell will display available commands and optionally start the containers for you.
Available Commands
| Command | Description |
|---|---|
dev-up |
Start development environment |
dev-down |
Stop development environment |
dev-restart |
Restart containers |
dev-logs |
Follow app logs |
dev-logs-db |
Follow database logs |
dev-shell |
Enter app container |
dev-artisan <cmd> |
Run artisan commands |
prod-build [tag] |
Build and push prod image (default: latest) |
Services
| Service | URL |
|---|---|
| App | http://localhost:8000 |
| Vite | http://localhost:5173 |
| MariaDB | localhost:3307 |
| Redis | localhost:6380 |
Other Platforms
Contributions welcome for development setup instructions on other platforms.
License
This project is open-source software licensed under the AGPL-3.0 license.
Support
For issues and questions, please use Codeberg Issues.