A fast and lightweight RSS aggregator built with Go. This project allows you to fetch, parse, and display RSS feeds from multiple sources, making it easy to keep up with your favorite blogs, news sites, and podcasts—all in one place.
- User Management: Create users with API key authentication
- Feed Management: Add and manage RSS feeds
- Feed Following: Users can follow/unfollow feeds
- Automatic Scraping: Background service that periodically fetches RSS feeds
- Post Aggregation: Collect and store posts from followed feeds
- RESTful API: Clean HTTP API with JSON responses
- Docker Support: Containerized deployment with Docker Compose
- Go 1.21 or later
- PostgreSQL 12 or later
- Docker (optional)
- Clone the repository:
git clone https://github.com/kpriyanshu2003/go-rss-aggregator.git
cd go-rss-aggregator- Install dependencies (if any):
make deps- Set up environment variables:
cp .env.example .env- Set up the database:
# Create database and run migrations
make migrate-up- Run the application:
make runFor development with hot reload:
go install github.com/cosmtrek/air@latest
make devBuild and run the application:
go run main.goOr build a binary:
go build -o rss-aggregator
./rss-aggregatorConfigure the application using environment variables:
| Variable | Description | Default |
|---|---|---|
PORT |
Server port | 8080 |
DB_URL |
PostgreSQL connection string | Required |
- Add feed URLs via the web UI, API, or configuration file.
- Access your aggregated feed at the provided endpoint or in the console.
- Schedule feed refreshes as needed.
Pull requests are welcome! For significant changes, please open an issue first to discuss what you would like to change.
- Fork the repository
- Create your feature branch (
git checkout -b feature/my-feature) - Commit your changes (
git commit -am 'Add new feature') - Push to the branch (
git push origin feature/my-feature) - Open a pull request
This project is licensed under the MIT License. See the LICENSE file for more details.
- Built with Gin web framework
- Database queries generated with sqlc
- Uses UUID for unique identifiers# README.md
Happy aggregating! 🚀