shouldiselfhost?they tell you if you can — we tell you if you should
THE DECISION LAYER FOR SELF-HOSTING100 APPS UNDER COVERAGEPROTOCOL v1NO VENDOR HAS EVER PAID FOR A RATING
§
READING-BOOKMARKS
Instapaper logo

Should I self-host Instapaper?

$5.99/mo · Premium · alternative: wallabag
RATING
YES
OUTLOOK
NOT ASSIGNED
RATIONALE

wallabag archives the full page — not a bookmark, the page — and syncs to its mobile apps and Kobo/Kindle. The $72/yr was for exactly this.

WHAT YOU LOSE
01

Instapaper's typography polish and tilt-scrolling niceties

02

Their parser team chasing weird sites — wallabag's extractor occasionally needs a config nudge

WHAT YOU'RE PAYING FOR

save articles to read later · full-text archive that survives dead links · mobile/offline reading · tags & search

Self-Hosting Facts
1 app per panel · Instapaper
Assumes 1 seat on 1 always-on box you already run
Amount per month% of sub *
Subscription$5.99
VPS share0.508%
Storage + backup0.000%
Your hours · 10 min @ $203.3356%
Self-hosted all-in3.8364%
Effective markup1.6×
Setup · 40 min measured$13.33 once
Break-even6.2 months
VERDICT
YES
OUTLOOK
NOT ASSIGNED

* Percent of the subscription price. Your time is priced at the slider's rate — $0/h ("my homelab time is free and I love it") is a legitimate position. Every number is derived from the record, never hand-written. Price source, checked 2026-08-06.

Runs comfortably on a Raspberry Pi.

01
ALTERNATIVES
Ranked alternatives
01wallabag logo
wallabagSaves the readable article, not the link, and hands it to the phone or e-reader you actually read on.
wallabag/wallabag · ★ 12,891 · 46d
wallabag running from the boot-verified compose file
wallabag, running from the compose file on this page — screenshot from our verified instance, not marketing material.
02
EVIDENCE
PROTOCOL
v1
VERIFIED BY
zernonia
REVIEWED
10 AUG 2026
SETUP MEASURED
40 MIN
AI ASSISTANT
CLAUDE-CODE · STATED
WHAT BROKE
01

The image's nginx config hard-binds [::]:80 and crash-loops on kernels booted with ipv6.disable=1 (our verification microVM) — this pair's compose boot is certified by the CI runner

02

First boot runs Symfony install + migrations and nginx answers nothing for minutes — a healthcheck without a generous start_period declares it dead while it's warming up

03

SQLite default is fine for one reader; switch to the postgres envs before inviting the household

THE TESTED COMPOSE FILE — CI-BOOTED WEEKLY
# wallabag — read-it-later with full-page archiving (replaces Instapaper)
services:
  wallabag:
    image: wallabag/wallabag:latest
    container_name: wallabag
    restart: unless-stopped
    environment:
      SYMFONY__ENV__DOMAIN_NAME: http://localhost:8094
      # SQLite default keeps it one container; use the postgres envs for real multi-user
    ports:
      - "8094:80"
    volumes:
      - wallabag-data:/var/www/wallabag/data
      - wallabag-images:/var/www/wallabag/web/assets/images
    healthcheck:
      # First boot runs Symfony install + migrations before nginx answers — minutes, not seconds.
      test: ["CMD-SHELL", "curl -sf http://localhost/api/info || curl -sf http://localhost/login || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 60
      start_period: 180s

volumes:
  wallabag-data:
  wallabag-images:

Want a guided install instead? caniselfhostit.com/instapaper has AI-agent prompts that assume a bare machine — that's their half of the stool, and it's good.

FULL TIMED LOG
# Timed setup log: Instapaper → wallabag

**Protocol:** v1 · **Verified by:** zernonia · **Date:** 2026-08-10
**Assistant:** claude-code · **Environment:** containerized runner, 2 vCPU class, Docker 29.3 / Compose v5.1

## Timeline

| Step | Time |
|---|---|
| Read upstream docs, draft compose with healthcheck | ~13 min |
| Boot in our verification environment blocked (ghcr.io-only images, model download, or the microVM's ipv6.disable=1 kernel) — **compose boot is certified by the CI runner** (`compose-check` gate, per-PR + weekly) | — |
| Endpoint-level workflow check (login/health/API serve) + re-run from clean volumes | ~13 min |
| **Total: ~40 min** | |

Boot and endpoint checks are machine-verified; `setup_min` is the wall-clock total for this
session including authoring, diagnosis and re-runs. Endpoint-level ≠ full human UI workflow —
dispute anything that doesn't reproduce (CONTRIBUTING.md).

## What broke

- The image's nginx config hard-binds [::]:80 and crash-loops on kernels booted with ipv6.disable=1 (our verification microVM) — this pair's compose boot is certified by the CI runner
- First boot runs Symfony install + migrations and nginx answers nothing for minutes — a healthcheck without a generous start_period declares it dead while it's warming up
- SQLite default is fine for one reader; switch to the postgres envs before inviting the household

## Verdict-relevant notes

- API + apps work against self-hosted out of the box (server URL in the app settings).
03
HISTORY
10 AUG 2026UNRATED → YESInitial verdict: wallabag archives the full page.