Jam – Self-Hosted Clubhouse
github.com
github.com
I think it's definitely an interesting approach to community creation and engaging with your audience. What I'm still trying to learn and understand is where it's going, as I don't think I use it enough yet to fully see the "road to monetization, profitability, and sustainability" of the platform. I kind of wish room discovery was a bit easier beyond the network-based approach that they're using, but I'm just being nitpicky now.
Most of our efforts since february went into making the rooms more reliable which sounds simple but there are actually countless of different reasons for why audio might not work or not work as well as it could (switching from wifi to mobile data, microphone permissions, bandwidth problems, OS forces app into background, …) some are solvable others at least need to be documented and tracked.
What else is new other than reliability?:
# Support for large rooms (think: thousands of people in the audience) using an SFU
Initially Jam only had support for p2p rooms which is great for small rooms (up to like ~20 people depending on upstream bandwidth of the speakers) but for online conferences, meetups and so on you often need rooms that support 100s or 1000s of participants so we added an SFU where the speakers still send audio to each other p2p to keep conversations low-latency but we use a server to stream audio to all users that are in the audience.
(That said: you can still run Jam p2p-only if you prefer that)
# Locally recorded multi-track audio (think: podcasts with multiple guests, where you get one high quality audio track per speaker)
You can try multi-track audio recordings on our public beta server (https://beta.jam.systems). Tap on our own user and then "Start Podcast Recording". When you tap on your own user again and then "Stop Podcast Recording" the browser will prompt you with downloads for all audio tracks (we will make this more smooth going forward).
# Custom UI
For everyone who wants to add audio rooms to their own app but needs full control over the look and feel we have added an API and JavaScript library (and NPM package) so you can "build your own" ui for Jam. This basically means that Jam is running "headless" as an audio room server and makes sure audio works while you can build exactly the ui that you want.
E.g. let's say you have an app like Google Docs and you want to allow people to talk about a document. In this case you might want something that doesn't look like a room on Clubhouse or Twitter Spaces but rather like a line of avatars and with the API and library you can build this yourself now:
https://www.npmjs.com/package/jam-core
https://gitlab.com/jam-systems/jam/-/tree/master/ui/examples
# Managed hosting
For everyone who wants to use Jam but doesn't want to install and maintain Jam themselves we are run and support Jam for you (think: what Wordpress.com is to Wordpress.org):
How do you stream the audio to the people in the audience? Are you still using WebRTC or do you add some latency and use something like HLS? If WebRTC do you know the number of maximum listeners you can get to on the SFU?
With ActivityPub[1] federation it might be possible to show account informations of users if they decide to join with their federated account.
It is for example possible to comment on a PeerTube instance on one server by using a Mastodon account from another server.
I'd love to help but I have no experience at all with such protocols and how servers do the magic :) If you do manage to implement something I will be very impressed, too.
Thanks for creating such a nice tool!
Perhaps Clubhouse is on a similar road like Genius; a devalued exit. All because this concept has been copied to death, users still running to alternatives and now reduced to an open-source contraption on GitHub for everyone to self-host themselves.
Quite unsurprising.
I consider Jam, the second last nail in the coffin for Clubhouse.
I'm quite optimistic when it comes to Clubhouse. Discovery is definitely a challenge but I think with replays (room recordings) and mixing those into the feed next to live rooms they are on the right track.
If you want to support large rooms with hundreds or thousands of participants well be aware that p2p might run into issues if speakers are bandwidth constrained (since every speaker has to send their audio to every other participant). That's why we've added a mode where the speakers are p2p (low latency) and also send their audio to the server which then sends it to the audience members (SFU).
Edit: out of the box you get p2p for speakers and SFU for audience members, you can configure Jam to not use the SFU
Instead, how is it better than Jitsi and Mumble, given that they are already well tested and widespread?
That said: if you are looking for something that has room concepts close to Clubhouse or Twitter Spaces (you see who is in the room, who is speaking, you can move people between audience and stage and so on) and an easy way to add those rooms to existing (web) or mobile apps then Jam is great out of the box. If you are looking for screen sharing or video then Jitsi is a better starting point right now I think.
Mumble I am not very familiar with but it looks interesting. As far as I understand it is not web based but like Jam it also is p2p and uses opus for audio (low latency, high quality)? Perhaps someone who knows Mumble can do a comparison.
Your use of Opus and the option to run a SFU makes this a suitable replacement of Mumble for meetings, like in the Pirate Parties around the world. We are heavy users of Mumble.
Jam is open source so you can look at the code but also make changes if you want to (e.g. if you prefer different reaction emoji). While not trivial it definitely is a great option to have imho.
Last but not least we designed Jam in a way that works well stand-alone but also makes it easy to integrate in existing web and mobile apps. For example there are people who run forums/communities or saas b2b apps (e.g. productivity tools) who want to add audio rooms as a feature and with Jam they can just grab the code and add rooms using an iframe (or use the JavaScript library for more advanced integrations). Not sure if that's possible with teamspeak, ventrilo or discord?
Jam is p2p WebRTC w/ low-latency and high-quality audio (opus) so it _should_ work well for competitive gaming. If you are looking for an audio chat tool designed for gaming the existing solutions you mentioned might be a better fit but happy to learn more about how we could make Jam better there as well.
I'd like to try a server with it and test a bit, but wonder if I self hosted, could I tell the software to use a TURN server only and block the p2p?
( For my use cases I need to prevent people from getting easy access to other people's ip addys )