A clean, efficient self-hosted RSS reader
A modern web-based RSS reader that can be used as a desktop application or self-hosted server. Fast deployment, zero dependencies, ready to use out of the box.
- Multi-format Support - RSS 1.0/2.0, Atom, JSON Feed
- Smart Subscription - Auto-discover website feeds
- Category Management - Folder grouping with drag & drop
- Bulk Operations - Multi-select, batch delete, batch move subscriptions
- Full-text Search - Quickly search article content
- Favorites - Star and manage important articles
- Reader Mode - Readability extraction for clean text
- Modern Interface - Responsive design for desktop and mobile
- Theme Switching - Light / Sepia / Dark themes
- Font Customization - Sans-serif / Serif / Monospace options
- Keyboard Navigation - Full keyboard shortcut support
- Auto Refresh - Configurable feed update frequency
- Local Storage - All data stored locally, fully controlled
- Authentication - Username/password verification support
- HTTPS Support - TLS certificate configuration
- Access Control - Restrict access sources
- Zero Dependencies - Single binary, no external dependencies
- Multi-database - SQLite (default) / MySQL optional
- Cross-platform - Linux / macOS / Windows
- GUI Mode - System tray support (macOS/Windows)
- Docker Support - Containerized deployment
- Fever API - Compatible with mobile clients
Download the binary for your platform from Releases:
# Linux / macOS
chmod +x rss-hub
./rss-hub
# Windows
rss-hub.exeVisit http://127.0.0.1:7070
Requirements:
- Go 1.23 or higher
- Make (recommended for cross-platform compilation)
- Zig (optional, for cross-compilation)
git clone https://github.com/TaylorChen/rss-hub.git
cd rss-hub
# Method 1: Using Make (recommended)
make host
./out/rss-hub
# Method 2: Using Go directly
go build -o rss-hub ./cmd/rss-hub
./rss-hub
# Development mode with debugging
make serve
# Run tests
make testNote: Cross-platform compilation requires the Zig toolchain
Installing Zig:
# macOS
brew install zig
# Verify installation
zig versionLinux Platform:
make linux_amd64 # Linux x86_64
make linux_arm64 # Linux ARM64
make linux_armv7 # Linux ARMv7Windows Platform:
make windows_amd64 # Windows x86_64
make windows_arm64 # Windows ARM64macOS Platform (no Zig required):
make darwin_amd64 # macOS Intel
make darwin_arm64 # macOS Apple SiliconNote: macOS native builds don't require Zig; only Linux/Windows cross-compilation needs it
# macOS app bundle
make darwin_arm64_gui # macOS Apple Silicon (.app)
make darwin_amd64_gui # macOS Intel (.app)
# Windows system tray version
make windows_amd64_gui # Windows x86_64 (with tray icon)# Build for current platform only (no Zig required)
make host
# Build all CLI versions (requires Zig)
make all
# Parallel build (faster, requires Zig)
make all-parallel
# Verify build artifacts
make verify
# Clean build artifacts
make clean
# Deep clean (including Go cache)
make distclean
# Show all available commands
make helpCommon Scenarios:
- Local development:
make host - Cross-platform release:
make all-parallel && make verify - Build macOS only:
make darwin_amd64 darwin_arm64
Build Output Location: out/ directory, organized by platform
Database Support: The compiled binary supports both SQLite and MySQL, switchable at runtime via -db parameter without recompilation
# Using SQLite
docker run -d \
-p 7070:7070 \
-v rss-hub-data:/data \
--name rss-hub \
taylorchen/rss-hub
# Using MySQL
docker run -d \
-p 7070:7070 \
-e RSS_HUB_DB="mysql://user:pass@tcp(mysql:3306)/rss_hub" \
--name rss-hub \
taylorchen/rss-hubRSS-Hub supports two database types:
# Default path
./rss-hub
# Specify database file
./rss-hub -db /path/to/database.dbAdvantages:
- Zero configuration, ready to use
- Single file storage, easy to backup
- Suitable for personal use
# Using command-line arguments
./rss-hub -db "mysql://user:password@tcp(localhost:3306)/rss_hub"
# Or using environment variable
export RSS_HUB_DB="mysql://user:password@tcp(localhost:3306)/rss_hub"
./rss-hubConnection String Format:
mysql://username:password@tcp(host:port)/database?charset=utf8mb4&parseTime=True&loc=Local
Advantages:
- Better concurrent performance
- Suitable for multi-user scenarios
- Easy cluster deployment
| Parameter | Environment Variable | Default | Description |
|---|---|---|---|
-addr |
RSS_HUB_ADDR |
127.0.0.1:7070 |
Listen address and port |
-db |
RSS_HUB_DB |
~/.config/rss-hub/storage.db |
Database connection string |
-auth |
RSS_HUB_AUTH |
- | Authentication info user:pass |
-auth-file |
RSS_HUB_AUTHFILE |
- | Authentication file path |
-cert-file |
RSS_HUB_CERTFILE |
- | HTTPS certificate file |
-key-file |
RSS_HUB_KEYFILE |
- | HTTPS private key file |
-base |
RSS_HUB_BASE |
- | URL base path |
-log-file |
RSS_HUB_LOGFILE |
stdout | Log output file |
-open |
- | false | Open browser after startup |
# Basic startup
./rss-hub
# Enable authentication
./rss-hub -auth "admin:secretpassword"
# Using MySQL + HTTPS
./rss-hub \
-db "mysql://root:password@tcp(localhost:3306)/rss_hub" \
-cert-file /path/to/cert.pem \
-key-file /path/to/key.pem \
-addr 0.0.0.0:443
# Public network + reverse proxy
./rss-hub -addr 0.0.0.0:7070 -base /rss- Click the "+" button in the top right corner
- Enter website URL or RSS address
- Select category folder (optional)
- Click "Add"
Batch Delete:
- Click the bulk operations button in toolbar (✓ icon)
- Check subscriptions to delete
- Click "Delete" button at bottom
Batch Move:
- Enter bulk mode and select multiple subscriptions
- Drag any selected item to target folder
- All selected subscriptions will move together
- Single Move - Drag subscription directly to folder
- Batch Move - Multi-select then drag to folder
- Remove from Group - Drag to "Remove from Group" area
| Shortcut | Function |
|---|---|
1 2 3 |
Unread/Starred/All |
/ |
Search bar |
j k |
Next/Previous article |
l h |
Next/Previous feed |
r |
Toggle read/unread |
s |
Toggle star |
o |
Open in new tab |
i |
Reader mode |
q |
Close article |
R |
Mark all as read |
# Development mode (hot reload)
make serve
# Run tests
make test
# Build all platform versions
make allrss-hub/
├── cmd/rss-hub/ # Main program entry
├── src/
│ ├── assets/ # Frontend resources (HTML/CSS/JS)
│ ├── content/ # Content processing (Readability, etc.)
│ ├── parser/ # Feed parsing
│ ├── platform/ # Platform-specific (GUI, tray, etc.)
│ ├── server/ # HTTP server and routing
│ ├── storage/ # Database layer
│ └── worker/ # Background tasks (refresh, download, etc.)
├── etc/ # Build scripts and configs
└── doc/ # Documentation
Backend
- Go 1.23+
- GORM (ORM framework)
- SQLite / MySQL
- Chi Router
Frontend
- Vue.js 2
- Vanilla CSS (lightweight design)
- Feather Icons
Build Tools
- Make
- Zig (cross-compilation)
Issues and Pull Requests are welcome!
- Fork this repository
- Create feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Run tests before committing:
make test - Keep code style consistent
- Update relevant documentation
- Clear and specific PR descriptions
This project is based on the following excellent open-source projects:
- yarr - Original project inspiration
- gofeed - RSS/Atom parsing
- readability - Content extraction
- Vue.js - Frontend framework
MIT License - See LICENSE file for details
Made with ❤️ by TaylorChen
For questions or suggestions, please submit an Issue