Omnivore
Self-hosted read-it-later platform with highlights, newsletters, PDFs, and seamless Obsidian and Logseq integration.
Omnivore is a fully open-source, self-hosted read-it-later application built for people who take their reading seriously. It lets you save articles, newsletters, and PDFs in a unified library, annotate them with highlights and notes, and access everything offline — all without depending on any third-party cloud service. The hosted version was retired in November 2024, making self-hosting the only way to run Omnivore, which suits privacy-conscious users perfectly.
The application spans native iOS and Android apps, a Next.js web interface, browser extensions for Chrome, Safari, Firefox, and Edge, and integrations with Logseq and Obsidian for knowledge management workflows. Articles can be saved by clicking the browser extension, forwarding an email (with dedicated Substack and newsletter support), subscribing to RSS feeds, or importing from other read-it-later services.
Under the hood Omnivore is a TypeScript monorepo where a GraphQL API, a Puppeteer-based content-fetch microservice, an IMAP mail watcher, an RSS handler, and an integration handler all run as distinct services orchestrated by Docker Compose. PostgreSQL with pgvector powers both structured storage and vector-based semantic search, while Redis and BullMQ manage the asynchronous content ingestion queue.
Every component is open source and designed to run on commodity hardware. A complete deployment requires roughly four to six Docker containers, and the project provides ready-made Compose files, an Nginx reverse proxy config, Helm charts for Kubernetes, and a Podman Compose alternative, making it accessible to both home-lab users and teams with existing container infrastructure.
What You Get
- Browser extensions for all major browsers - Save any web page to your library in one click using extensions for Chrome, Safari, Firefox, and Edge, with Readability-based content extraction that strips ads and clutter.
- Full-text and semantic search - Search your entire library including highlights and notes using both keyword full-text search and pgvector-powered semantic search for finding related content by meaning.
- Highlighting and notes - Annotate saved articles with color-coded highlights and inline notes, then export or sync those annotations to Obsidian or Logseq automatically.
- Newsletter saving via email - Forward newsletters directly to your personal Omnivore address, with dedicated handlers for Substack, Beehiiv, Ghost, Morning Brew, Bloomberg, and dozens of other senders.
- PDF support with annotations - Read and annotate PDF files natively in the browser using Mozilla PDF.js, with highlights synced to your annotation layer.
- Native iOS and Android apps - Read and annotate on mobile with offline sync, automatic reading position tracking, text-to-speech on iOS, and a progressive web app fallback for Android.
- RSS feed subscriptions - Subscribe to RSS and Atom feeds inside Omnivore and have new entries saved to your library automatically through the built-in rss-handler service.
- Logseq and Obsidian plugins - Sync saved articles and highlights into your personal knowledge graph with official plugins for both tools, supporting bidirectional link creation.
- Labels and filters - Organize your library with custom labels (tags), saved filters, and a rule engine that auto-labels incoming content based on sender, URL patterns, or keywords.
- Self-hosted deployment via Docker - Deploy the complete stack — web, API, content-fetch, PostgreSQL, Redis, and Minio — on your own server with provided Docker Compose files, Helm charts, and a step-by-step self-hosting guide.
Common Use Cases
- Building a personal research archive - A researcher saves academic papers via the browser extension and emails PDFs to their Omnivore address, highlights key passages, then uses the Obsidian plugin to pull annotations into their literature notes automatically.
- Consuming newsletters without inbox clutter - A product manager subscribes to a dozen Substack and Beehiiv newsletters, forwards them to Omnivore, and reads them in a clean distraction-free interface during a morning reading session on their iPhone.
- Maintaining a developer knowledge base - A software engineer saves technical blog posts and documentation pages throughout the week, applies labels by topic, and syncs highlights to Logseq where they become linked nodes in a connected knowledge graph.
- Offline commute reading - A daily commuter saves articles and long-form essays each morning, reads them with text-to-speech on the iOS app during the subway ride, and resumes reading at the exact position when they reach a desktop later in the day.
- Running a team reading list - A small editorial team self-hosts Omnivore on a shared server, saves and labels articles relevant to upcoming content pieces, and shares highlights via the API to a Notion workspace using the built-in integration.
Under The Hood
Architecture Omnivore is structured as a TypeScript monorepo with clearly separated service packages that follow a responsibility-driven decomposition. The API package implements a layered pattern — GraphQL resolvers delegate to domain service functions, which in turn interact with TypeORM repositories, keeping data access decoupled from business logic throughout. Content ingestion is event-driven: article saves are enqueued via BullMQ backed by Redis, and a queue manager fans out work to specialized handler packages for web fetching, RSS, email, integrations, and text-to-speech. This asynchronous pipeline decouples heavy Puppeteer-driven web crawling from the synchronous API response path. The Next.js frontend integrates with the API through code-generated GraphQL clients, and the native mobile apps use equivalent codegen tooling (Swift GraphQL and Apollo) so all three surfaces share a single schema contract. Docker Compose orchestrates the full stack with a PostgreSQL primary-replica pair, Redis, and Minio, while Helm charts cover Kubernetes deployments.
Tech Stack The backend API runs on Node.js with TypeScript and Apollo GraphQL using a schema-first approach, with TypeORM managing PostgreSQL access and pgvector extensions enabling vector embeddings for semantic search via LangChain integrations with Anthropic and OpenAI models. The web frontend is Next.js with Stitches for CSS-in-JS styling, Radix UI primitives for accessible components, SWR for client-side data fetching, and PSPDFKit for PDF rendering. Content extraction uses Puppeteer with Chromium for headless rendering and Mozilla Readability for article parsing. The queue system relies on BullMQ with Redis. Object storage is handled by Minio (self-hosted S3-compatible) or Google Cloud Storage with a switchable storage adapter. Native iOS uses Swift with Swift GraphQL codegen, and Android uses Kotlin with Jetpack Compose and Apollo GraphQL. GitHub Actions drives CI for builds and Docker image publishing.
Code Quality The codebase demonstrates solid TypeScript discipline, with strict per-package tsconfig settings and GraphQL codegen enforcing end-to-end type safety from schema through resolver to client query. Test coverage is meaningful in the content-handling layer — newsletter handler tests use Mocha and Chai with real fixture files and properly assert extraction behavior across dozens of sender-specific handlers. Coverage thins out in the API and integration layers, where some tests function more as data stubs than behavioral verification. Error handling is functional but inconsistent across packages; services catch and log errors without a shared structured error hierarchy, making distributed tracing and failure triage harder than it could be. ESLint is configured per package, and CI validates builds and Docker images on pull requests, providing a reliable baseline of quality gates.
What Makes It Unique Omnivore’s most technically distinctive capability is combining traditional full-text search with pgvector-powered semantic search in a self-hosted deployment, enabling AI-generated digest feeds and content discovery without external cloud APIs. The content ingestion pipeline supports an unusually broad range of ingest paths — web URLs via Puppeteer, email newsletters via IMAP watching with per-sender handlers for over twenty newsletter platforms, RSS and Atom feeds, YouTube transcripts, and direct email forwarding — all within a single cohesive library. The cross-platform architecture achieves schema-level consistency across web, iOS, and Android by running GraphQL codegen for all three clients, eliminating API contract drift between surfaces. The rule engine for auto-labeling and folder assignment is a rare feature among open-source read-it-later tools, enabling workflow automation that usually requires third-party tools like Zapier.
Self-Hosting
Omnivore is released under the GNU Affero General Public License version 3 (AGPL-3.0). This means you can run it privately, modify the source, and redistribute your changes, but any modified version you run as a network service must also be made available as open source under the same license. For most self-hosters — individuals, teams, or organizations running Omnivore internally without distributing it to third parties — the AGPL imposes no meaningful restriction beyond the copyleft obligation on the server-side code itself. There are no commercial use restrictions, no user limits, and no proprietary modules gating functionality.
Running Omnivore yourself requires orchestrating six to eight Docker containers: a PostgreSQL primary and replica (with pgvector), Redis, Minio for object storage, the Node.js API, the Next.js web frontend, and the Puppeteer-based content-fetch service. Optionally you can add the IMAP mail watcher for email newsletter ingest and the RSS handler for feed subscriptions. The project provides well-maintained Docker Compose files, Helm charts for Kubernetes, an Nginx reverse proxy configuration, and a detailed self-hosting guide, which significantly lowers the barrier to deployment. You are responsible for database backups, service restarts, PostgreSQL replication health, and keeping up with community-released updates — there is no automated upgrade path or managed update service.
Because Omnivore shut down its hosted cloud service in November 2024, there is no SaaS tier to compare against — self-hosting is the only option. This means you gain complete data ownership and zero subscription cost, but you absorb all operational responsibility: uptime, storage growth (especially for saved PDFs and images in Minio), and community-driven bug fixes rather than a dedicated support team. The active Discord community and GitHub issue tracker are the primary support channels, and the maintainer has committed to ongoing bug fixes, making the project a viable long-term self-hosting choice for teams comfortable with Docker-based infrastructure.
Related Apps
AFFiNE
Productivity · Project Management · Note Taking
Write, draw, and plan in one infinite canvas — the open-source alternative to Notion and Miro that keeps your data yours.
AFFiNE
Othermemos
Note Taking
Open-source, self-hosted note-taking built for quick capture — Markdown-native, lightweight, and fully yours.
memos
MITJoplin
Note Taking
The privacy-first, open-source note-taking app with end-to-end encrypted sync, AI assistance, and a powerful plugin ecosystem across every platform.