Quick answer: For browser games, Bugnet is the most game-shaped option: a script-tag SDK that works with Phaser, PixiJS, Three.js or plain canvas, captures errors and unhandled promise rejections with a canvas screenshot, and adds an in-game report widget, plus native support for Construct 3 and Unity WebGL. Sentry, BugSnag, TrackJS and Rollbar are mature JavaScript error monitors built for web apps; pick one of them if your game shares infrastructure with a web product.
Web games break in their own ways. Everything renders to a canvas, so a stack trace without a screenshot tells you little. WebGL contexts get lost on low-memory phones. Portals embed your game in an iframe on someone else's domain. And browser JavaScript error tools were designed for forms and dashboards, not frame loops. Here is how the options compare for HTML5 games in 2026.
What matters for web games
- Visual context. A canvas screenshot at the moment of the error, because the DOM tells you nothing about what was on screen.
- Readable errors. Errors from scripts on another origin show up as a bare “Script error.” unless the script is served with CORS headers and loaded with the
crossoriginattribute. Minified bundles need source maps to be readable. - Browser and device details. User agent, screen size and memory, because a bug on Safari on iOS is a different bug from one on Chrome on Android.
- Player reports. Most web game bugs (stuck levels, broken input) never throw, so players need a way to tell you.
- Small footprint. Every kilobyte counts on a portal's load screen.
At a glance
| Tool | Built for | Canvas screenshot | Player reports | Game engines |
|---|---|---|---|---|
| Bugnet | Games | Yes | Built-in widget | Phaser, PixiJS, Three.js, plain canvas; Construct 3 addon; Unity WebGL via the Unity SDK |
| Sentry | Web apps and services | Not by default | User feedback widget | Any JavaScript |
| BugSnag | Web and mobile apps | No | No | Any JavaScript |
| TrackJS | JavaScript errors in web apps | No | No | Any JavaScript |
| Rollbar | Web apps and services | No | No | Any JavaScript |
| BetaHub | Game beta tests | Reports with video | HTML widget | Unity WebGL, PixiJS, Phaser, Three.js |
Bugnet
Add one script tag (https://bugnet.io/sdks/web/bugnet-sdk.js) and call Bugnet.init({ apiKey, serverUrl: 'https://api.bugnet.io', gameVersion }). The SDK listens for uncaught errors and unhandled promise rejections and files them with a screenshot of your canvas, browser and device details and a performance snapshot (memory where the browser exposes it). Bugnet.showWidget() opens a report form players can use from your pause menu, and reportBug() accepts your own metadata and file attachments. On Studio Plus, session replay records the canvas and attaches the recent footage as a WebM video.
Construct 3 has a dedicated addon usable from event sheets, and Unity WebGL builds use Bugnet's Unity SDK. Everything lands in one tracker with grouping, a public known-issues page and integrations. Free to start; see crash reporting for Phaser games for a worked example.
Sentry, BugSnag, TrackJS and Rollbar
These are mature JavaScript error monitors, with features such as source map support and alerting, built for web applications. They work in a game, and if your game shares a codebase or infrastructure with a web product they keep everything in one place. What they do not give you out of the box is game context: canvas screenshots, frame rate, scene, and a player-facing report form designed for a game. Sentry does offer a user-feedback widget and session replay designed around web pages.
BetaHub
BetaHub's HTML widget works with Unity WebGL, PixiJS, Phaser and Three.js and attaches gameplay video to player reports. It is oriented around running beta tests with a community and priced per developer. See BetaHub alternative.
Which should you pick?
- A web game on itch.io, a portal or your own site: Bugnet.
- A Construct 3 game: Bugnet's Construct 3 addon.
- A game inside a larger web product you already monitor: your existing tool (Sentry, BugSnag, TrackJS or Rollbar), plus a player report form.
Frequently asked questions
What is the best error tracker for a Phaser game?
Bugnet is built for games like Phaser titles: a script-tag SDK that captures errors and unhandled promise rejections with a canvas screenshot and includes an in-game report widget. General JavaScript monitors such as Sentry also work but are designed around web apps.
Why do my web game errors just say Script error?
Browsers hide details of errors thrown by scripts loaded from another origin. Serve those scripts with CORS headers and load them with the crossorigin attribute to see the real message and stack.
Can I capture a screenshot of a canvas game when an error happens?
Yes. Bugnet's web SDK attaches a screenshot of your game canvas to reports when screenshot capture is enabled for the project.
Does Bugnet support Construct 3 and Unity WebGL?
Yes. Construct 3 has a dedicated Bugnet addon usable from event sheets or JavaScript, and Unity WebGL builds use Bugnet's Unity SDK.
How do players report bugs in a browser game?
Add a report form to your pause menu. Bugnet's web SDK provides one you open with Bugnet.showWidget(), and reports arrive with a screenshot and browser details.
In a web game the screen is the state. Any error report without a picture of it is half a report.