Rufus is a free, open-source web based RSS reader, designed to be both simple and fast. It can be built and managed locally following the instructions below, or accessed at the public instance. Rufus is written in Java atop Dropwizard. The frontend is vanilla javascript, with the help of Mustache and others.

Screenshot - Rufus


The project is packaged with Maven and is built as a fat jar. Once the jar is built, it is possible to both initialize the database and start the HTTP server with the snapshot jar and the Dropwizard db and server commands. These steps are covered below.

  1. Clone the repo.

$ git clone && cd rufus

  1. Set the JWT hash.

Rufus uses JWT for creating access tokens for user claims. The server key is read as an environment variable (JWT_SECRET) and must be set prior to server startup. For convenience, a hash can be generated with bash/md5 and set directly.

$ export JWT_SECRET=$(echo -n a_super_secret_password | md5)

  1. Package the project.

$ mvn package

  1. Configure the H2 database.

$ java -jar target/rufus-1.0-SNAPSHOT.jar db migrate config.yml

  1. Start the server.

$ java -jar target/rufus-1.0-SNAPSHOT.jar server config.yml

Et voila, you’re done, enjoy!

(Once the application is up it will be listening on port 8080 and can be accessed in the browser at localhost:8080.)

P.S. On all subsequent launches (barring any including database migrations) it is simply enough to run the ./launch script to start the application.

Overview & Getting Started

Rufus leverages the ROME framework to parse user’s syndication feeds for use throughout the rest of the application.

The application operates on both anonymous and authenticated user sessions. Anonymous sessions return data from a predefined collection of ‘public’ RSS feeds.

Syndication feeds (Sources internally) are displayed as Articles on the frontend. After initial load, articles are cached internally with a short TTL as a trade-off on application speed/ real-time source updates. Most all feed processing logic (download, parsing, aggregation etc.) is contained within the FeedProcessor. All user facing article functionality is grouped within the ArticleResource and exposed through requests at /api/articles/*

Also, please note that this project is still under development and as such much functionality may be currently broken/ missing. Below there is a small list of todo items I plan on implementing as quickly as possible (:

Lire la suite >>>

Articles found elsewhere on the Web!