A command-line RSS feed aggregator built in Go. Gator allows you to manage RSS feeds, follow feeds from other users, and browse recent posts from your followed feeds right in your terminal.
- 🔐 User Management - Register users and switch between accounts
- 📡 RSS Feed Management - Add, list, and manage RSS feeds
- 👥 Social Following - Follow feeds created by other users
- 🤖 Auto-Aggregation - Continuous RSS feed scraping and post storage
- 📰 Post Browsing - View recent posts from your followed feeds
- 🗄️ Database Storage - Persistent storage of users, feeds, and posts
Before installing Gator, make sure you have:
- Go 1.24+ - Download and install Go
- PostgreSQL - Download and install PostgreSQL
- Goose - Database migration tool (installation instructions below)
Install Gator using Go's built-in package manager:
go install github.com/voidarchive/Gator@latestThis will compile and install the gator binary to your $GOPATH/bin directory (usually ~/go/bin).
Make sure your $GOPATH/bin is in your system's $PATH so you can run gator from anywhere.
Create a PostgreSQL database for Gator:
CREATE DATABASE gator;Install goose for running database migrations:
go install github.com/pressly/goose/v3/cmd/goose@latestNavigate to the Gator project directory and run the migrations:
cd sql/schema
goose postgres "postgres://username:password@localhost:5432/gator?sslmode=disable" upReplace username, password, and connection details with your PostgreSQL credentials.
This will create all the necessary tables:
users- User accountsfeeds- RSS feed informationfeed_follows- User feed subscriptionsposts- Scraped RSS posts
Create a configuration file at ~/.gatorconfig.json:
{
"db_url": "postgres://username:password@localhost:5432/gator?sslmode=disable",
"current_user_name": ""
}Replace username, password, and database connection details with your PostgreSQL credentials.
# Register a new user
gator register <username>
# Login as a user (sets current user)
gator login <username>
# List all users
gator users
# Reset database (delete all users)
gator reset# Add a new RSS feed (automatically follows it)
gator addfeed "Feed Name" "https://example.com/rss"
# List all feeds in the system
gator feeds
# Follow an existing feed by URL
gator follow "https://example.com/rss"
# List feeds you're following
gator following
# Unfollow a feed
gator unfollow "https://example.com/rss"# Start RSS aggregation (runs continuously)
gator agg <duration>
# Examples:
gator agg 1m # Fetch feeds every 1 minute
gator agg 30s # Fetch feeds every 30 seconds
gator agg 1h # Fetch feeds every 1 hour
# Browse recent posts from followed feeds
gator browse # Show 2 most recent posts (default)
gator browse 10 # Show 10 most recent posts# 1. Register and login
gator register alice
gator login alice
# 2. Add some RSS feeds
gator addfeed "TechCrunch" "https://techcrunch.com/feed/"
gator addfeed "Hacker News" "https://news.ycombinator.com/rss"
# 3. Start aggregating posts (in background)
gator agg 5m &
# 4. Browse recent posts
gator browse 5
# 5. Follow feeds from other users
gator follow "https://blog.boot.dev/index.xml"Here are some popular RSS feeds you can add to get started:
- TechCrunch:
https://techcrunch.com/feed/ - Hacker News:
https://news.ycombinator.com/rss - Boot.dev Blog:
https://blog.boot.dev/index.xml - GitHub Blog:
https://github.blog/feed/ - Go Blog:
https://go.dev/blog/feed.atom
To run Gator in development mode:
git clone https://github.com/voidarchive/Gator.git
cd Gator
go run . <command> [args...]To build a binary:
go build -o gator
./gator <command> [args...]Gator is built with:
- Go - Backend logic and CLI interface
- PostgreSQL - Data persistence
- SQLC - Type-safe SQL code generation
- RSS/XML Parsing - Built-in Go XML parsing
The application follows a clean architecture with separate packages for:
internal/cli- Command handlers and CLI logicinternal/config- Configuration managementinternal/database- Database queries and modelssql/- SQL schema and queries
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is open source and available under the MIT License.