Skip to content
Lightweight Replacement for Google Reader
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

NOTE I'm no longer working on this project. Try Gofr for App Engine, which I also wrote. Gofr scales considerably better for larger sets of data, and includes mobile browser support, high-density screen support, sharing, and other nifty features.

grr >:(

grr was an attempt to replace the gaping hole that the departure of [Google Reader] 1 left in my daily routine. Its name is an abbreviation for Google Reader Replacement, as well as an accurate representation of my sentiments towards the discontinuation of one of Google's most useful products.

grr consists of two components - the web application, with which the user interacts, and the background updater, which routinely updates feeds in the background.



Primary focus of grr was to replicate the core functionality of [Google Reader] 1 - specifically, features like starring, reading/unreading, navigation, and subscription categories. To that extent, grr supports:

  • Subscription categories
  • Starring
  • Marking as read/unread (single articles as well as entire views)
  • Filtering by status (All/Unread/Starred)
  • Paging
  • Tagging
  • Simple navigation using Previous/Next buttons
  • Keyboard shortcuts
  • Ability to subscribe to individual feeds

Additional features include:

  • Localization support
  • Infinite nesting for subscription categories
  • Article 'liking', along with 'like' counts (this feature was available on Google Reader at some point)
  • Regular client-side update polling
  • Ability to mass-import feeds from OPML-formatted documents (such as those generated by [Google Takeout] 7)
  • Support for any number of user accounts
  • Built-in [OpenID] 6 support
  • Choice of two background updaters - standard sequential updater written in [PHP] 2, or high-performance concurrent updater written in [Go] 10
  • [Google App Engine] 12 support (currently experimental)


On the server side, grr requires:

  • [Apache] 8 server with [PHP] 2 support
  • [MySQL] 3 server
  • [cron] 4, or any other scheduling service to routinely update feed information
  • (optional) [Go] 10 runtimes with the [go-mysql-library] 11 package to use the alternative concurrent feed updater, instead of the default sequential updater written in PHP

On the client side, grr relies heavily on [JavaScript] 5 and probably needs a decent modern browser.

grr is compatible with [Google App Engine] 12 - though PHP support on GAE is currently experimental, and requires prior approval. app.yaml is included - copy it to your project's 'server' directory, and replace 'grr-reader' with the name of your project.


To install:

  1. Copy the contents of the server directory to a www-accessible directory
  2. Copy the contents of the shell directory to a private area not accessible via www
  3. Import the MySQL schema in mysql/schema_full.sql to a MySQL database
  4. Rename web application's default.config.php to 'config.php' and set all the necessary configuration information
  5. Rename shell application's default.config.php to 'config.php' and set the timezone and database configuration
  6. Log in to the web application and create a new administrative account
  7. Schedule to run routinely

Note that the web application, the database and shell application components do not have to reside on the same system.

Creating User Accounts

Depending on configuration, grr can allow anyone to create a new account (see the "CREATE_UNKNOWN_ACCOUNTS" setting in the configuration, disabled by default), or require a "welcome token" link to create a new account. Welcome token links can be generated in the Administrator section of the application and are valid for 2 weeks.


grr was never polished, and as a result:

  • The design of the web application is atrocious
  • Administrative features were mostly an afterthought and could certainly do with a redesign/overhaul
You can’t perform that action at this time.