omnom is a free, open source social networking project written in Go and released under AGPL-3.0. It has 663 GitHub stars, 41 forks and 3 open issues, and was last pushed 3 months ago. On this registry it ranks #40 of 44 tracked projects in Social Networking, with 5 head-to-head comparisons available. It gained 1 stars over the last 3 tracked days.

What is omnom?

Omnom is a self-hosted, AGPL-3.0 web content preservation service written in Go that bookmarks pages together with browser-rendered snapshots, aggregates feeds, and follows ActivityPub streams, built for individuals and small teams who want their reading, archiving, and fediverse following to live on infrastructure they control.

What it is

Omnom is an open-source web application that saves the web as the browser actually renders it. Rather than storing a link or a text extract, it captures the displayed content of dynamic pages, so a bookmark retains the page as it appeared at the moment of capture, including multimedia that is stored locally rather than hotlinked. On top of that capture engine it layers three roles that are usually served by three separate tools: bookmarking, an RSS/Atom reader, and an ActivityPub client, all behind one multiuser web interface with a documented API and a companion browser addon. The project lives in the self-hosted and fediverse ecosystem, and it is funded through NGI Zero Core, a fund established by NLnet with support from the European Commission's Next Generation Internet program.

The concrete problem it solves is link rot and page drift. A conventional bookmark points at a URL that may later change, move behind a paywall, or disappear entirely, and a feed reader tells you something was published without keeping a durable copy of what was published. Omnom replaces that split between a bookmark manager, a snapshot utility, and a feed reader by capturing content at read time and keeping it: the same URL can hold multiple snapshots over time, each with a resource summary and compare/diff views, so changes to a page are visible rather than lost. Filtering by date, free text search in content, tags, users, domains, and URLs makes the resulting archive searchable instead of merely stored.

Key capabilities

  • Capture of websites as the browser renders them, which preserves the displayed content of dynamic pages as well.
  • Multiple snapshots of the same URL, with resource summary and compare/diff views between captures.
  • RSS/Atom feed aggregation, refreshable through the update-feeds command.
  • Fediverse and ActivityPub support, documented on the project wiki.
  • Multiuser web interface with locally saved multimedia content.
  • Flexible filtering by date, free text search in content, tags, users, domains, and URLs.
  • Documented API, plus a command line tool with create-bookmark, create-config, create-token, create-user, diff-html, generate-api-docs-md, set-token, show-unread, show-user, update-feeds, and validate-html.
  • Browser addon published for Firefox and for Chrome/Chromium.

Who uses it and how

  • Self-hosters running a single instance for personal archiving, starting the service with ./omnom listen and creating bookmarks either through the web interface, the browser addon, or ./omnom create-bookmark.
  • Small multiuser deployments behind a reverse proxy, where the authenticated username is passed in a Remote-User header and trusted by setting remote_user_header in config.yml.
  • Fediverse participants who follow ActivityPub streams from inside the same interface where their bookmarks and feeds live, rather than through a separate client.
  • Feed readers who aggregate RSS and Atom sources and keep the retrieved pages alongside the feed entries.
  • API consumers and integrators, using the documented API and generate-api-docs-md to work against the instance programmatically.
  • Translators contributing localizations through the project's Weblate instance.

Getting started

A single file binary release is published on the releases page and needs only chmod +x before running; a Docker image is also available with details on the project wiki. For local builds, Go 1.24 or newer is required, followed by go get -u, go build, ./omnom create-config config.yml, and ./omnom listen.

How it compares

No comparable paid products are listed in the facts for this registry entry, and no alternative open-source tools are named either, so Omnom stands alone in this registry as a self-hosted preservation, feed, and fediverse service. Readers looking for a direct analogue should treat the wiki's feature and Fediverse support pages, rather than this page, as the source of truth.

When to use it — and when not to

A self-hoster must operate the web application and its configuration file, and must supply a working SMTP configuration in config.yml if email-based one time login tokens are wanted; without SMTP, tokens have to be generated from the command line with ./omnom create-token [username] login. Omnom does not store passwords at all, so anyone who expects conventional username and password accounts, or who does not want to run and maintain a server, is better served elsewhere, and remote user header authentication cannot be combined with OAuth or open signups. The main weakness visible in the facts is documentation depth: much of the operational detail, including Docker, fediverse support, and the API, lives on the external wiki rather than in the README, so setup requires following links.

project readme (upstream, from github) — read inline

Omnom

Translation status GoDoc

A web content preservation service

  • Bookmark with website snapshots
  • Aggregate feeds
  • Follow ActivityPub streams

Check out our wiki for more information.

Features

  • Self hosted
  • Bookmarking
  • RSS reader
  • Fediverse/ActivityPub support
  • Websites are captured as your browser renders it - saves the displayed content of dynamic pages as well
  • Multiple snapshots of the same URL with resource summary and compare/diff views
  • Web interface with multiuser support
  • Locally saved multimedia content
  • Flexible filtering - by date, free text search in content, tags, users, domains, URLs, etc..
  • Documented API

Browser addon

Omnom browser addon is available for

Installation

Single file binary release is available here. (Don't forget to chmod +x)

Docker image is also available available, more details here.

Local build

go >= 1.24 required

  • Checkout the repo and execute go get -u in the root directory
  • Run go build

Setup & run

  • Run ./omnom help to list the available commands
  • Execute ./omnom listen to start the web application

Configuration

Settings can be configured in config.yml config file - don't forget to restart webapp after updating.

Execute ./omnom create-config config.yml to generate a configuration file with the default configuration values.

User handling

Omnom does not store passwords. Login requires one time login token, OAuth, or a remote user header.

Login tokens can be requested via email (this requires a valid SMTP configuration in config.yml) through the web interface or can be generated from command line using the ./omnom create-token [username] login.

If you use Omnom behind a reverse proxy with authentication, you can pass the logged-in username in an HTTP header like Remote-User to automatically log in. Omnom can be configured to trust the header by setting the remote_user_header option in config.yml. Remote user header authentication can't be used with OAuth or open signups.

Command line tool

Basic management actions are available using the command line tool (go run omnom.go or go build; ./omnom)

Available Commands
  create-bookmark      create new bookmark
  create-config        create default configuration file
  create-token         create new login/addon token for a user
  create-user          create new user
  diff-html            diff-html FILE1 FILE2
  generate-api-docs-md Generate Markdown API documentation
  help                 Help about any command
  listen               start server
  set-token            set new login/addon token for a user
  show-unread          show unread details
  show-user            show user details
  update-feeds         update RSS/Atom feeds
  validate-html        validate-html FILE
  completion           Generate the autocompletion script for the specified shell

Translations

To contribute to localizations, please visit our weblate

Translation status

Bugs

Bugs or suggestions? Visit the issue tracker or join our discord server

License

AGPLv3

Funding

This project is funded through NGI Zero Core, a fund established by NLnet with financial support from the European Commission's Next Generation Internet program. Learn more at the NLnet project page.

NLnet foundation logo NGI Zero Logo

Frequently asked questions

Is omnom free to use?

omnom is open source under the AGPL-3.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does omnom do?

A web content preservation service

What is omnom written in?

omnom is primarily written in Go. Its source is publicly available at https://github.com/asciimoo/omnom, and it has 663 GitHub stars.