]> git.r.bdr.sh - rbdr/junction/blobdiff - README.md
Update all versions
[rbdr/junction] / README.md
index 9e420d34a0c58b5aead57236bd383063dbac894d..ccd9b12e5d04971ed97f275a6bdf509403a09b5e 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,13 +1,97 @@
 # Junction
 
-Connect people through any URL
+Connect people through any URL.
 
-## Extension
+Junction is a web extension for Firefox, Chrome and Safari that lets you start
+an audio call at any URL.
 
-### Testing on Firefox
+## Building
+
+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
+
+## Developing
+
+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.
+
+### Dependencies
+
+- `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][xcode-download].
+- `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][asdf]. For `pnpm` check the [website][pnpm].
+- `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`.
+
+### Server
+
+The server is a socket.io server that relays messages between peers to help
+establish a WebRTC connection.
+
+#### Configuration
+
+You can use environment variables to control the server.
+
+- `JUNCTION_SERVER_PORT` which port to listen on. Defaults to `8000`.
+
+### Extension
+
+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 `extension/manifest.json` file.
+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.
+
+### Formatting
+
+Running `make format` will format the code with prettify and xcbeautify
 
-This will enable the extension and will allow you to use the inspector to debug.
+[xcode-download]: https://developer.apple.com/xcode/resources/
+[asdf]: https://asdf-vm.com/
+[pnpm]: https://pnpm.io/installation