
Introductory Documentation
Updated October 2023
Introduction
Welcome to Mozilla Hubs Community Edition, a self-hosted virtual worlds platform for educators, teams, and organizations.
By reading this document, you will:
- Learn more about what Hubs Community Edition is
- Understand how to deploy Community Edition to Google Cloud Platform
- Learn how to deploy Community Edition to your own Unix-based server stack
- Explore the infrastructure underlying Hubs Community Edition
You can read Mozilla's Community Edition announcement from July on Hubs Creator labs here.
If you have additional questions about Hubs Community Edition or Hubs as a whole, Mozilla developers are available to answer your questions on the Hubs Discord server.
What is Hubs Community Edition?
Prior to the release of Community Edition, people who wanted to create their own Hub could either:
- Use Hubs Starter for free
- Subscribe to a paid Hubs plan for greater capacity and asset storage
- ⭐ Deploy Hubs Cloud on Amazon's AWS infrastructure
⭐ The goal with Hubs Cloud was to allow organizations to deploy Hubs on infrastructure that they controlled (as much as one can control infrastructure hosted by Amazon), rather than paying Mozilla to maintain that infrastructure on their behalf. However, since launching Hubs Cloud:
- The Hubs team made several changes to the Hubs codebase that didn't propagate to Hubs Cloud instances, either due to lack of resources or because customers couldn't easily integrate those changes
- It cost the Hubs team and Hubs Cloud customers significant resources to keep up with Amazon's platform updates
- The Hubs team understood that many organizations need to deploy Hubs on cloud computing platforms that aren't Amazon's
To resolve these issues and more, the Hubs team is ceasing support for Hubs Cloud on January 1, 2024 and launching Hubs Community Edition.
With Hubs Community Edition, anyone can deploy the full Hubs stack on any Linux-based infrastrucure, including AWS, Google Cloud, and even your own Linux computer.
Continue reading to learn how to deploy Hubs Community Edition. You can also skip ahead to learn more about the infrastructure of the Hubs CE software stack.

Understanding the Hubs CE Infrastructure

The product known as "Mozilla Hubs" is comprised of several powerful pieces of software. For example, when you visit a Hub with your Web browser, you are interacting with the Hubs Client. You can read the client's JavaScript source code here on GitHub.
The Hubs Client itself interacts with several other pieces of software, such as:
- Reticulum, Hubs' networking and API server
- Dialog, Hubs' WebRTC voice and video communication server
The Hubs Client, Dialog, and Reticulum are just three components of a larger stack of software. Each of those stack's components are individually configured and networked to other components in order to make Hubs work properly.
Rather than require developers to download, install, configure, connect, and update each of the stack's components individually, the Hubs team has developed the product known as "Hubs Community Edition". Hubs CE simplifies and automates most of that complex deployment process using software called Kubernetes, which is a containerized software orchestration system.
If you are already familiar with containerized software and Kubernetes, tap here to skip ahead to the "Hubs' Containerized Services" section.
Containerized Software Introduction
Consider the Web browser you are using right now to view these words:
- Unless that browser was installed onto your device from the factory, you first had to download the version of your browser corresponding to your operating system.
- Then, you installed the browser, perhaps specifying a directory into which its application files were placed.
- After that, you opened the browser. Perhaps you then signed into a Firefox account, or a Google account.
- Maybe you then installed an ad blocker extension, or a password manager.
- You might have navigated to a website and added it to your favorites bar...
Imagine if you could package up the complete state of your Web browser installation - including its configuration settings, logged-in accounts, extensions, browser history, favorites, and more - and make use of that package on any other computer, regardless of operating system.
Similarly, imagine if you could package up the complete state of any application - including its dependencies, libraries, configuration files, and application code - and run that package on any other computer...
This is possible using open-source software called Docker. A Docker Container is a process executed on a computer that runs its own packaged and configured software. You can learn more about Docker and Docker Containers here on Docker Docs.
It is common for self-hosted software to be distributed as Docker Containers to aid in swift software deployment with minimal configuration.
Other examples of popular software that is packaged as a Docker Container include:
Many components of Hubs Community Edition run inside separate Docker Containers. By themselves, these Containers don't know much about each other. For example, if you ran the Reticulum
Container on your computer, but didn't run the Dialog WebRTC communication
Container, people who connected to your Hub would be able to see each other, but not hear each other.
So, we need some way for these Containers to connect to each other. We need some way for people who connect to a given Hub to also be able to connect to that Hub's associated Dialog server. We need to be able to, for example, update the Dialog container's code without bringing down the Reticulum container. How do we coordinate all of these Containers? 😵💫
Kubernetes!
Kubernetes, shortened to K8s, acts as an organizer for containerized software.
A Kubernetes deployment, called a "cluster," consists of two parts:
A control plane 🎛️
- The cluster's control plane is responsible for maintaining the state of the cluster as defined by an administrator.
One or more nodes 🖥️
- The cluster's nodes are virtual or physical computers that run software defined by the control plane.
- Each node contains a set of one or more pods. A given pod shares storage and network resources.
- Each pod runs one or more containers.

To deploy software built using Kubernetes, a developer must supply the K8s executable with a plain-text configuration file describing the cluster's pods, those pods' containers, the computing resources that a container needs to function, networking information, and more. This configuration file is called a deployment spec.
For example, a Hubs developer might write a configuration file that says "I want my K8s cluster to run version ret.prod.220712.200
of the Reticulum server on port 9100 and version dialog.prod.220303.63
of the Dialog server on port 4443."
The control plane would ingest that configuration file and instruct its nodes to download and run that specific, containerized software.
Kubernetes clusters can be deployed on many types of computers, including:
- Your home desktop computer
- Two $35 Raspberry Pi computers
Computers owned by a cloud services provider, such as:
Hubs' Containerized Services
What follows is a table of each Container that makes up Hubs Community Edition:
Service | Purpose |
---|---|
The Hubs client for Web browsers. | |
Hubs' networking and API server. Handles client authorization, avatar positioning, object manipulation, and way more. | |
A WebRTC audio and video communication server. Contains a WebRTC Selective Forwarding Unit. For more information about how Hubs uses WebRTC, visit this resource. | |
A TURN and STUN server used for WebRTC communication. For more information about how Hubs uses WebRTC, visit this resource. | |
A web-based content authoring tool used to create custom 3D environments for Hubs. | |
A service used to generate thumbnails from images. | |
A service used to convert video to a Hubs-compatible format. Uses | |
A lightweight connection pooler for PostgreSQL. Rather than making new, expensive PostgreSQL database connections for every client or query, a "connection pooler" creates a long-lived group of connections to a database, and reuses those connections as necessary. This improves database access performance and availability. | |
A service used to take screenshots of websites. Will not function in Community Edition initally, since the current iteration of the service relies on S3. A local storage update is in development. |
Other Hubs Services
These services are required to run Hubs. These services exist outside the Kubernetes environment that hosts Hubs' Containerized Services:
Service | Purpose |
---|---|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vel lectus vel nisl tincidunt tristique. Pellentesque non magna mauris. | |
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vel lectus vel nisl tincidunt tristique. Pellentesque non magna mauris. | |
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vel lectus vel nisl tincidunt tristique. Pellentesque non magna mauris. |
