commafeed

AthouApache-2.0活跃维护

受 Google Reader 启发的自托管 RSS 阅读器,用 Java 搭建,可自己部署来集中订阅和阅读博客、新闻等各类信息源。

Google Reader inspired self-hosted personal RSS reader.

7.4.1发布于 2026-10-22 15:29 UTC3,650star +1 / 7 天418fork同步于 2026-11-10 17:41 UTC

怎么上手

由 README 提炼,执行前请确认
docker run -p 8082:8082 athou/commafeed
硬件要求按 README 说明

README 未说明具体硬件要求;可编译为原生可执行文件以降低内存占用,JVM 包可用 -Xmx 限制内存,Docker 镜像使用 OpenJ9(Semeru)JVM。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

自托管的个人 RSS 阅读器,仿 Google Reader 界面,基于 Quarkus 与 React 构建

受 Google Reader 启发的自托管 RSS 阅读器,用 Java 搭建,可自己部署来集中订阅和阅读博客、新闻等各类信息源。

核心能力

  • 提供四种布局与明暗主题,移动端和桌面端自适应
  • 几乎全部操作都有键盘快捷键,支持从右到左排版的订阅源
  • 支持 OPML 导入导出,并提供 REST API 以及 Fever、Google Reader API
  • 可按用户自定义规则自动标记已读,新文章发布时推送通知
  • 支持 H2、PostgreSQL、MySQL、MariaDB 四种数据库

容易踩的坑

默认监听 8082 端口,且默认监听所有网卡;默认阻止访问本地地址以防 SSRF,订阅内网源需将 commafeed.http-client.block-local-addresses 设为 false;默认用 H2 嵌入式数据库,数据存于当前目录的 data 目录;加密密钥每次启动随机生成,重启后需重新登录,可设置 quarkus.http.auth.session.encryption-key 固定;从源码构建原生包需 GraalVM 或容器环境。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本7.4.1
  1. 7.4.1CommaFeed 7.4.1最新正式版2026-10-22 · 2026-10-22 15:29 UTC
    • Fix entries being marked as read when scrolling back to an entry that was explicitly marked as unread (#2337)
    • Add a global failsafe timeout to the new HTTP/2 client to prevent it from hanging indefinitely
    • Add OCI source label to container images (#2335)
  2. 7.4.0CommaFeed 7.4.02026-10-19 · 2026-10-19 07:31 UTC
    查看更新说明
    • Add support for HTTP/2 when fetching feeds (#2317)
    • Send more default headers when fetching feeds, to avoid being rejected by some servers (#2315)
    • Harden the content cleaning of feed entries by only allowing http/https protocols in iframe src attributes
    • Fix the header in mobile mode being wrapped/cut off when too wide, even above the mobile breakpoint (#2080)
    • Document how to configure Quarkus host validation when running CommaFeed behind a reverse proxy
  3. 7.3.2CommaFeed 7.3.22026-08-22 · 2026-08-22 06:52 UTC
    查看更新说明
    • Prevent users from starring/tagging entries that are not theirs and subsequently reading them (GHSA-prfv-88mm-5gpg)
  4. 7.3.1CommaFeed 7.3.12026-08-17 · 2026-08-17 21:10 UTC
    查看更新说明
    • Prevent Host header injection attacks on the password recovery endpoint. A new setting commafeed.password-recovery-public-base-url has been added to specify the base URL to use in password recovery emails (GHSA-hp8h-jqfm-v7x5). This setting is only required when the password recovery feature is enabled, which is not the default.
  5. 7.3.0CommaFeed 7.3.02026-08-11 · 2026-08-11 06:48 UTC
    查看更新说明
    • Add support for the Google Reader API for native mobile apps that don't support the Fever API
    • The profile menu now works again on mobile when action buttons are at the bottom of the screen
    • More SSRF protection regarding IPv6 (GHSA-q5qw-345w-55xg)
    • Changed the default value of blockLocalAddresses to make CommaFeed more secure out-of-the-box. See the "Access to local address blocked" section of the README if you subscribe to feeds that are only available on your local network.

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    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 and Google Reader API for native mobile apps
    • Can automatically mark articles as read based on user-defined rules
    • Push notifications when new articles are published
    • Highly customizable with custom CSS and JavaScript
    • Browser extension
    • Compiles to native code for blazing fast startup and low memory usage
    • Supports 4 databases
      • H2 (embedded database)
      • PostgreSQL
      • MySQL
      • MariaDB

    Usage

    Public instance

    A free public instance is available at https://www.commafeed.com.

    It has no ads, no tracking, and your data is never exploited or sold to third parties. The service is funded entirely through donations. However, this public instance does have a few limitations compared to self-hosted setups, outlined here.

    Docker

    Docker is the easiest way to get started with self-hosted 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, linux-aarch_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 but requires a JRE 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 either GraalVM to be installed (GRAALVM_HOME environment variable pointing to a GraalVM installation) or a container environment to be available (docker/podman/...).
    • -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]

    Distribution packages

    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 each prefixed with -D (keys in kebab-case)
    • Environment variables (keys in UPPER_CASE)
    • a .env file in the working directory (keys in UPPER_CASE)

    When in doubt, 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.

    Updates

    When CommaFeed is up and running, you can subscribe to this feed to be notified of new releases.

    Memory management

    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 (native and jvm packages)

    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 (jvm package)

    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 (jvm package)

    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.

    FAQ

    Getting "Access to local address blocked" when adding a feed

    CommaFeed blocks access to local resources by default to prevent SSRF attacks. If you want to subscribe to feeds that are only available on your local network, you can disable this security measure by setting the commafeed.http-client.block-local-addresses variable to false. Do this only if you trust all users of your CommaFeed instance not to access private resources.

    Listen on a single network interface

    By default, CommaFeed listens on all interfaces. You can restrict it by setting quarkus.http.host.

    Note that if you set it to a local name like 127.0.0.1 host validation is enabled automatically. This prevents access if you're using a reverse proxy like Nginx. To fix, add your actual hostname to allowed-hosts:

    quarkus.http.host=127.0.0.1
    quarkus.http.proxy.proxy-address-forwarding=true
    quarkus.http.proxy.allow-forwarded=true
    quarkus.http.host-validation.allowed-hosts=commafeed.example.com
    

    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