Skip to content

How It Works

Filip Š edited this page Jul 4, 2021 · 1 revision

The project consists of three parts, the browser extension, the native program, and the UserChrome browser modifications.

The three parts are integrated together to make the whole project work. The extension provides in-browser instructions for installation of the native program, which also installs the UserChrome modifications, so most users do not need to care about specifics. However, this page is useful for anyone that wants a better understanding of how the project works.


The browser extension/addon is the main interface users will be facing when using the project. It provides a convenient way of installing, editing, and removing sites and profiles directly from their main browser. However, browser extensions are limited and cannot directly access the operating system, so it uses Native messaging API for communication with the native program.

The native program is written in Rust and handles features that the extension alone cannot do. It communicates with the extension using a native messaging protocol. Features of the native program include installing Firefox runtime, patching it with the UserChrome modifications, installing the sites, applying the system integration, and launching them. The native program also provides a command-line program for users that prefer CLI over GUI :)

The remaining part of the project is modifying Firefox UI to make a better app-like feel. This is done using UserChromeJS (Autoconfig Startup Scripting) modifications, that can execute low-level JavaScript code that can modify Firefox UI. These modifications hide the address bar and tabs, move some browser buttons, provide additional useful widgets and settings and handle PWA scope and system integration.