Skip to content

cedricbonhomme/newspipe

Repository files navigation

📰 Newspipe

A self-hosted web news aggregator — own your feeds, your data, and your reading.

License: AGPL v3 Python Version Last commit GitHub Sponsors

Built with Flask · asyncio · SQLAlchemy

Newspipe Home page


✨ Features

  • 👥 Multi-user — a single Newspipe instance serves many users
  • 🔌 API — manage feeds programmatically and plug in your own crawler
  • 📦 Data liberation — export and import your whole account as JSON
  • 🔁 OPML — import and export your feeds with OPML files
  • 🔍 Search & favorites — find and bookmark the articles that matter
  • 💤 Inactive feed detection — keep your feed list clean
  • 🔖 Bookmarks — full bookmark management, with import from Pinboard
  • 📝 Notes — write notes on articles and review them all on a dedicated page
  • 🌍 Internationalization — available in English, French, and German
  • 🔐 LDAP — optional LDAP authentication (see the example config)
  • 🌗 Themes — light and dark interfaces out of the box

🚀 Quick start

Assuming you already have git, poetry, npm, and Python >= 3.12 installed:

git clone https://github.com/cedricbonhomme/newspipe
cd newspipe/
npm ci
poetry install
poetry shell
pybabel compile -d newspipe/translations
export NEWSPIPE_CONFIG=sqlite.py
flask db_init
flask db stamp head
flask create_admin --nickname <nickname> --password <password>
flask run --debug

Then open http://127.0.0.1:5000 and sign in. 🎉

🐘 Using PostgreSQL

Customize the provided example configuration file (instance/config.py):

sudo apt-get install postgresql
cp instance/config.py instance/postgresql.py
vim instance/postgresql.py  # customize it
export NEWSPIPE_CONFIG=postgresql.py
flask db_create
flask db_init

For production, serve Newspipe with Gunicorn or mod_wsgi.

🔄 Updates and migrations

cd newspipe/
git pull origin master
poetry install
poetry run flask db upgrade
poetry run pybabel compile -d newspipe/translations

⏱️ Retrieving feeds automatically

A dedicated Flask command runs the RSS/Atom feed importer. Schedule it with cron, for example every three hours:

0 */3 * * * poetry run flask fetch_asyncio

When using cron it is usually best to be explicit about the command location:

0 */3 * * * FLASK_APP=app.py /home/cedric/.cache/pypoetry/virtualenvs/newspipe-19mdZ4UL-py3.12/bin/flask fetch_asyncio

📄 License

Newspipe is released under the GNU Affero General Public License v3.

💛 Donations

If you enjoy Newspipe, you can support its development:

GitHub Sponsors

…or with Bitcoin: bc1q56u6sj7cvlwu58v5lemljcvkh7v2gc3tv8mj0e

Thank you! 🙏

📬 Contact

Made by Cédric Bonhomme.

About

A self-hosted news reader.

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Contributors