# π° Newspipe
**A self-hosted web news aggregator β own your feeds, your data, and your reading.**
[](https://www.gnu.org/licenses/agpl-3.0.html)
[](https://www.python.org)

[](https://github.com/cedricbonhomme/newspipe/commits/master)
[](https://github.com/sponsors/cedricbonhomme)
Built with [Flask](http://flask.pocoo.org) Β· [asyncio](https://www.python.org/dev/peps/pep-3156/) Β· [SQLAlchemy](http://www.sqlalchemy.org)

---
## β¨ 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
- π **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.10` installed:
```bash
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 create_admin --nickname --password
flask run --debug
```
Then open and sign in. π
### π Using PostgreSQL
Customize the provided example configuration file (`instance/config.py`):
```bash
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](https://gunicorn.org) or `mod_wsgi`.
### π Updates and migrations
```bash
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:
```bash
0 */3 * * * poetry run flask fetch_asyncio
```
When using cron it is usually best to be explicit about the command location:
```bash
0 */3 * * * FLASK_APP=app.py /home/cedric/.cache/pypoetry/virtualenvs/newspipe-19mdZ4UL-py3.12/bin/flask fetch_asyncio
```
## π License
[Newspipe](https://github.com/cedricbonhomme/newspipe) is released under the
[GNU Affero General Public License v3](https://www.gnu.org/licenses/agpl-3.0.html).
## π Donations
If you enjoy Newspipe, you can support its development:
[](https://github.com/sponsors/cedricbonhomme)
β¦or with Bitcoin: `bc1q56u6sj7cvlwu58v5lemljcvkh7v2gc3tv8mj0e`
Thank you! π
## π¬ Contact
Made by [CΓ©dric Bonhomme](https://www.cedricbonhomme.org).