Omnivore is a fully open-source, self-hosted read-it-later application designed for users who value deep reading, annotation, and personal knowledge management. Originally offering a cloud service, Omnivore transitioned to 100% self-hosting in November 2024, empowering users with full control over their reading data. Built with TypeScript and Next.js, it supports web, iOS, Android, and Progressive Web Apps, along with browser extensions for Chrome, Safari, Firefox, and Edge. Omnivore focuses on preserving the reading experience with features like automatic save-the-place, keyboard navigation, and offline access. Its extensible architecture allows integration with tools like Logseq and Obsidian, making it ideal for researchers, students, and knowledge workers who want to centralize their reading without relying on third-party cloud services.
What You Get
- Full-text highlighting and notes - Users can highlight text and add private annotations to articles, which are saved alongside the original content for later review.
- PDF support via PDF.js - Upload and read PDFs directly in the web interface with full text extraction and annotation capabilities.
- Email-based article saving - Subscribe to newsletters via email (including Substack) and automatically save articles to your library without manual copying.
- Browser extensions - Install Chrome, Safari, Firefox, or Edge extensions to save articles with one click directly from any website.
- Logseq and Obsidian integration - Sync your highlights and notes to Logseq via the official plugin or export to Obsidian for knowledge graph building.
- Offline reading support - Access saved articles and highlights without an internet connection on web, iOS, and Android apps.
- Self-hosted deployment - Deploy the entire stack (web UI, API, content-fetcher, PostgreSQL) using Docker Compose on your own server with full data ownership.
- Text-to-speech (iOS only) - Listen to saved articles using native iOS text-to-speech functionality.
- Keyboard navigation - Navigate your library, read articles, and manage highlights using only the keyboard for a distraction-free experience.
Common Use Cases
- Building a personal knowledge base from newsletters and long-form content - Users save articles from Substack, Medium, and blogs into Omnivore, annotate them with highlights, then export to Obsidian or Logseq for cross-referencing and note-taking.
- Creating a private, ad-free reading environment - Replace proprietary read-it-later services like Pocket or Instapaper with a self-hosted alternative that respects privacy and gives full control over data.
- Problem → Solution flow: Losing track of highlighted content in scattered apps - Users import articles from multiple sources into Omnivore, tag them with labels, and later search all highlights across their entire library in one place.
- Team or academic research workflow - Researchers and students use Omnivore to collect, annotate, and organize scholarly articles or industry reports, then export structured notes for papers or presentations.
Under The Hood
Omnivore is a cross-platform reading application designed to unify web, mobile, and backend experiences into a cohesive ecosystem. It leverages modern frameworks and modular architecture to support reading, content curation, and synchronization across multiple devices.
Architecture
Omnivore adopts a layered, monolithic yet modular architecture that integrates web, mobile, and backend components seamlessly.
- The system is organized into distinct layers for API, frontend, content processing, and mobile platforms
- It implements a component-based structure that promotes reusability and scalability across platforms
- The architecture supports multi-device synchronization with a centralized content management system
Tech Stack
The project utilizes a diverse tech stack to enable full-stack development and cross-platform compatibility.
- The frontend is built using TypeScript and JavaScript with React, Next.js, and native mobile frameworks like Swift and Kotlin
- Key backend technologies include Express, GraphQL, Redis, and PostgreSQL for data handling and storage
- Development tools encompass Docker, Makefiles, Gradle, and Vercel for deployment and orchestration
- Testing and linting are supported by Mocha, Chai, Jest, ESLint, and Prettier for code quality assurance
Code Quality
Omnivore demonstrates a mixed code quality profile with strong testing practices and moderate consistency.
- The codebase includes extensive test coverage across multiple platforms, ensuring reliability and maintainability
- Error handling is implemented through conventional try/catch patterns with broad exception management
- Code consistency varies, with some stylistic differences and limited visibility into core implementation logic
- Technical debt is present due to sparse core logic and heavy reliance on generated or external assets
What Makes It Unique
Omnivore stands out through its integrated approach to multi-platform reading experiences and extensible architecture.
- The application uniquely combines web, mobile (iOS/Android), and backend systems into a single reading ecosystem
- It offers a modular design that enables customization and extensibility for diverse user needs
- The platform supports content synchronization and curation across devices with a unified interface