Skip to content

Latest commit

 

History

History
166 lines (115 loc) · 6.47 KB

README.md

File metadata and controls

166 lines (115 loc) · 6.47 KB

CommaFeed

Google Reader inspired self-hosted RSS reader, based on Quarkus and React/TypeScript.

preview

Features

  • 4 different layouts
  • Light/Dark theme
  • Fully responsive
  • Keyboard shortcuts for almost everything
  • Support for right-to-left feeds
  • Translated in 25+ languages
  • Supports thousands of users and millions of feeds
  • OPML import/export
  • REST API and a Fever-compatible API for native mobile apps
  • Browser extension
  • Compiles to native code for very fast startup and low memory usage
  • Supports 4 databases
    • H2 (embedded database)
    • PostgreSQL
    • MySQL
    • MariaDB

Deployment

Docker

Docker is the easiest way to get started with CommaFeed.

Docker images are built automatically and are available at https://hub.docker.com/r/athou/commafeed

Cloud hosting

PikaPods offers 1-click cloud hosting solutions starting at $1/month with a free $5 welcome credit and officially supports CommaFeed. PikaPods shares 20% of the revenue back to CommaFeed.

PikaPods

Download a precompiled package

Go to the release page and download the latest version for your operating system and database of choice.

There are two types of packages:

  • The linux and windows packages are compiled natively and contain an executable that can be run directly.
  • The jvm package is a zip file containing all .jar files required to run the application. This package works on all platforms and is started with java -jar quarkus-run.jar.

If available for your operating system, the native package is recommended because it has a faster startup time and lower memory usage.

Build from sources

./mvnw clean package -P<database> [-DskipTests] [-Pnative]
  • <database> can be one of h2, postgresql, mysql or mariadb.
  • -DskipTests is optional but recommended because tests require a Docker environment to run against a real database.
  • -Pnative compiles the application to native code. This requires GraalVM to be installed (GRAALVM_HOME environment variable pointing to a GraalVM installation).

When the build is complete:

  • if you used the native profile, the executable is located at commafeed-server/target/commafeed-<version>-<database>-<platform>-<arch>-runner[.exe]
  • if you did not use the native profile, a zip containing all jars required to run the application is located at commafeed-server/target/commafeed-<version>-<database>.zip. Extract it and run the application with java -jar quarkus-run.jar

Memory management (jvm package only)

The Java Virtual Machine (JVM) is rather greedy by default and will not release unused memory to the operating system. This is because acquiring memory from the operating system is a relatively expensive operation. This can be problematic on systems with limited memory.

Hard limit

The JVM can be configured to use a maximum amount of memory with the -Xmx parameter. For example, to limit the JVM to 256MB of memory, use -Xmx256m.

Dynamic sizing

In addition to the previous setting, the JVM can be configured to release unused memory to the operating system with the following parameters:

-Xms20m -XX:+UseG1GC -XX:+UseStringDeduplication -XX:-ShrinkHeapInSteps -XX:G1PeriodicGCInterval=10000 -XX:-G1PeriodicGCInvokesConcurrent -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10

See here and here for more information.

OpenJ9

The OpenJ9 JVM is a more memory-efficient alternative to the HotSpot JVM, at the cost of slightly slower throughput.

IBM provides precompiled binaries for OpenJ9 named Semeru. This is the JVM used in the Docker image.

Configuration

There are multiple ways to configure CommaFeed:

  • a properties file in config/application.properties (keys in kebab-case)
  • Command line arguments prefixed with -D (keys in kebab-case)
  • Environment variables (keys in UPPER_CASE)
  • an .env file in the working directory (keys in UPPER_CASE)

The properties file is recommended because CommaFeed will be able to warn about invalid properties and typos.

CommaFeed only requires 3 properties to be configured:

  • quarkus.datasource.username
  • quarkus.datasource.password
  • quarkus.datasource.jdbc-url
    • e.g. for H2: jdbc:h2:/commafeed/data/db;DEFRAG_ALWAYS=TRUE
    • e.g. for PostgreSQL: jdbc:postgresql://localhost:5432/commafeed
    • e.g. for MySQL: jdbc:mysql://localhost/commafeed?autoReconnect=true&failOverReadOnly=false&maxReconnects=20&rewriteBatchedStatements=true&timezone=UTC
    • e.g. for MariaDB: jdbc:mariadb://localhost/commafeed?autoReconnect=true&failOverReadOnly=false&maxReconnects=20&rewriteBatchedStatements=true&timezone=UTC

All other CommaFeed settings are optional and have sensible default values.

When started, the server will listen on http://localhost:8082. The default user is admin and the default password is admin.

Translation

Files for internationalization are located here.

To add a new language:

  • add the new locale to the locales array in:
    • commafeed-client/.linguirc
    • commafeed-client/src/i18n.ts
  • run npm run i18n:extract
  • add translations to the newly created commafeed-client/src/locales/[locale]/messages.po file

The name of the locale should be the two-letters ISO-639-1 language code.

Local development

Backend

  • Open commafeed-server in your preferred Java IDE.
    • CommaFeed uses Lombok, you need the Lombok plugin for your IDE.
  • run ./mvnw quarkus:dev

Frontend

  • Open commafeed-client in your preferred JavaScript IDE.
  • run npm install
  • run npm run dev

The frontend server is now running at http://localhost:8082 and is proxying REST requests to the backend running on port 8083