A modern RSS reader application built with Go backend, Preact frontend, and a terminal user interface. This project provides multiple ways to consume RSS feeds with caching, article parsing, and various user interfaces.
- RSS Feed Management: Add, remove, and manage RSS feed subscriptions
- Smart Caching: SQLite-based caching system to avoid rate limits and ensure fast loading. Detailed implementation explanation
- Article Parsing: Extract full article content from web pages using go-readability
- Podcast Support: Handle media enclosures for podcast episodes with audio player support
- Read Status Tracking: Mark articles as read/unread with persistent storage
- Sample Feeds: Built-in sample RSS feeds for testing and demonstration
- RESTful API: Clean API endpoints for all operations
- Background Refresh: Manual feed refresh without blocking normal operations
- Modern UI: Lightweight React-like interface using Preact for smaller bundle size
- Feed Controls: Easy feed management with URL and name input
- Article Reader: Clean article reading interface with sidebar navigation
- Text-to-Speech: Built-in TTS functionality for audio article consumption
- Article Parsing: On-demand full article content extraction
- Read Status: Visual indicators for read/unread articles
- Responsive Design: Multi-pane layout with navigation sidebar
- Hot Reload: Fast development with Vite's HMR
- Terminal-based: Full-featured RSS reader that runs in the terminal
- Article Browser: Navigate articles using keyboard shortcuts
- Content Display: Clean text rendering with HTML tag removal
- Feed Grouping: Articles organized by RSS feed source
- Text Wrapping: Proper text formatting for terminal display
- Mouse Support: Click navigation in supported terminals
- Go 1.19+ installed
- Node.js 16+ installed
- Git
-
Install Go dependencies:
go mod tidy
-
Run the backend:
cd be go run *.go
The backend will be available at http://localhost:8080
-
Navigate to frontend directory:
cd fe
-
Install dependencies:
npm install
-
Start development server:
npm run dev
The frontend will be available at http://localhost:5173
-
Build for production:
npm run build
Static files will be generated in
fe/dist/
- Run the terminal interface:
Note: The backend must be running first at http://localhost:8080
cd tui go run main.go
cd be
go build -o rss-reader-backend *.go
./rss-reader-backend
cd fe
npm run build
# Serve the dist/ folder with any static server
cd tui
go build -o rss-reader-tui main.go
./rss-reader-tui
GET /posts
- Retrieve all cached articlesPOST /refresh
- Refresh all RSS feedsGET /feeds
- List all subscribed feedsPOST /feeds
- Add a new RSS feedDELETE /feeds
- Remove a feedGET /read
- List read article linksPOST /read
- Mark article as readPOST /unread
- Mark article as unreadGET /parse-article?url=<url>
- Parse full article content
- Use the frontend for the best visual experience
- Use the TUI for terminal-only environments or lightweight usage
- The backend caches all articles locally for fast loading
- Use the refresh button to fetch new articles from RSS feeds
- The system supports both regular RSS feeds and podcast feeds with audio
- Frontend uses Vite proxy to communicate with the Go backend
- Backend includes sample RSS feeds for testing
- All data is stored in SQLite database (
be/posts.db
) - Hot reload available for both frontend and backend development
Built with ❤️ using Go, Preact, and modern web technologies