feeds.fun logo

feeds.fun

News reader with tags, scoring, and LLM

Website GitHub

What is it?

What it is

Feeds Fun is an open-source, self-hosted news reader that uses AI for automatic tag assignment and allows users to create custom rules for filtering and sorting news.

Why it exists

Created to address the lack of a customizable, AI-powered open-source news reader that meets specific user needs, offering self-hosting and advanced tagging capabilities.

Who should use it

Tech-savvy users, developers, self-hosters, and individuals seeking AI-powered news filtering with customizable tagging rules.

Who should avoid it

Non-technical users, those preferring fully managed hosted solutions, or users without need for advanced tagging/AI features.

How it works

A quick walkthrough in plain English

How feeds.fun works

Step 1 of 3

You interact with it

Open feeds.fun, send a request, or connect it to your stack.

Features

Multi-/single-user support
Feed management
Automatic tag assignment via LLM and rule-based processors
Tag-based scoring and filtering
Customizable sorting (score, date, etc.)
Read‑status tracking
Support for major feed sources (Reddit, GitHub, YouTube, ArXiv, Hacker News)
Plugin architecture for new sources
Docker‑based self‑hosted deployment
Python backend (ffun) and JavaScript frontend (feeds-fun)
Configurable via environment variables and TOML files
Token estimation for LLM chunking
Tag normalizers for consistency

Advantages

  • Highly customizable tagging and filtering workflow
  • AI‑powered tag generation with OpenAI/Gemini or self‑hosted models
  • Open‑source and self‑hosted for privacy
  • Docker images simplify deployment
  • Extensible via plugins and custom processors
  • Supports both single‑user and multi‑user setups
  • Active development with clear roadmap
  • Rich configuration options for advanced users
  • Built‑in database migration tooling
  • Clear separation of API and workers for scalability

Disadvantages

  • Requires external LLM API key for full functionality
  • Complex configuration can be daunting for beginners
  • No built‑in database backup strategy mentioned
  • License is NOASSERTION, may raise compatibility concerns
  • LLM usage may incur costs
  • Requires Docker or Python environment setup
  • Tag normalizers still under active development, may need tweaking
  • Limited out‑of‑the‑box integrations beyond listed sources
  • No native mobile app, only web interface
  • Documentation heavy but may need more examples for advanced use

Installation

docker

Build some docker images: ./bin/build-dev-containers.sh

native

Backend:\npip install ffun\npython -m spacy download en_core_web_lg\nffun migrate\nuvicorn ffun.application.application:app --host 0.0.0.0 --port 8000 --workers 1\nffun workers --librarian --loader\n\nFrontend:\nnpm init -y\nnpm install feeds-fun\nnpm install --prefix ./node_modules/feeds-fun\nnpm run build-only --prefix ./node_modules/feeds-fun\ncp -r ./node_modules/feeds-fun/dist ./wherever-you-place-static-content

compose

Start the API server and frontend:\n# single-user mode\ndocker compose --profile single-user up -d\n\n# multi-user mode\ndocker compose --profile multi-user up -d

FAQ

How do I set up Feeds Fun locally for a single user?

Clone the repository, run `./bin/build-dev-containers.sh` to build Docker images, then start the services with `docker compose --profile single-user up -d`. The site will be available at http://feeds.fun.local/. After the containers are up, start the workers with `./bin/backend-utils.sh poetry run ffun workers --librarian --loader`. The frontend will be served automatically by the Docker setup.

What is the difference between single‑user and multi‑user mode and how do I switch between them?

Single‑user mode runs with a fixed identity provider and user ID, defined by the environment variables `FFUN_AUTH_FORCE_EXTERNAL_USER_ID` and `FFUN_AUTH_FORCE_EXTERNAL_IDENTITY_PROVIDER_ID`. Multi‑user mode requires a more complex setup, including an external identity provider (e.g., Keycloak) and different Docker profiles. To switch, stop the current services, then run `docker compose --profile multi-user up -d` for multi‑user mode, or `docker compose --profile single-user up -d` for single‑user mode.

How can I enable LLM‑based tag generation in Feeds Fun?

Add the `llm_general` processor to your tag processor configuration (usually `tag_processors.toml`). Ensure you have an OpenAI or Gemini API key set in the environment (`FFUN_OPENAI_API_KEY` or `FFUN_GOOGLE_GEMINI_API_KEY`). The processor will then use the LLM to generate tags for news entries. You can also configure custom models and token estimation via `FFUN_LLMS_FRAMEWORK_MODELS_CONFIG`.

Where do I configure environment variables for the backend and frontend?

Backend variables follow the pattern `FFUN_<component>_<option>` (or `FFUN_<component>_<option>__<suboption>`). Frontend variables use `VITE_FFUN_<component>_<option>` and must be set at build time. For example, to enable Sentry in the backend, set `FFUN_ENABLE_SENTRY="True"`. For the frontend, set `VITE_FFUN_ENABLE_SENTRY="True"` before running the build command.

How do I keep my database clean from old news entries?

Run the cleanup command periodically via cron: `ffun cleaner clean`. This will delete old entries from the database. It is recommended to add this to your cron tasks to prevent the database from growing indefinitely.

Loading documentation…
View on GitHub

Featured in Videos

YouTube tutorials and walkthroughs for feeds.fun

Alternatives

Similar projects ranked by category, topics, and text overlap.

Compare
feeds.fun | MushyBook