Skip to content

tmarcum6/fed.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fed.

fed. is a lightweight, self-hosted RSS feed reader built in Go. No Electron. No Node. No nonsense. Just a single binary, a SQLite database, and your feeds.


Example


Features

  • Add any RSS or Atom feed — via URL
  • Discover feeds — auto-detect RSS/Atom feeds on any website
  • Import feeds — bulk import from CSV (one URL per line)
  • Auto-polling — feeds refresh every 15 minutes in the background
  • Filters — view all, unread only, or hidden articles
  • Per-feed filtering — toggle unread filter on individual feeds
  • Mark as read/unread — track what you've seen
  • Hide articles — hide articles you don't want to see
  • Manage feeds — edit feed URLs, refresh manually, delete feeds
  • Zero dependencies to run — single binary + SQLite file
  • Server-rendered HTML — works in any browser

Getting Started

Prerequisites

  • Go 1.21+
  • GCC (required for SQLite via go-sqlite3)

Install & Run

# Clone the repo
git clone https://github.com/tmarcum6/fed..git
cd fed./

# Install dependencies
go mod tidy

# Run
go run .

Then open http://localhost:8080 in your browser.


Project Structure

fed/
├── main.go               # Entry point, router, handlers
├── go.mod
├── rss.db                # Auto-created SQLite database
├── db/
│   ├── db.go             # DB init & table creation
│   ├── feeds.go          # Feed queries
│   └── articles.go       # Article queries
├── handlers/
│   ├── discover.go        # RSS feed discovery on websites
│   └── import.go         # CSV feed import
├── models/
│   └── feed.go           # Feed & Article types
├── poller/
│   └── poller.go         # Background feed polling
└── templates/
    ├── templates.go       # Template loader & renderer
    ├── layout.html       # Base layout with sidebar
    ├── index.html        # Homepage / all articles
    ├── feed.html         # Single feed view
    └── feeds.html        # Feed management page

Routes

Method Path Description
GET / Homepage — all articles
GET /?unread=true Unread articles only
GET /?hidden=true Hidden articles
POST /feeds Add a new feed
GET /feeds Manage feeds page
POST /feeds/import Import feeds from CSV
GET /feeds/discover Discover feeds on a website
GET /feeds/{id} View articles for a feed
GET /feeds/{id}?unread=true View unread articles for a feed
POST /feeds/{id}/refresh Manually refresh a feed
PUT /feeds/{id} Update feed URL
DELETE /feeds/{id} Delete a feed
POST /articles/{id}/read Mark article as read
POST /articles/{id}/unread Mark article as unread
POST /articles/{id}/hidden Hide an article
POST /articles/{id}/unhide Unhide an article

Testing

# Run all tests
go test ./...

# Run with verbose output
go test ./... -v

# Check coverage
go test ./... -cover

Tests use SQLite's :memory: mode — no files created, no cleanup needed.


Tech Stack

Layer Tech
Language Go
Router chi
RSS Parsing gofeed
Database SQLite via go-sqlite3
Templates html/template
CSS Tailwind CSS

Roadmap

  • OPML import / export
  • Feed categories / folders
  • Full-text search
  • Article preview pane
  • Docker support
  • Social
  • Custom feeds

About

RSS Site made with Go

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors