Giter VIP home page Giter VIP logo

commafeed's Introduction

CommaFeed

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

preview

Features

  • 4 different layouts
  • Light/Dark theme
  • Fully responsive, works great on both mobile and desktop
  • 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
  • Fever-compatible API for native mobile apps
  • Can automatically mark articles as read based on user-defined rules
  • Browser extension
  • Compiles to native code for blazing 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-x86_64 and windows-x86_64 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>] [-Pnative] [-DskipTests]
  • <database> can be one of h2, postgresql, mysql or mariadb. The default is h2.
  • -Pnative compiles the application to native code. This requires GraalVM to be installed (GRAALVM_HOME environment variable pointing to a GraalVM installation).
  • -DskipTests to speed up the build process by skipping tests.

When the build is complete:

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

Configuration

CommaFeed doesn't require any configuration to run with its embedded database (H2). The database file will be stored in the data directory of the current directory.

To use a different database, you will need to configure the following properties:

  • quarkus.datasource.jdbc.url
    • e.g. for H2: jdbc:h2:./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
  • quarkus.datasource.username
  • quarkus.datasource.password

There are multiple ways to configure CommaFeed:

  • a config/application.properties properties file relative to the working directory (keys in kebab-case)
  • Command line arguments prefixed with -D (keys in kebab-case)
  • Environment variables (keys in UPPER_CASE)
  • a .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.

All CommaFeed settings are optional and have sensible default values.

When logging in, credentials are stored in an encrypted cookie. The encryption key is randomly generated at startup, meaning that you will have to log back in after each restart of the application. To prevent this, you can set the quarkus.http.auth.session.encryption-key property to a fixed value (min. 16 characters). All other Quarkus settings can be found here.

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

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.

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

commafeed's People

Contributors

akinayturan avatar athou avatar busimus avatar canoine avatar canyapan avatar carlmorris avatar dcelasun avatar dependabot[bot] avatar ebraminio avatar fabianofranz avatar gabrielrcp avatar gileswells avatar hubcapp avatar hywax avatar jhsoby avatar jkakku avatar jojonv avatar joshmatz avatar joveyu avatar kankri avatar luckrnx09 avatar maaaathis avatar magefroh avatar mrachini avatar obskyr avatar ravenb avatar renovate[bot] avatar rthome avatar viswans83 avatar wanglei1993 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

commafeed's Issues

Escape character bug

The unread list in the right side of the page has unicode escape character bug

Unicode character '피' (U+D53C) is incorrectly escaped to &Eopf;

and following characters are incorretly escaped to:

'하' (U+D558) -> &gopf;
'학' (U+D559) -> &hopf;
'한' (U+D560) -> &kopf;

and so on...

I suspect it's a Jsoup bug but I'm not sure...

FYI, I'm running Firefox 20.0.1 on Windows 7

Login page

Style the login page a little, maybe change it to the home page for people not logged in
Register ?
Login with google account ?

Clarify license

The about page within the app describes this is an "open-source project". However, I can find no license declaration for your code. Could you please choose a commonly used license (e.g. MIT, BSD, Apache, GPL, ...) and make it clear which one?

Mark all as read

Should only mark entries older than the last time we got the entrylist

invalid_grant

Sometimes google oauth returns an invalid_grant error

Feed favicon

Retrieve favicon when updating feed, storing as blob and display next to feed name

Google Import XML Progress Bar/Error notification

There's no feedback to the user once you upload Google Reader's subscription XML file and click import.

Some sort of progress bar would be nice as I'm not sure where in the import it's at.

The import also seems to be stalling out on the first category and the first feed in the category for me and this is what Chrome is reporting in the header tab for the request that I'm guessing is generated when I click import:

Request URL:http://commafeed.com/rest/feed/import?_t=1366475848757
Request Headersview parsed
POST http://commafeed.com/rest/feed/import?_t=1366475848757 HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Referer: http://commafeed.com/
Origin: http://commafeed.com
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryRyBc1Vy3ADwzCKoQ
Query String Parametersview parsed
_t=1366475848757
Request Payload
------WebKitFormBoundaryRyBc1Vy3ADwzCKoQ
Content-Disposition: form-data; name="file"; filename="google-reader-subscriptions.xml"
Content-Type: text/xml


------WebKitFormBoundaryRyBc1Vy3ADwzCKoQ--

Tests !

write tests for java and angularjs

Refresh time

Show somewhere on the admin page the time it took to refresh all feeds

Throttle feed refresh

Timer every n seconds, get (total feed count * n/60) feeds to refresh (by update time asc)

Fill entry list

Fill entry list initially until the screen is "full", instead of populating with a fixed number of entries.
call loadMoreEntries() until not needed anymore?

Scrolling when opening an entry

When opening an entry, if the bottom of the entry is not visible, scroll down until it is. If at that point, the top of the entry is not visible, scroll up until it is.

Search

Allow full-text search for feed entries

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.