Quick answer: GameMaker extension functions returning -1 on HTML5 but working on desktop? Extensions need a JS implementation for HTML5 - check the extension's HTML5 source files.

Steam extension works fine on Windows. Same project HTML5 export returns -1 for every call.

Add HTML5 source

Extension > Files. The HTML5 export needs a .js source mirroring the desktop DLL's interface. Without it, calls silently fail.

Stub unsupported APIs

For desktop-only APIs (Steam, native filesystem), the HTML5 stub returns -1 or a sensible default. Document the gap.

Branch in GML

if (os_browser != browser_not_a_browser) {
  // HTML5 path
} else {
  steam_function();
}

Skip extension calls when running in browser. Cleaner than relying on the stub.

“Cross-platform extensions need per-platform sources. The HTML5 stub isn't free.”

If you target HTML5 alongside desktop, audit every extension call at project start. Easier than after release surprises.