rss2go

module
v0.0.0-...-74acfa6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 2, 2026 License: MIT

README

rss2go

linting publish

rss2go

rss2go is a self-hosted RSS Feed aggregator built with Go

Getting started

If you want to run the application locally ensure you have sass and go installed then run the following command:

make run

Which will allow you to access the website on localhost:8080.

Or if you have podman installed you can run the following command:

make container

Overview

Folder structure:

.
├── cmd
│   └── app
├── internal
│   ├── components
│   ├── database
│   ├── routes
│   ├── rss
│   ├── schema
│   ├── scss
│   ├── services
│   ├── utils
│   └── worker
└── web
    ├── scss
    │   ├── abstracts
    │   ├── base
    │   ├── components
    │   ├── layout
    │   ├── main.scss
    │   └── pages
    ├── static
    │   ├── images
    │   └── js
    └── templates

If you want to see the current make commands run make in your terminal, but here is a list of the current make commands:

rss2go

Usage:
  setup                 Install pre-commit hooks
  build                 Build rss2go api
  run                   Build and run rss2go api
  test                  Test backend for rss2go app
  clean                 Clean up build artifacts
  container             Run a local containised version of the application

Note to use the container command you will need podman install

This project uses the following technology:


OPML

The application supports OPML to bulk upload your feeds, to find this feature head over to the feeds page and upload your XML file. There is an example one in the repo called opml.xml or you can download the following to save into an XML file to upload:

<?xml version="1.0" encoding="UTF-8"?>

<opml version="2.0">
  <head>
    <title>rss2go Subscriptions</title>
  </head>
  <body>
    <outline text="rss2go" title="rss2go">

      <outline text="Coding Horror" type="rss" xmlUrl="https://blog.codinghorror.com/rss" />

      <outline text="Technology in government" type="rss" xmlUrl="https://technology.blog.gov.uk/feed/" />

      <outline text="Docker" type="rss" xmlUrl="https://www.docker.com/blog/feed/" />

      <outline text="Stack Overflow Blog" type="rss" xmlUrl="https://stackoverflow.blog/feed/" />

      <outline text="Framework Blog" type="rss" xmlUrl="https://frame.work/gb/en/blog.rss" />

      <outline text="David Heinemeier Hansson" type="atom" xmlUrl="https://world.hey.com/dhh/feed.atom" />

      <outline text="Hacker News: Front Page" type="rss" xmlUrl="https://hnrss.org/frontpage" />

      <outline text="AWS News Blog" type="rss" xmlUrl="https://aws.amazon.com/blogs/aws/feed/" />

      <outline text="The Go Blog" type="atom" xmlUrl="http://blog.golang.org/feed.atom" />

      <outline text="Diomidis D. Spinellis Web Log" type="rss" xmlUrl="https://www.spinellis.gr/blog/dds-blog-rss.xml" />

      <outline text="Dan Bartlett: coach, writer, engineer &amp; founder" type="rss" xmlUrl="https://danbartlett.co.uk/index.xml" />

      <outline text="Jason Fried" type="atom" xmlUrl="https://world.hey.com/jason/feed.atom" />

      <outline text="NASA" type="rss" xmlUrl="https://www.nasa.gov/feed/" />

      <outline text="Kris Tun" type="rss" xmlUrl="https://kristun.dev/rss.xml" />

      <outline text="The GitHub Blog" type="rss" xmlUrl="https://github.blog/feed/" />

      <outline text="Roman Zipp" type="rss" xmlUrl="https://romanzipp.com/rss" />

      <outline text="The Proton Blog" type="rss" xmlUrl="https://proton.me/blog/feed" />

      <outline text="Boot.dev Blog" type="rss" xmlUrl="https://blog.boot.dev/index.xml" />

      <outline text="Oskar Wickström" type="rss" xmlUrl="https://wickstrom.tech/feed.xml" />

      <outline text="Mitchell Hashimoto" type="rss" xmlUrl="https://mitchellh.com/feed.xml" />

      <outline text="BBC News" type="rss" xmlUrl="http://feeds.bbci.co.uk/news/technology/rss.xml" />

      <outline text="Nathan Berry" type="rss" xmlUrl="https://nathanberry.co.uk/feed.xml" />

      <outline text="Raccoon’s Trash Can" type="rss" xmlUrl="https://raccoon.bearblog.dev/feed/?type=rss" />

    </outline>
  </body>
</opml>

API Endpoints

# HTML Pages

GET    /                           # Articles homepage
GET    /feeds                      # View all feeds
GET    /articles/favourites        # Favourite articles
GET    /articles/later             # Read-later articles
GET    /articles/{feedId}          # Articles by feed ID

# HTMX Partials

GET    /partials/articles          # All articles (partial)
GET    /partials/articles/{id}     # All rss feed articles (partial)

GET    /partials/favourite         # Favourite list (partial)
POST   /partials/favourite/{id}    # Mark article as favourite
DELETE /partials/favourite/{id}    # Remove from favourite

GET    /partials/later             # Read-later list (partial)
POST   /partials/later/{id}        # Save article for later
DELETE /partials/later/{id}        # Remove from read-later

GET    /partials/feed              # Feed form (partial)
POST   /partials/feed              # Add new rss feed
DELETE /partials/feed/{id}         # Delete rss feed

GET    /partials/feed/opml         # OPML import form
POST   /partials/feed/opml         # Upload OPML file

Running rss2go locally via a container

By default, rss2go expects its database at internal/database/rss.db inside the container. To persist it on your host machine (e.g., at ~/.config/rss2go/rss.db), mount it as a volume:

mkdir -p ~/.config/rss2go
touch ~/.config/rss2go/rss.db

# Docker volume mount
docker run --name rss2go -dit \
  -p 8000:8080 \
  -v ~/.config/rss2go/rss.db:/app/internal/database/rss.db \
  --restart=always \
  nathanberry97/rss2go:latest

# Podman volume mount with SELinux context
podman run --name rss2go -dit \
  -p 8000:8080 \
  -v ~/.config/rss2go/rss.db:/app/internal/database/rss.db:Z \
  --restart=always \
  docker.io/nathanberry97/rss2go:latest

Directories

Path Synopsis
cmd
app command
internal
css
rss

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL