
Galene is a videoconference server that is easy to host and that requires very moderate server resources. It was originally designed for lectures, conferences and student tutorials, but later turned out to be useful for traditional meetings. Galene has been used in production at two major universities (Université de Paris and Sorbonne Université) for lectures, practicals, seminars, and for staff meetings. It has been used to host a number of conferences (including SOCS'2020, JFLA'2021 and LibrePlanet 2024).
Galene's server side is implemented in Go, and uses the Pion implementation of WebRTC. The server is portable: it is tested on Linux/amd64 and Linux/arm64, and also runs on Linux/armv7, Linux/mips (OpenWRT), Mac OS X, and Windows. The default client is implemented in Javascript, and works on recent versions of all major web browsers, both on desktop and mobile (but see the FAQ for caveats with specific browsers).
While traffic is encrypted and authenticated from sender to server and again from server to receiver, Galene does not perform end-to-end encryption: anyone who controls the server might, in principle, be able to access the data being exchanged. For best privacy, you should install your own, self-hosted server (either manually or through Yunohost).
Galene's is not the only self-hosted WebRTC server. High-quality alternatives include Janus and Jitsi.
Galene is free and open source software, subject to the MIT licence. Galene's development was previously supported by Nexedi, and is currently being supported by NLNet's NGI0Core program.
Demo
Go to https://galene.org:8443 and choose public. You may log in with an empty password. If you need a slightly more private group, type public/whatever in the dialog box, for whatever value of whatever.
In order to invite other users, click on your username in the left pane and choose Invite user.
Source code
git clone https://github.com/jech/galene
Installation
The simplest way to install a self-hosted instance of Galene is to install it through Yunohost.
Minimal manual installation:
git clone https://github.com/jech/galene cd galene CGO_ENABLED=0 go build -ldflags='-s -w' mkdir groups echo '{"users": {"vimes":{"password":"sybil", "permissions":"op"}}}' > groups/night-watch.json ./galene &
Now point your browser at
<https:/localhost:8443/group/night-watch/>,
ignore the unknown certificate warning, and log in with
username vimes and password sybil. For full installation
instructions, please see the
file galene-install.md in the Galene
sources.
Documentation
- README;
- installation instructions;
- usage and administration
- frequently asked questions (FAQ);
- recent changes;
- Galene's protocol;
- writing frontends (see also this minimal client);
- administrative API for managing groups and users;;
- documentation of the Javascript client library;
- documentation of the Go client library.
For contributing to Galene, pleae see Contributing below.
Mailing list
Mailing list archives, Atom feed.
Please subscribe to the <galene@lists.galene.org> mailing list. This list is both for user questions and development of Galene.
Community-provided packages
These packages are provided by users, and have not necessarily been verified by Galene's author.
Related software
Client libraries
Client libraries ("SDKs"):
- client library for JavaScript and TypeScript (JavaScript SDK); human-readable documentation, reference documentation, example;
- client library for Go (Go SDK); reference documentation, examples.
The Galene protocol is documented and stable, it should therefore be easy enough to write a client library for your favourite programming language.
Specialised clients
- Galene-stream is an RTMP (and not only) frontend for Galene. It can be used with OBS Studio.
- Command-line file transfer through Galene. This is only required for transferring very large files, file transfer works reasonably well from the web interface for files up to a few GB.
- Android client for Galene. Does chat, audio and screensharing (which no Android browser can do). For video, please use the web client, which works fine on mobile.
- Speech-to-text for Galene (transcription and automatic captioning/subtitling). See some galene-stt benchmarks and transcripts.
- Experimental SIP bridge for Galene (traditional VoIP support).
Authentication services
- LDAP integration for Galene using third-party authorisation.
- Sample authorisation server written in Python for Galene's third-party authorisation.
Alternate frontends and management software
- .
- Pyrite is an experimental web client (a replacement for the default client) based on the Vue framework, currently on hold and out of date.
- Openfire-galene-plugin integrates Galene into the Openfire collaboration server.
- Galene Manager is a Galene plugin for WordPress. Also available from the WordPress plugin directory.
Features
Server features
The server is complete, and implements a number of fairly advanced features:
- arbitrary numbers of audio and video streams;
- text chat;
- recording to disk;
- user status (“raise hand”, etc.);
- choice of audio and video codecs (full functionality for VP8 and VP9, partial functionality for H.264, preliminary support for AV1);
- simulcast;
- Scalable Video Coding (SVC) for VP8 and VP9;
- NACK-based loss recovery, in both the client → server and server → client directions;
- PLI-based repair;
- automatic restarting of failed flows (on ICE failure);
- full congestion control ("bandwidth estimation", BWE) in the server → client direction (both loss-based and using REMB indications);
- congestion control (BWE) in the client → server direction (loss-based, partial REMB support);
- very low latency;
- dynamic tuning of buffer sizes (reduces memory consumption);
- built-in TURN server;
- administrative API (managing groups and users) over HTTP;
- choice of password-based (plaintext or hashed) and token-based authorisation (OAuth2-style);
- support for the WHIP protocol.
Client features
Default Javascript client
The web browser frontend has a lot of features, but the UI is somewhat clunky:
- audio and video conferencing;
- text chat;
- supports both desktop browsers and mobile browsers (both Android and iPhone/iPad);
- screen and window sharing, including sharing multiple windows simultaneously;
- background blur;
- streaming video and audio from disk;
- activity detection;
- group moderation (warn user, kick user out, lock group, etc.);
- peer-to-peer file transfer (one-to-one file sharing).
Native Android client
There is an audio-only native Android client for Galene. The web client is usually a better choice, but the native client supports screensharing, which is not possible in a mobile browser. The client is expected to work on all devices running Android 6 or later.
Server robustness and scalability
For a typical lecture (100 students), Galene needs roughly 1/4 of a CPU core.
For one-to-many communication (lectures), the behaviour is linear, and Galene should be able to serve about 300 participants per core. For many-to-many communication (meetings), the behaviour is quadratic (the server load grows as the square of the number of participants), expect to be able to handle on the order of 20 participants in a single meeting on one core, 40 on four cores (and of course way more if some participants don't switch their camera on — we've had staff meetings with forty participants or so, but only a few had their cameras switched on at a given time).
The failure mode is reasonable: when the server is overloaded, the videos freeze. The server recovers as soon as users start switching their cameras off.
Security
Galene assumes that the server is trusted: all media is decrypted by the server and reencrypted before it is sent to the clients. This is, as far as I know, unavoidable with DTLS-SRTP, the security mechanism used by WebRTC (yes, I know about insertable streams). On the other hand, since the client is not trusted, any bugs in the client code should in principle not create security issues. Thus, it is reasonable to build user-friendly clients using unscrutable Javascript frameworks.
Galene has been subjected to a security review by Radically Open Security, funded by NLnet. Penetration test report.
Contributing
Galene is distributed under the MIT licence. All contributions to Galene will be published under the MIT licence. No CLA is required. For technical discussions, please consider contacting us on the mailing list in preference to GitHub.
You may contribute either by sending patches to the mailing list, or by submitting pull requests to the GitHub repository.
Respecting the user's privacy is an important goal of Galene, and contributions that reduce the user's privacy will not be accepted. Galene loads almost instantaneously, even on a slow connection; if your contribution requires a heavy-weight library, it will most probably be rejected (unless the library is loaded lazily).