Roves
Integrations

Steam integration

Building Roves with Steamworks support and using it from your game.

Edit on GitHub

Roves has a built-in, opt-in Steamworks integration — a full wrapper (achievements, stats, DLC, overlay, store) talking to its own dedicated steam: protocol handler in the engine. It's entirely off by default and adds zero overhead when unused.

Building it in

./mach build --release --features steam

Compile the flag in at build time — there's no runtime toggle. Every function in the JS-side wrapper degrades to a harmless default when Steam isn't compiled in, or isn't running, so you don't need a separate non-Steam build for players launching outside Steam.

Building it via Packmaster

You don't need a Rust/Python toolchain to get a Steam-enabled build — Roves Packmaster downloads a prebuilt shell rather than compiling one, and its published releases now include a Steam-enabled shell variant alongside the plain one. In Packmaster's "Steam" section, turn on the toggle and enter your Steam App ID; Packmaster downloads the matching _steam shell asset instead of the plain one and writes a steam_appid.txt next to the packaged game's executable (Valve's own convention for local testing outside the Steam client — Steam itself sets the App ID directly once your game is actually published there).

Using it from your game

import { steam } from "@drincs/roves-api/steam";

if (await steam.isAvailable()) {
  await steam.unlockAchievement("ACH_COMPLETE_CH1");
  await steam.openOverlay("achievements");
}

See roves-api → steam for the full API surface.

No Tauri, no window.__TAURI_INTERNALS__

This isn't the same code path as the Tauri build's Steam integration — Roves has no Tauri runtime to inject invoke(), so @drincs/roves-api/steam is a real, independent implementation, just deliberately shaped to feel familiar if you already know Tauri's API. If your frontend needs to run under both shells, branch between this package and @tauri-apps/api per shell.

On this page