Two publishing paths
Native Unreal packages cannot run in the browser player. You can publish an Unreal game in one of two ways:
| Path | When to use it |
|---|---|
| HTML5/WASM export | You use a community toolchain that exports browser JavaScript, WASM and data files. |
| Pixel Streaming | You host the game, GPU servers and streaming frontend yourself and link the player URL. |
HTML5 export
Disable export compression (.gz and .br are not accepted), ZIP the exported files with index.html at the root and upload as Unreal HTML5. Test engine and toolchain compatibility with your own game.
For relay rooms, copy peerless-sdk.js and peerless-unreal.js from the Unreal integration beside index.html and load them before the game loader. Include PeerlessWeb.h in your Emscripten-targeted code:
#include "PeerlessWeb.h"
void AMyGame::BeginPlay() {
Super::BeginPlay();
PeerlessWeb::Ready();
}
void AMyGame::Tick(float DeltaSeconds) {
Super::Tick(DeltaSeconds);
const std::string message = PeerlessWeb::PollJson(); // "null" when empty
if (message != "null") HandlePeerlessMessage(message);
}
void AMyGame::SendMove(float X) {
PeerlessWeb::SendJson("{\"name\":\"move\",\"data\":{\"x\":" + std::to_string(X) + "}}");
}Poll every frame; the queue holds the latest 256 messages. Call PeerlessWeb::Leave() at teardown. The header belongs in your game project, not in the uploaded ZIP.
Pixel Streaming
Host the packaged game, signalling service and player frontend yourself, then set the player's public HTTPS address as the listing's play URL. PEERLESS does not run streaming servers, and the browser SDK is not a native Unreal networking SDK; use your streaming service's own session system.