A simple way of exposing unread instapaper articles as an OPDS feed, you can use this with any OPDS reader, like an Xteink with crosspoint/CrossInk.
  • Python 78%
  • CSS 11.1%
  • Dockerfile 10.9%
Find a file
2026-04-25 00:12:29 -07:00
.env.example Create .env.example 2026-04-19 11:23:07 -07:00
.gitignore Create .gitignore 2026-04-19 11:24:04 -07:00
compose.yaml switch to use .env file 2026-04-19 11:23:31 -07:00
Dockerfile switch to requirements.txt using version 2026-04-19 11:21:48 -07:00
README.md Update README.md 2026-04-25 00:12:29 -07:00
requirements.txt Update requirements.txt 2026-04-19 11:21:11 -07:00
style.css Update style.css 2026-04-21 20:54:20 -07:00
sync.py html fix 3 2026-04-20 12:20:43 -07:00

Prerequisites

  • Docker Compose
  • Instapaper API key - You need to apply for one here

These instructions assume you're installing on an Ubuntu VPS. Modify as needed for other setups.

This project was coded with AI.

Install

1. Clone and enter the repo

git clone https://github.com/naivchan/instapaper-to-opds.git
cd instapaper-to-opds

2. Copy the environment template and populate it with your Instapaper API credentials.

cp .env.example .env
nano .env

You can also edit the existing example and save as .env

3. Start the web server container

docker compose up -d

4. Run the initial sync to populate the feed

docker compose run --rm instapaper-downloader

5. Setup the automation for the tool to refresh

Open the Crontab editor

# Open the Crontab editor
crontab -e

Add the following line to the bottom of the file with your directory path. This example runs the sync every 30 minutes:

# Example Crontab for running instapaper-downloader every 30 minutes
*/30 * * * * cd /path/to/your/repo && /usr/bin/docker compose run --rm instapaper-downloader >> sync.log 2>&1

6. Access

Your OPDS catalog is now live at: http://<your-vps-ip>:8086