- Python 56.2%
- JavaScript 42.8%
- Makefile 0.7%
- HTML 0.2%
| .forgejo/workflows | ||
| Dockerfiles | ||
| example_conf | ||
| jarr | ||
| jsclient | ||
| migrations | ||
| tests | ||
| .gitignore | ||
| .gitmodules | ||
| .mypy.ini | ||
| CONTRIBUTING.md | ||
| COPYING | ||
| ep_celery.py | ||
| INSTALL.md | ||
| Makefile | ||
| Pipfile | ||
| Pipfile.lock | ||
| pyproject.toml | ||
| README.md | ||
| SECURITY.md | ||
| wsgi.py | ||
JARR - Just Another RSS Reader
JARR is a self-hostable, web-based news aggregator and reader.
Its main feature is article clustering: JARR groups related articles from different feeds together, either by matching links or by computing content similarity using TF-IDF (Term Frequency-Inverse Document Frequency). If several of your feeds cover the same story, JARR will show it once.
Official instance
A public instance is available:
- Application: app.jarr.info
- API (Swagger UI): api.jarr.info
Features
- Article clustering across feeds using link matching and TF-IDF similarity
- Multiple feed types: RSS/Atom, JSON Feed, Reddit, Tumblr, RSS-Bridge, and custom scrapers
- OPML import/export for easy migration from other readers
- OAuth login via Google, Twitter, Facebook, and LinuxFr
- Mobile-friendly React frontend with swipe gestures
- Read/liked/unread filtering with per-feed and per-category unread counts
- Background crawling via Celery workers with configurable scheduling
- REST API with auto-generated Swagger documentation
- Dark mode with automatic OS preference detection
Tech stack
| Layer | Technology |
|---|---|
| Backend | Python 3.13, Flask, Flask-RESTX, SQLAlchemy 2 |
| Frontend | React 18, Redux Toolkit, MUI v6 |
| Database | PostgreSQL 15+ |
| Task queue | Celery 5 with RabbitMQ |
| Cache | Redis |
| Auth | JWT (access + refresh tokens) |
| Containers | Docker, Docker Compose |
Installation
See INSTALL.md for detailed setup instructions (Docker-based or local development).
Contributing and security
See CONTRIBUTING.md for development setup, architecture, testing, and security practices.
See SECURITY.md for security practices and how to report vulnerabilities.
Release
Bump the version, commit, and tag in one step:
make release
Docker tags
| Trigger | Images | Tags |
|---|---|---|
Push to master |
jarr-{base,server,worker,front} |
:latest |
Semver tag (e.g. 1.2.3) |
jarr-{base,server,worker,front} |
:v1, :v1.2, :v1.2.3 |
| Other tag | jarr-{base,server,worker,front} |
:{tag} |
CI/CD
The Forgejo Actions workflow (.forgejo/workflows/ci.yml) runs tests and pushes multi-arch Docker images on every push to master or any tag.
Repository configuration
| Name | Type | Description |
|---|---|---|
DOCKER_REGISTRY |
Variable | Registry URL (e.g. registry.example.com/user) |
PUBLIC_URL |
Variable | Frontend public URL (e.g. https://app.jarr.info) |
REACT_APP_API_URL |
Variable | API URL for frontend (e.g. https://api.jarr.info) |
DOCKER_USERNAME |
Secret | Registry username |
DOCKER_PASSWORD |
Secret | Registry password/token |
License
JARR is licensed under the GNU Affero General Public License v3 (AGPL-3.0).
If you run a modified version of JARR as a network service, you must make the modified source code available to your users.