Steam integration
Building Roves with Steamworks support and using it from your game.
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 steamCompile 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.