Overview

The goal of Jam Launch is to get your multiplayer game built, tested, and deployed as quickly as possible. Specifically, it provides:

  • Cloud infrastructure bootstrapping
    • OpenID-based authentication for players, testers, and developers

    • In-editor game publishing

    • Game distribution and web player hosting

    • Game session provisioning

    • Cloud-based data persistence and querying

  • Pre-built multiplayer components - the open source example projects and addon provide reusable Godot components that can be used to jump-start any Godot multiplayer game project.

  • Tight Godot Integration - Jam Launch game deployments can be seamlessly created and monitored from a Godot editor plugin. Existing Godot multiplayer mechanisms like RPC and Synchronizer nodes work without any modification.

Motivation and Goals

Modern game engines and internet infrastructure make it easier than ever to create immersive multiplayer experiences, but cloud infrastructure and network configuration continues to hold back many projects. There are many wonderful guides that explain the many ways that one could go about building their multiplayer infrastructure from scratch or from a small collection of pre-made components, but many hobbyists and developer teams simply do not have the time to research and cobble together a reliable solution - they want something that will take care of the boring stuff so that they can focus on their game.

This is where Jam Launch comes in - its goal is to provide all of “the boring stuff” behind a simple abstraction that still gives you control over almost every aspect of the client and server. Some of the key design goals are:

  • Simplicity - The simplest use of Jam Launch in a game involves adding a single node and connecting one of its signals into your game logic. The classes provided by the addon have additional features that can be leveraged, but we are determined to keep this as easy as possible to adopt.

  • Flexibility - There is no proprietary protocol or server platform lock-in, so projects can be developed and tested in a “vanilla” Godot environment and remain largely decoupled from Jam Launch.

  • Capability - Jam Launch supports competitive, secure, low-latency multiplayer. Even the somewhat-simplistic (e.g. no predictive local movement) example game is pretty snappy in the web browser over websockets.

  • Value - Our primary goal with Jam Launch is saving your most precious resource, time, but we also hope to leverage scale in order to outcompete DIY alternatives and save one of your other precious resources, dolla dolla bills. Our unique pay-per-use model allows small teams and hobbyists to iterate on a budget without imposing limits on larger projects.

Architecture

While you don’t need to understand how Jam Launch works in order to use it, it’s useful to know what is going on “under the hood” so that you can have more confidence in the technical foundations and maybe even leverage parts of the public-facing system in your own services (e.g. the OpenID authentication). We believe that the more you know about how Jam Launch works, the more you will be convinced of its merits over your other options.

Authentication

Authentication in Jam Launch happens mainly with JSON Web Tokens (a.k.a. JWTs) that are signed by either AWS Cognito (for the web GUI), or an AWS KMS-based signing authority in Jam Launch. This provides a proven, open, cryptographically-sound foundation for developer and player identities, and enables detailed permission scoping.

While there haven’t been any integrations of the sort yet, Jam Launch’s use of an open standard like JWT means that game-related services under your control could rely on Jam Launch authentication. Similarly, it would not be hard to integrate an externally-managed JWT identity provider into a Jam Launch game if you were interested in a “white label” server provisioning system. Please reach out if you want help building something like this!

Server Provisioning

The server provisioning process in Jam Launch is decoupled from the session establishment API, so third-party or self-hosted servers are possible, but a default provisioner based on AWS EC2 instances and AWS Global Accelerator is provided by default. If you are interested in self-hosting or re-selling a provisioning service on Jam Launch, please get in touch!

When you are hosting authoritative multiplayer games in Jam Launch, your server is running one instance per active session. That means that if there are 50 people playing your game across 12 different games/sessions, there are 12 instances of your server running. There are several goals that Jam Launch aims to achieve in the process of allocating resources for your servers:

  • Get the server up and running quickly after a session is requested

  • Get the server running near the players

  • Isolate the server so that it only has access to game-specific data and the network connection that the peers connect on

  • Minimize the cost of running the server while maintaining the required performance

  • Run the server only for as long as players are connected and playing

Provisioning API

The Jam Launch provisioning API is how a published game that is downloaded by a player is able to spin up a new session (as described in the previous section) or join an existing session with a verifiable identity. As one of the primary interface layers between your game and Jam Launch, it strives to be simple, secure, and reliable.

The Jam Launch addon provides some helpful wrappers and abstractions for further simplifying this interface, but the “low-level” calls are just HTTP requests to REST endpoints that create, join, leave, or read sessions. The “special sauce” comes from a Jam Launch-issued “Game JWT” (or GJWT) that gives each player’s downloaded copy of their game the ability to interact with this API for only that game as only that player.

Data API

A JSON document-based Data API is provided in Jam Launch for persisting data across sessions. Like the server provisioner, data hosting is decoupled from the Jam Launch core and can be self-hosted and/or re-sold on the Jam Launch platform to other projects.

Developer API and Godot addon

If it was not already obvious, the goal of Jam Launch is to make developers’ jobs easier. The goal of the developer API and Godot addon is to take this goal to the next level and enable one-click building, deploying, and log monitoring from within the Godot editor.

The Developer API allows you to upload your project source to Jam Launch-maintained build servers that handle multi-platform exports and access-controlled web publishing.

The Jam Launch helper Nodes provide sensible default integrations with the Jam Launch APIs, but they are open and malleable to enable game-specific requirements.