

Omnivore
9.0k 415What is Omnivore ?
Omnivore is a complete, open source read-it-later solution for people who like text.
Omnivore Features
- Highlighting, notes, search, and sharing
- Full keyboard navigation
- Automatically saves your place in long articles
- Add newsletter articles via email (with substack support!)
- PDF support
- Web app written in Node.js and TypeScript
- Native iOS app (source)
- Android app (source)
- Progressive web app for Android users
- Browser extensions for Chrome, Safari, Firefox, and Edge
- Labels (aka tagging)
- Offline support
- Text to speech (iOS only)
- Logseq support via our Logseq Plugin
- Obsidian support via our Obsidian Plugin
Every single part is fully open source! Fork it, extend it, or deploy it to your own server.
We also have a free hosted version of Omnivore at omnivore.app — try it now!
Importing Libraries
Check out our docs for information on importing your data from other apps.
Install Omnivore
The easiest way to get started with local development is to use docker compose up
. This will start a postgres container, our web frontend, an API server, and our content fetching microservice.
Requirements for development
Omnivore is written in TypeScript and JavaScript.
Running the web and API services
1. Start docker compose
git clone https://github.com/omnivore-app/omnivorecd omnivoredocker compose up
This will start postgres, initialize the database, and start the web and api services.
2. Open the browser
Open http://localhost:3000 and confirm Omnivore is running
3. Login with the test account
During database setup docker compose creates an account [email protected]
, password: demo_password
.
Go to http://localhost:3000/ in your browser and choose Continue with Email
to login.
Frontend Development
If you want to work on just the frontend of Omnivore you can run the backend services with docker compose and the frontend locally:
docker compose up api content-fetchcd packages/webcp .env.template .env.localyarn dev
You will need to configure some values in the new .env.local
file. These are
the values for running the web
service directly on your host machine and
running api
and content-fetch
within docker:
NEXT_PUBLIC_BASE_URL=http://localhost:3000NEXT_PUBLIC_HIGHLIGHTS_BASE_URL=http://localhost:3000NEXT_PUBLIC_LOCAL_BASE_URL=http://localhost:3000NEXT_PUBLIC_SERVER_BASE_URL=http://localhost:4000NEXT_PUBLIC_LOCAL_SERVER_BASE_URL=http://localhost:4000
Running the puppeteer-parse service outside of Docker
To save pages you need to run the puppeteer-parse
service.
1. Install and configure Chromium
brew install chromium --no-quarantineexport PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=trueexport CHROMIUM_PATH=`which chromium`
2. Navigate to the service directory, setup your env file, and install dependencies
cd packages/puppeteer-parsecp .env.example .envyarn
3. Start the service
yarn start
This will start the puppeteer-parse service on port 9090.
In your browser go to http://localhost:3000/home, click the Add Link
button,
and enter a URL such as https://blog.omnivore.app/p/getting-started-with-omnivore
.
You should see a Chromium window open and navigate to your link. When the service is done fetching your content you will see it in your library.
How to deploy to your own server
Omnivore was originally designed to be deployed on GCP and takes advantage of some of GCP’s PaaS features. We are working to make Omnivore more portable so you can easily run the service on your own infrastructure. You can track progress here: https://github.com/omnivore-app/omnivore/issues/25
To deploy Omnivore on your own hardware you will need to deploy three dockerized services and configure access to a postgres service. To handle PDF documents you will need to configure access to a Google Cloud Storage bucket.
packages/api
- the backend API servicepackages/web
- the web frontend (can easily be deployed to vercel)packages/puppeteer-parse
- the content fetching service (can easily be deployed as an AWS lambda or GCP Cloud Function)
Additionally, you will need to run our database migrations to initialize
your database. These are dockerized and can be run with the
packages/db
service.