Connect people through any URL
ed39f77c — Ruben Beltran del Rio 10 months ago
650c5f15 — Ruben Beltran del Rio 10 months ago
Add a contributing guide
65b2c3fe — Ruben Beltran del Rio 10 months ago
Ensure connections are closed



You can also use your local clone with git send-email.


Connect people through any URL.

Junction is a web extension for Firefox, Chrome and Safari that lets you start an audio call at any URL.


Running make or make package will regenerate the content script, and package the extension for all browsers in the ./build/ directory with the following outputs:

  • junction.xpi: The firefox extension
  • junction.zip: The chrome extension
  • Junction.app: The safari extension app


The project is divided into three main parts:

  • server: A server that handles message passing to establish the WebRTC connections.
  • extension: The main code of the extension itself.
  • safari: The safari app, it wraps the extension using symlinks.


  • make to run the build commands. It's included in macos
  • xcode to build the safari extension. Can be downloaded from the apple developer portal.
  • node and pnpm to build the extension, and if you want to run the server directly. Node can be installed via brew with brew install node, or with a version manager like asdf. For pnpm check the website.
  • podman and podman-compose if you want to run the server as a container. Both can be installed with homebrew brew install podman podman-compose
  • prettier to format Javascript, JSON, Yaml, and Markdown. Will automatically install when running make format.
  • xcbeautify to format swift. Can be installed with homebrew brew install xcbeautify

If you're running macos and using homebrew, you can install them all with make prepare-environment.


The server is a socket.io server that relays messages between peers to help establish a WebRTC connection.


You can use environment variables to control the server.

  • JUNCTION_SERVER_PORT which port to listen on. Defaults to 8000.


The extension uses WebExtension manifest v2 and is compatible with Firefox, Chrome and Safari.

You can build all extensions using make in the root of the directory.

If you want to run manually then you can run pnpm install from the extension folder to install dependencies, and pnpm build to generate the content script.

$ pnpm install && pnpm build
#Testing on Firefox

In order to test on firefox, first go to about:debugging, then click on the This Firefox option. Then click on Load Temporary Add-On and point the browser to the build/junction.xpi file if you're using make, or extension/manifest.json file if you're testing without packaging.

This will enable the extension and will allow you to use the inspector to debug.

#Testing on Chrome

In order to test on chrome, first go to chrome://extensions/. Make sure Developer mode is enabled. You can drag the build/junction.zip file or click Load Unpacked and point the browser to the extension directory.

#Testing on Safari

Open Junction.app and then enable the extension in Safari.


Running make format will format the code with prettify and xcbeautify