Skip to content

domovikapp/domovik-server

Repository files navigation

Official Website | Report a bug

What is Domovik?

Domovik is a cross-browser synchronization service, letting you seamlessly access Tabs, Bookmarks, and Reading Lists from any connected browser.

https://raw.githubusercontent.com/domovikapp/domovik-webext/master/sshots/browsers.png

The companion WebExtension is available here

A walk-through of its main features is available on the official website.

If you do not wish to self-host Domovik or would like to support the project, consider using our official instance.

Why Domovik?

Domovik is an alternative for the synchronisation services already integrated in some browser (e.g. Firefox Sync or Chrome anywhere) for people who want to:

  • synchronise data across different browsers;
  • self-host their synchronization engine;
  • synchronize data from browsers which don’t have a sync service (e.g. Qutebrowser, Nyxt, etc.);
  • integrate web synchronization deeper into their workflow with out-of-browser handling (coming soon).

Features

Tabs

Domovik synchronizes all the tabs open (in non-private navigation mode) on all of your browsers. They can then be accessed either through the server web interface, or via the browser extension.

https://raw.githubusercontent.com/domovikapp/domovik-webext/master/sshots/browsers.png-small.png

Bookmarks

Compared to many other bookmarks manager, Domovik does not aim at replacing the bookmarks system integrated in your browser. It merely copies them to the synchronization server, from where your other browsers can access them via the browser extension. You can also access them through the web interface of the server.

https://raw.githubusercontent.com/domovikapp/domovik-webext/master/sshots/bookmarks.png-small.png

Reading Lists

Reading Lists are lists of transient links that are created from the menu of the companion extension, then disappear as soon as you open them, either from the extension or from the server web interface. They can be used e.g. as a way to temporarily store a set of tabs, as TOREAD lists, as a way to temporarily gather some thematic pages, etc.

https://raw.githubusercontent.com/domovikapp/domovik-webext/master/sshots/lists.png-small.png

Commands

Domovik provides a way to send asynchronous commands from a browser to another one. It is currently only used to send a page to another browser, but new features should come.

https://domovik.app/images/sendlink.png

Privacy First

Domovik uses an end-to-end encryption scheme such that none of your browsing data ever transit in clear through the synchronization server. The advantage is that your privacy is safe; the drawback is that all of your data being encrypted with a key derived from your password, the loss of your password means the loss of all of your synchronized data.

Install Domovik

First, clone the Domovik repo git clone https://github.com/domovikapp/domovik-server

Development

General requirements

  1. Install Elixir
  2. Install node.js
  3. Install PostgreSQL

Run Domovik

  1. Configure your database settings – i.e. username, password & hostname for TCP access or socket & username for socket access – in config/dev.exs;
  2. Setup the project with mix setup;
  3. generate development self-signed SSL certificates mix phx.gen.cert;
  4. start the server with mix phx.server.

Domovik is now available at http://127.0.0.1:4000/session/new and https://127.0.0.1:4001/session/new.

Production

Deploy Domovik

Manual deployment

General requirements
  1. Have a Python 2 interpreter available
  2. Install Elixir
  3. Install node.js
  4. Install PostgreSQL
Build Domovik
  1. Set the environment variable MIX_ENV to prod.
  2. Create a PostgreSQL users with the permission to create databases and set the environment variable DATABASE_URL to ecto://[USER]:[PASSWORD]@[HOST]/[DATABASE].
  3. Set the environment variable SECRET_KEY_BASE to e.g. the output of mix phx.gen.secret.
  4. Set admin_username and admin_password in config/prod.exs.
  5. Optionally, set the environment variable PORT to the desired TCP port (defaults to 4000).
  6. Setup the project with mix setup.
  7. Build the web assets with npm run deploy --prefix ./assets && mix phx.digest.
  8. Follow the instructions to configure Pow, the authentication library.
  9. Finally, launch the server with mix phx.server or use Elixir releases.

Docker

First, build the Docker image:

sudo docker container run --rm -it --entrypoint "" -p 127.0.0.1:4000:4000 domovikapp/domovik sh

Then run the server:

sudo docker container run --rm -it -p 127.0.0.1:4000:4000 --name domovik domovikapp/domovik \\
  -e "DATABASE_URL=ecto://USER:PASSWORD@HOST/DATABASE" \\
  -e "SECRET_KEY_BASE=xxx"

Docker Compose

Edit docker-compose.yml and set SECRET_KEY_BASE to the output of mix phx.gen.secret (or any other similar method), then run docker-compose up

Web server

You can then either directly expose the bundled HTTP server, or use a reverse proxy such as e.g. Nginx.

Please note that due to JS cryptography APIs being only available in safe contexts, Domovik should always be accessed over HTTPS.

Credits

Domovik is built around the following technologies:

Fonts used are Jost* and Inter.

License

Domovik is available under the AGPLv3 license, as found in the LICENSE text file.