aboutsummaryrefslogtreecommitdiff
path: root/readme.md
diff options
context:
space:
mode:
Diffstat (limited to 'readme.md')
-rw-r--r--readme.md133
1 files changed, 74 insertions, 59 deletions
diff --git a/readme.md b/readme.md
index 5d8fd31..8b90250 100644
--- a/readme.md
+++ b/readme.md
@@ -4,25 +4,26 @@ a simple secure web conferencing application
## Features
-- Rooms
-- Different stream types
- - Camera
- - Microphone
- - Screen capture
-- Multiple streams
-- Noise suppression (rnnoise)
-- End-to-end-encryption
-- Peer-to-peer data transmission
-- Chat (text and images)
+- Rooms
+- Different stream types
+ - Camera
+ - Microphone
+ - Screen capture
+- Multiple streams
+- Noise suppression (rnnoise)
+- End-to-end-encryption
+- Peer-to-peer data transmission
+- Chat (text and images)
## Licence
-Licensed under the terms of the GNU Affero General Public License version 3 only. See [COPYING](./COPYING).
+Licensed under the terms of the GNU Affero General Public License version 3
+only. See [COPYING](./COPYING).
## Usage
-For trying it out, a hosted version is available on [my server](https://meet.metamuffin.org/).
-For self-hosting, this should help:
+For trying it out, a hosted version is available on
+[my server](https://meet.metamuffin.org/). For self-hosting, this should help:
```sh
pacman -S --needed deno rustup make coreutils; rustup install nightly
@@ -33,11 +34,15 @@ make run
When changing code, use `make watch` to re-build things automatically as needed.
-If you use this project or have any suggestions, please [contact me](https://metamuffin.org/contact)
+If you use this project or have any suggestions, please
+[contact me](https://metamuffin.org/contact)
## _Rift_
-_Rift_ is similar to the [magic wormhole](https://github.com/magic-wormhole/magic-wormhole), except that is peer-to-peer. It reuses the keks-meet signaling server to establish a WebRTC data channel.
+_Rift_ is similar to the
+[magic wormhole](https://github.com/magic-wormhole/magic-wormhole), except that
+is peer-to-peer. It reuses the keks-meet signaling server to establish a WebRTC
+data channel.
```sh
pacman -S --needed rustup; rustup install nightly
@@ -64,61 +69,71 @@ rift --secret hunter2 receive /path/to/output
## Parameters
-Some configuration parameters can be added like query params but **after** the section. (e.g `/room#mymeeting?username=alice`)
-The page will not automatically reload if the section changes.
-Booleans can be either `1`, `true`, `yes` or their opposites. I convenience function for changing params is also exported: `window.change_pref(key, value)`
+Some configuration parameters can be added like query params but **after** the
+section. (e.g `/room#mymeeting?username=alice`) The page will not automatically
+reload if the section changes. Booleans can be either `1`, `true`, `yes` or
+their opposites. I convenience function for changing params is also exported:
+`window.change_pref(key, value)`
-| Option name | Type | Default | Description |
-| -------------------------- | ------- | ----------- | -------------------------------------------------------------------- |
-| `username` | string | `"guest-…"` | Username |
-| `warn_redirect` | boolean | `false` | Internal option that is set by a server redirect. |
-| `image_view_popup` | boolean | `true` | Open image in popup instead of new tab |
-| `microphone_enabled` | boolean | `false` | Add one microphone track on startup |
-| `screencast_enabled` | boolean | `false` | Add one screencast track on startup |
-| `camera_enabled` | boolean | `false` | Add one camera track on startup |
-| `rnnoise` | boolean | `true` | Use RNNoise for noise suppression |
-| `native_noise_suppression` | boolean | `false` | Suggest the browser to do noise suppression |
-| `microphone_gain` | number | `1` | Amplify microphone volume |
-| `video_fps` | number | - | Preferred framerate (in 1/s) for screencast and camera |
-| `video_resolution` | number | - | Preferred width for screencast and camera |
-| `camera_facing_mode` | string | - | Prefer user-facing or env-facing camera (`"environment"` / `"user"`) |
-| `auto_gain_control` | boolean | - | Automatically adjust mic gain |
-| `echo_cancellation` | boolean | - | Cancel echo |
-| `notify_chat` | boolean | `true` | Send notifications for incoming chat messages |
-| `notify_join` | boolean | `true` | Send notifications when users join |
-| `notify_leave` | boolean | `true` | Send notifications when users leave |
+| Option name | Type | Default | Description |
+| ------------------------------- | ------- | ----------- | -------------------------------------------------------------------- |
+| `username` | string | `"guest-…"` | Username |
+| `warn_redirect` | boolean | `false` | Internal option that is set by a server redirect. |
+| `image_view_popup` | boolean | `true` | Open image in popup instead of new tab |
+| `webrtc_debug` | boolean | `false` | Show additional information for WebRTC related stuff |
+| `microphone_enabled` | boolean | `false` | Add one microphone track on startup |
+| `screencast_enabled` | boolean | `false` | Add one screencast track on startup |
+| `camera_enabled` | boolean | `false` | Add one camera track on startup |
+| `rnnoise` | boolean | `true` | Use RNNoise for noise suppression |
+| `native_noise_suppression` | boolean | `false` | Suggest the browser to do noise suppression |
+| `microphone_gain` | number | `1` | Amplify microphone volume |
+| `video_fps` | number | - | Preferred framerate (in 1/s) for screencast and camera |
+| `video_resolution` | number | - | Preferred width for screencast and camera |
+| `camera_facing_mode` | string | - | Prefer user-facing or env-facing camera (`"environment"` / `"user"`) |
+| `auto_gain_control` | boolean | - | Automatically adjust mic gain |
+| `echo_cancellation` | boolean | - | Cancel echo |
+| `optional_audio_default_enable` | boolean | `true` | Enable audio tracks by default |
+| `optional_video_default_enable` | boolean | `false` | Enable video tracks by default |
+| `notify_chat` | boolean | `true` | Send notifications for incoming chat messages |
+| `notify_join` | boolean | `true` | Send notifications when users join |
+| `notify_leave` | boolean | `true` | Send notifications when users leave |
## Security
-keks-meet _tries_ to be secure. However I am not a security expert. The current system works as follows:
+keks-meet _tries_ to be secure. However I am not a security expert. The current
+system works as follows:
-- The room name is set in the section of the URL which is not sent to the server.
-- The server receives a salted SHA-256 hash of the room name to group clients of a room.
-- The client uses PBKDF2 (constant salt; 250000 iterations) to derive a 256-bit AES-GCM key from the room name.
-- All relayed message contents are encrypted with this key.
- - Message recipient is visible to the server
- - The server assigns user ids
+- The room name is set in the section of the URL which is not sent to the
+ server.
+- The server receives a salted SHA-256 hash of the room name to group clients of
+ a room.
+- The client uses PBKDF2 (constant salt; 250000 iterations) to derive a 256-bit
+ AES-GCM key from the room name.
+- All relayed message contents are encrypted with this key.
+ - Message recipient is visible to the server
+ - The server assigns user ids
## Todo-List
-- Make the optional streams UI prettier
-- Maybe group tracks in streams to make sure everything is in sync
-- How do we implement global hotkeys?
-- Dont use websocket to send images to not block anything else
-- File transfers via data channel (rift)
-- Native client
-- Have a security professional look at the code
-- Test some options like `camera_facing_mode`
-- Signing key for each user
- - Built-in storage for known keys
-- Relay RTC when there are a lot of clients
-- Prevent join notification bypass by not identifying
-- Tray icon for native
-- Pin js by bookmarking data:text/html loader page
+- Make the optional streams UI prettier
+- Maybe group tracks in streams to make sure everything is in sync
+- How do we implement global hotkeys?
+- Dont use websocket to send images to not block anything else
+- File transfers via data channel (rift)
+- Native client
+- Have a security professional look at the code
+- Test some options like `camera_facing_mode`
+- Signing key for each user
+ - Built-in storage for known keys
+- Relay RTC when there are a lot of clients
+- Prevent join notification bypass by not identifying
+- Tray icon for native
+- Pin js by bookmarking data:text/html loader page
## Protocol
-The protocol packets are defined in [packets.d.ts](./common/packets.d.ts). Here is an (simplified) example of how the protocol is used.
+The protocol packets are defined in [packets.d.ts](./common/packets.d.ts). Here
+is an (simplified) example of how the protocol is used.
**THIS IS OBSOLETE! The new protocol is quite similar but uses encryption**