Roves

VS Code Extension

Roves — run your already-built project locally from VS Code, no toolchain needed.

Edit on GitHub

Roves is a VS Code extension that runs a web project you've already built locally with the Roves shell, straight from VS Code's own Run and Debug UI — no Rust or Python toolchain, and nothing added to your project. It's the fastest way to try a change in the real engine during development, without reaching for Packmaster or the GitHub Action, neither of which are meant for a tight local edit-reload loop.

Not a real debugger

The extension contributes a "roves" debug configuration type so it can reuse VS Code's own Run and Debug UI (F5, a preLaunchTask to build first, the Debug Console, the stop button) as a launcher — there are no breakpoints, variables, or stack traces. It's a launch mechanism borrowing that UI, not a debugger.

Not a packaging tool

Roves (the extension) only runs your build locally — it doesn't produce anything distributable. For a real shippable bundle, use Packmaster (a desktop app) or the GitHub Action (CI). Source: DRincs-Productions/roves-vscode.

Install

Search for Roves in VS Code's Extensions view, or install directly from the Marketplace listing.

Use

Add a configuration to your project's .vscode/launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "roves",
      "request": "launch",
      "name": "Run with Roves",
      "preLaunchTask": "build",
      "distFolder": "dist"
    }
  ]
}

(VS Code's own "Add Configuration…" in launch.json, or the Run and Debug view's configuration dropdown, offers a Roves: Run snippet to start from.)

preLaunchTask is a plain VS Code task that builds your project first — e.g. in .vscode/tasks.json:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build",
      "type": "shell",
      "command": "npm run build",
      "presentation": { "reveal": "silent", "close": true }
    }
  ]
}

Press F5 (or Run and Debug → select the configuration → the ▷ button). The first time, this downloads the right roves_shell_<platform>[_steam].zip release asset for your OS from Roves' GitHub releases, showing progress in the status bar, and caches it in VS Code's own extension storage — never inside your workspace. Every following run reuses that cached shell instantly, unless you change the configured version.

Stop it from the debug toolbar's stop button, same as any other debug session. Output (the shell's own stdout/stderr) streams into the Debug Console.

How it works

No mach bundle, no packing — the extension writes a small launch.json next to the cached shell binary, pointing its url field directly at your project's built index.html by absolute path. bundle_launch.rs (the part of the engine that reads this file) resolves that path via a plain filesystem join, and joining an absolute path onto anything just returns the absolute path unchanged — so this works without your content ever needing to be copied, packed, or bundled next to the shell at all. See Content root & client-side routing for what that launch.json-driven boot actually does once the shell opens it (game://content/, not a raw file:// path).

Steam App IDs go through the same steam_appid.txt-next-to-the-binary convention Packmaster already uses.

Launch configuration properties

PropertyDefaultDescription
distFolder"dist"Folder (relative to the workspace root) containing your built index.html.
version"latest"Shell version to run, e.g. "v0.4.7". "latest" always resolves to the newest published release.
steamfalseRun the Steam-enabled shell variant instead of the plain one.
steamAppId""Steam App ID to run with. Only used when steam is enabled.
windowSize"1280x720"Initial window size, as <width>x<height>.
extraArgs[]Extra command-line arguments passed through to the shell on launch.

Known limitations

  • Only runs a loose (uncompressed) build — it doesn't pack content the way mach bundle --content-compress=auto does. Not needed for a local dev loop, and not something a real bundle for distribution should skip — use Packmaster or the Action for that.
  • Downloaded shells are cached per version/platform/Steam-variant and never cleaned up automatically — delete old ones yourself from the extension's storage folder if you want the disk space back.

On this page