wallabag

Self-hosted read-it-later app that saves clean, ad-free articles from any webpage for distraction-free reading across all your devices.

12.8Kstars
880forks
MIT License
PHP

wallabag is an open-source, self-hostable application for saving web pages and reading them later without ads, pop-ups, or distractions. It extracts the core article content from any URL using Graby and php-readability, delivering a clean reading experience on any device — desktop, mobile, or e-reader.

Built on PHP and Symfony, wallabag supports deployment on your own server via Docker or manual installation, or through the official wallabag.it managed hosting service. A comprehensive REST API, browser extensions for Chrome and Firefox, and native mobile apps for Android and iOS ensure articles are always accessible wherever you are.

The platform integrates with the wider reading ecosystem: RSS readers like Miniflux and FreshRSS can push articles directly to your library, while migration tools let you import existing saves from Pocket, Instapaper, Readability, and Pinboard. E-reader support for Kobo, Kindle, and PocketBook rounds out the offline reading experience.

With over a decade of active development, 12,000+ GitHub stars, and a multilingual interface translated via Weblate, wallabag is a mature, reliable alternative to proprietary read-it-later services for privacy-conscious users and self-hosting enthusiasts.

What You Get

  • Article Extraction Engine - Uses Graby and php-readability with a catalog of thousands of per-site extraction rules to strip ads, pop-ups, and navigation from any webpage, delivering clean readable content.
  • Cross-Platform Reading - Save from your browser and read on Android, iOS, Kobo, Kindle, or PocketBook devices with synchronized reading state and progress tracking across all platforms.
  • Browser Extension (Wallabagger) - One-click saving from Chrome and Firefox with automatic content extraction, tag assignment, and preview support built directly into the extension.
  • Full REST API - Comprehensive API for programmatic access to your article library, enabling integration with automation tools, custom readers, and third-party apps.
  • Data Migration Support - Import saved articles from Pocket (OAuth or CSV), Readability, Instapaper, Pinboard, Shaarli, Omnivore, and existing wallabag instances with full metadata preservation.
  • E-Reader Export - Export your saved articles as EPUB, CSV, or PDF files for offline reading on Kobo, Kindle, or any compatible e-reader without requiring network access.
  • Rule-Based Auto-Tagging - Define custom tagging rules using a domain-specific expression language to automatically categorize articles as they are saved, based on URL patterns, language, or content attributes.
  • Async Queue Processing - Optional Redis or RabbitMQ integration for background import processing, keeping the UI responsive when importing large collections of saved articles.

Common Use Cases

  • Replacing proprietary read-it-later services - A privacy-conscious developer migrates their Pocket library to a self-hosted wallabag instance to retain full ownership of saved articles and avoid data tracking.
  • RSS-to-read-later workflow - A journalist connects FreshRSS to wallabag so articles marked for follow-up are automatically saved to their library for focused reading during commutes.
  • E-reader article pipeline - A researcher saves long-form articles from academic sources and syncs them to their Kobo device as EPUBs for comfortable offline reading away from screens.
  • Personal knowledge archive - A developer uses wallabag’s tagging and search features to build a searchable library of tutorials, documentation, and blog posts for future reference.
  • Team reading list with self-hosted control - A small team hosts wallabag internally to share and annotate articles relevant to ongoing projects without relying on third-party services.
  • Automated content capture - A power user writes scripts against the wallabag REST API to automatically save articles from newsletters, IFTTT triggers, or custom workflows.

Under The Hood

Architecture wallabag implements a layered Symfony architecture with clean separation between controllers, services, entities, and repositories. The core abstraction is the Entry entity flowing through a ContentProxy service that delegates content fetching to Graby, tag assignment to a RuleBasedTagger, and origin filtering to a RuleBasedIgnoreOriginProcessor. Import workflows are decoupled from the HTTP request cycle via an optional producer-consumer pattern: controllers can hand off batches to Redis or RabbitMQ queues, with dedicated consumer processes handling persistence asynchronously. Dependency injection is pervasive and constructor-based throughout, making the dependency graph explicit and testable. A SiteConfig subsystem provides per-domain extraction overrides that take precedence over Graby defaults for thousands of known sites. The overall design is a well-modularized monolith where each concern lives in its own namespace with clear contracts, making the system extensible without modifying core logic.

Tech Stack PHP 8.2 and Symfony form the backbone, with Doctrine ORM managing SQLite, MySQL/MariaDB, or PostgreSQL persistence through auto-detected adapters. Content extraction relies on Graby — a feed-focused HTTP fetcher with site-config support — and php-readability, a PHP port of Mozilla Readability. The REST API layer uses FOSRestBundle and NelmioApiDocBundle for OpenAPI documentation. Authentication is handled through Symfony Security with optional Two-Factor Authentication via scheb/2fa. The frontend uses Webpack Encore with Sass, PostCSS, and Stimulus for lightweight progressive enhancement, backed by MaterializeCSS for UI components. Background queueing is optional and supports Redis via Predis or RabbitMQ via the OldSound bundle. PHPUnit covers unit, integration, and functional test suites, with PHPStan for static analysis and PHP-CS-Fixer for code style enforcement.

Code Quality wallabag maintains comprehensive test coverage across unit, integration, and functional suites comprising over a hundred test files. PHPStan is configured with Symfony and Doctrine extensions at a strict level, with a baseline file tracking known issues under active resolution. PHP-CS-Fixer and Rector automate code style enforcement and PHP version upgrade migrations respectively. Constructor injection with promoted properties is used consistently in newer code, and the codebase shows a clear modernization trajectory — older docblock annotations are being replaced by PHP 8 attributes through automated tooling. CI runs on GitHub Actions with coverage reporting via Codecov. Error handling follows Symfony conventions with form validation, HTTP exceptions, and PSR-3 logging throughout.

What Makes It Unique wallabag’s distinguishing technical choices cluster around content extraction fidelity and flexibility. Its pluggable SiteConfig system applies per-domain extraction overrides drawn from the ftr-site-config catalog — a community-maintained database covering thousands of sites — going significantly beyond what generic readability algorithms can achieve. A rule-based tagging engine powered by the RulerZ expression language lets users define their own auto-tagging rules with domain-specific operators, moving categorization logic into user-configurable space rather than hardcoded heuristics. The dual-mode import system handles both live API imports with OAuth token flows and offline file imports in CSV, HTML, and JSON formats through a unified interface, with optional async queueing for large collections. Native e-reader export to EPUB, CSV, and PDF — combined with per-entry public URL sharing via unique tokens — adds practical functionality that most self-hosted alternatives lack.

Self-Hosting

wallabag is released under the MIT License, one of the most permissive open-source licenses available. This means you can use it commercially, modify the source code, distribute your own modified versions, and integrate it into proprietary systems without any copyleft obligations. There are no restrictions on how many users, articles, or installations you run — the license places no limits on the operational scale of your self-hosted deployment.

Running wallabag yourself requires a PHP 8.2+ environment with a web server (Apache or Nginx), a supported database (SQLite for single-user or low-traffic use, MySQL/MariaDB or PostgreSQL for multi-user deployments), and optionally Redis or RabbitMQ for background import processing. Docker Compose is the recommended path for getting started quickly, but bare-metal installation with Composer is well-documented. You are responsible for server provisioning, SSL certificates, database backups, security updates, and keeping wallabag itself up to date as new releases arrive. The project releases roughly every few months, and upgrades involve running Doctrine migrations — generally straightforward but worth testing before applying to production.

The main trade-off versus the official wallabag.it hosted service (priced at €11/year) is operational responsibility. wallabag.it includes daily backups, automatic application updates, managed infrastructure, and email support — none of which come with self-hosting. There is no enterprise tier, SLA, or high-availability configuration officially supported; self-hosters who need HA must architect that themselves using standard PHP/database clustering approaches. Community support is available via a Matrix chat room and GitHub issues, but response times and depth of assistance vary.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack

No spam. Unsubscribe anytime.

Join 750+ subscribers
No spam. Unsubscribe anytime.

Search