Search documentation

Find pages, sections, and content across all docs.

WavedashDocs

Babylon.js

Build a Babylon.js game with your bundler of choice and ship it to Wavedash.

View example project on GitHub Playtest the example project

Babylon.js works with any JavaScript bundler — Vite, Webpack, Rollup, esbuild, Parcel, and others. This page covers the generic setup. The example repo uses Vite.

Install dependencies

npm install @babylonjs/core
npm install @wvdsh/sdk-js

@babylonjs/core provides all core engine classes (scenes, cameras, lights, meshes, and more). @wvdsh/sdk-js's default export is the live, fully-typed Wavedash SDK singleton.

Wire up Wavedash.init()

In the file where you create new BABYLON.Engine(...), import Wavedash and call init() once your scene is up.

Calling Wavedash.init() is required. Your game stays hidden behind the Wavedash loading screen until you do. Call it once your game is ready to play.

import Wavedash from "@wvdsh/sdk-js";
import * as BABYLON from "@babylonjs/core";

const canvas = document.getElementById("renderCanvas");
const engine = new BABYLON.Engine(canvas, true);
const scene = new BABYLON.Scene(engine);

// ... camera, lights, meshes ...

Wavedash.updateLoadProgressZeroToOne(1);
Wavedash.init({ debug: true });

engine.runRenderLoop(() => scene.render());
window.addEventListener("resize", () => engine.resize());

Methods, events, and payloads all autocomplete. Call updateLoadProgressZeroToOne(...) with intermediate values during async asset loading. init() automatically signals load completion, so call it last.

wavedash.toml

Point upload_dir at your bundler's output directory. For Vite and most other bundlers that's ./dist.

game_id = "YOUR_GAME_ID_HERE"
upload_dir = "./dist"

Local development

Produce a build, then run wavedash dev to serve it through the Wavedash sandbox.

SDK features

Once initialized, Wavedash exposes leaderboards, achievements, stats, and user data:

const user = Wavedash.getUser();

const lb = await Wavedash.getLeaderboard("high-scores");
await Wavedash.uploadLeaderboardScore(lb.data.id, score, true);

Wavedash.setAchievement("first_clear", true);