5 min read

Folo: An Open Source AI RSS Reader for Everything You Follow (GitHub, Scanned)

An open source RSS reader that gathers feeds, newsletters and videos, then summarises them with AI.

Folo logo
✅
Scan: safe. Nothing malicious. The apps send anonymous usage data by default, with a switch in settings, and the shared lockfile pins many packages with advisories, nearly all in build and test tooling. Scanned Oct 22, 2026; the full report is below.

Folo is an RSS reader rebuilt for the way people follow things now. Blogs, news sites, newsletters, podcasts, YouTube channels and social feeds all land in one timeline, each shown in a layout that suits it, and you can subscribe to sites without a feed through thousands of RSSHub routes. Newsletters get their own inbox address, and OPML import brings over your subscriptions from any other reader.

The AI is what made it take off. Timeline Summary turns hundreds of new entries into one digest, any article can be summarised or translated side by side into English, Chinese, Japanese or French, and you can ask questions of an article, a folder or everything you follow, with your own API key if you prefer. Scheduled AI tasks write daily or weekly briefings and send them to chat or email, and Actions filter, star, rewrite or forward new entries by rules. It reads articles aloud, syncs across web, desktop and mobile, and sends items to Obsidian, Readwise, Zotero and other tools.

It is AGPL-3.0, with about 39,100 stars and 158 contributors, at desktop v1.16.0 when scanned. The repository holds the apps; accounts, sync and the AI features run through Folo's hosted service.

  • Repository: github.com/RSSNext/Folo
  • Licence: AGPL-3.0 (GNU Affero General Public License v3.0)
  • Language: TypeScript. Stars: 39.1K. Forks: 2,136. Last push: Oct 20, 2026.
  • Scan: safe, Oct 22, 2026, commit 84692b5

Who it is for

Heavy readers who follow dozens of sources and want a daily digest instead of a wall of unread items, people moving off Feedly or Inoreader, and researchers who want AI summaries and translation of what they follow.

Getting started

1. Use it in the browser

open https://app.folo.is

2. macOS with Homebrew (community cask; Windows, Linux and mobile builds are on the releases page and app stores)

brew install --cask folo

Sign in, then import an OPML file from your old reader or search for feeds and RSSHub routes inside the app. Anonymous usage data is on by default and can be switched off in the app's settings.

Safety scan

We cloned RSSNext/Folo at commit 84692b5 on Oct 22, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.

  • No real secrets across 3,863 files and about 357,000 lines of TypeScript. The three hits are a Firebase web configuration key, which is public by design, the same kind of key in the Android build config, and the PEM header strings in a function that reads a signing key from the environment.
  • Analytics: the client includes a tracker with a PostHog adapter and Firebase configuration, and the sendAnonymousData setting defaults to on in the desktop and mobile apps. The hosts in the code are mostly Folo's own (api.folo.is, app.folo.is, ota.folo.is) plus the app stores.
  • 283 known advisories (10 critical) in the single pnpm-lock.yaml that covers the desktop, mobile, web and landing apps and all their build and test tooling. The criticals include Handlebars, shell-quote, tinypool and Next.js, which appears only as a peer dependency of UI and auth libraries, not as a server you run. The released apps are signed: Apple notarisation, SignPath for Windows, and GitHub artifact attestations.
  • The root postinstall script builds internal packages for people developing Folo; installing the apps does not run it.
  • 16 workflows, none using pull_request_target; only 1 of 33 third-party actions is pinned to a commit. Security policy, Dependabot, licence and contributing guide present; no CodeQL.

What the scanner counted

CheckResult
Secrets3 candidates found and read; see the notes above.
Suspicious codeNone found.
Install-time code2 npm lifecycle scripts. 1 installer script
Committed binariesNone.
CI workflows16 workflows. None use pull_request_target. 32 of 33 third-party actions pinned to a tag rather than a commit.
Network hosts40 distinct hosts referenced from source; most often github.com, ota.folo.is, api.folo.is, apps.apple.com. No URLs to bare IP addresses.
Known vulnerabilities283 advisories across 3,654 pinned packages: 10 critical, 150 high, 98 moderate, 25 low. pnpm-lock.yaml: 3,654 packages, 283 advisories.
Project hygieneHas security policy, automated dependency updates, licence file, contributing guide. Missing CodeQL.
OpenSSF ScorecardNot scored: the project is not in Scorecard's weekly index.

The raw findings

Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.

Secret candidates (3, redacted)
WhereRuleMatch
apps/mobile/build/google-services.json:23google-api-keyAIzaSy…7Fs (39 chars)
apps/ota/src/lib/code-signing.ts:95private-key-----B…--- (27 chars)
packages/internal/shared/src/env.common.ts:2google-api-keyAIzaSy…Lvo (39 chars)
npm lifecycle scripts (2)
  • package.json postinstall: pnpm run build:packages
  • package.json prepare: simple-git-hooks && corepack prepare
Installer scripts (1)
Worst known vulnerabilities (24 of 283)
AdvisorySeverityPackageSummary
GHSA-2w6w-674q-4c4qcriticalhandlebars@4.7.8Handlebars.js has JavaScript Injection via AST Type Confusion
GHSA-8r5x-fm3f-whwjcriticalhandlebars@4.7.8Handlebars: JavaScript Injection via AST Type Confusion in compile (bypass of CVE-2026-33937)
GHSA-p8wg-vrv2-v86fcriticalhandlebars@4.7.8Handlebars: JavaScript Injection via Own Property Check Bypass
GHSA-2xp9-vwfh-vxw4criticalnext@16.0.11Next.js: Unauthenticated Remote Code Execution in Image Optimization API when AVIF files are used
GHSA-p293-qw3h-jr36criticalnext@16.0.11Next.js: Unauthenticated Remote Code Execution on windows-hosted servers
GHSA-p6vx-979v-rg4ccriticalseroval@1.5.6Seroval: `fromJSON()` Promise thenable assimilation invokes plugin-produced callables (bypass of GHSA-mv8w-475r-vwqw)
GHSA-w7jw-789q-3m8pcriticalshell-quote@1.8.3shell-quote quote() does not escape newlines in object .op values
GHSA-23hp-3jrh-7fpwcriticaltar@6.2.1node-tar: Decompression/parse DoS via unlimited input
GHSA-5gmw-xhrv-c9v3criticaltinypool@2.1.0Tinypool: Prototype Pollution gadget in worker options leads to Remote Code Execution
GHSA-85c8-ppgw-ccprcriticaltinypool@2.1.0Tinypool: Prototype Pollution Gadget to RCE in run() options
GHSA-fv7c-fp4j-7gwphigh@babel/plugin-transform-modules-systemjs@7.29.0@babel/plugin-transform-modules-systemjs generates arbitrary code when compiling malicious input
GHSA-x8mw-p69m-v3mxhigh@fastify/busboy@2.1.1@fastify/busboy vulnerable to Denial of Service via prototype-named multipart part header
GHSA-m9gg-hp2v-232jhigh@grpc/grpc-js@1.9.16@grpc/grpc-js: In certain configurations, getAuthContext can return unauthorized certificates as though they were author…
GHSA-27p8-2357-5qqvhigh@xmldom/xmldom@0.8.11xmldom: DocType `name` Injection Bypasses requireWellFormed
GHSA-2v35-w6hq-6mfwhigh@xmldom/xmldom@0.8.11xmldom: Uncontrolled recursion in XML serialization leads to DoS
GHSA-4w3w-2rp5-g8jmhigh@xmldom/xmldom@0.8.11xmldom: Attribute name injection via setAttribute() bypasses requireWellFormed
GHSA-8344-3jmq-59r6high@xmldom/xmldom@0.8.11xmldom: Quadratic-time attribute deduplication
GHSA-93r5-fhx6-vmg9high@xmldom/xmldom@0.8.11xmldom: Quadratic-time parsing via the malformed-input recovery path - `parseElementStartPart` re-scan and `normalize()`…
GHSA-965w-775f-mr7ghigh@xmldom/xmldom@0.8.11xmldom: Quadratic-memory consumption
GHSA-c7q8-3ch8-vqpvhigh@xmldom/xmldom@0.8.11xmldom: Processing Instruction Target Injection Bypasses requireWellFormed
GHSA-f6ww-3ggp-fr8hhigh@xmldom/xmldom@0.8.11xmldom has XML injection through unvalidated DocumentType serialization
GHSA-j759-j44w-7fr8high@xmldom/xmldom@0.8.11xmldom has XML node injection through unvalidated comment serialization
GHSA-w2rr-34g9-rvrjhigh@xmldom/xmldom@0.8.11xmldom: Element name injection via createElement() bypasses requireWellFormed
GHSA-wh4c-j3r5-mjhphigh@xmldom/xmldom@0.8.11xmldom: XML injection via unsafe CDATA serialization allows attacker-controlled markup insertion

By the numbers

Stars39.1K
Forks2,136
Contributors158
Commits7,698
Open issues120
Open pull requests1
Releases123
Latest releasedesktop/v1.16.0
LicenceAGPL-3.0
Main languageTypeScript
Project age2 years
Last pushOct 20, 2026
Tracked files3,863
Lines of code357.4K
Checkout size21 MB

Lines by language: TypeScript 265.6K, JSON 62.4K, Markdown 12.5K, Swift 5,032, YAML 3,669, JavaScript 3,630.

Questions

Is Folo free?

Folo is free to download and use, and its code is open source under the AGPL-3.0. The AI features run through Folo's service, where you can pick a model or bring your own API key.

Can I self-host Folo?

Not fully. This repository contains the web, desktop and mobile apps, but accounts, sync and AI run on Folo's hosted backend at api.folo.is. If you need a reader that runs entirely on your own server, a self-hosted reader such as FreshRSS or Miniflux is the better fit.

How do I move from Feedly or Inoreader to Folo?

Export your subscriptions as an OPML file from your current reader, then import it in Folo's settings. Your feeds and folders come across; read status and saved items from the old service do not.


This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.