Garage 44

Open Source Playground

Pyrite- Open source video conferencing


Like most desk workers in the world, the Covid situation forced me to work from home. With this situation came the use of video tools like Zoom and Teams. Both come with their own set of frustrations in terms of quality and privacy. Having to deal with audio and video distortions during a two-hour call is a tiring experience. You want minimal lag and crispy clear audio and video for any communication.

I already knew about Jitsi and was working on an open source softphone myself, which relied on an Asterisk PBX. However, they all seemed to be too complicated for my usecase; an easy-to-use video-conferencing environment. It's nice to be able to use WebRTC to connect to a PBX, but what's the use of SIP when all participants are on a browser anyway? Somehow I failed to recognize this and therefor delayed pulling the plug on this softphone project for too long.

Things started to move when I learned about Pion and Galene. Galene is a videoconferencing server that is easy to deploy and requires moderate server resources. While not being a Golang developer, it felt that I could understand parts of what the software was doing, which convinced me that I could make small adjustments when I would need them.

The Galene project already features a default WebRTC browser client, but it lacks modern frontend tooling. To get my mind of failing side-projects, I decided to start a new project, but with slightly less ambitious goals. I wanted to focus on building a more feature-complete WebRTC frontend for the Galene SFU.

About Pyrite

To start with; I searched where the name Galene came from and learned that it is a lead-containing mineral. It would only be logical to name this side-project after another mineral. Pyrite, or a fool's gold, felt to be a good description. It would be nothing more than a simple frontend for the more complicated part; the SFU itself.

Still, it took me almost a year of spare time to rebuild most of the Galene frontend as a modern Vue 3 application. Gladly I could just reuse the Galene protocol.js file in Pyrite. The UI layout in Pyrite is almost exactly the same as the default client. This is a typical layout that just works for desktop-like communication software(e.g. IRC clients). It still needs some adaption for smaller devices, but for now itis good enough.

Using Vue and SCSS enables me to deal at a faster pace with things like templating, styling and abstracting functionality to components. The last months, I focused on adding a management interface to Pyrite, which allows you to manage groups and users. It's a simple Express.js backend that acts as a proxy between Galene and the client. In this setup, I can easily deal with SFU-related backend tasks, like serving recordings, updating group permissions and authentication.

I recently started dogfooding Pyrite (thanks team!) in my daily job, by doing daily standups on a Pyrite/Galene instance. Using feedback from daily usage is incredibly useful. Also, I learn a lot from users reporting in the Galene issue tracker. I love building Pyrite, and hope people will find it useful for their video conferences. Do you like Pyrite? It would be great if you could star the project on Github, to get some more exposure. Cheers!