Hi everyone - after a several months of work I'm releasing Brewser, a web runtime and app platform for the Switch.
What it is
A real browser-grade engine — V8 with JIT, Skia rendering, WebGL1/2 via Mesa — running as standard homebrew. Advanced Three.js scenes work, first Unity WebGL content runs (Unity's 2D Platformer Microgame plays unmodified, WebGL1 export), and it exposes the hardware APIs the stock browser never will: Web MIDI, WebSerial, WebUSB, WebBluetooth, all verified on hardware (WebSerial verified with CP2102 adapters and ESP32 boards with native USB). Your Switch can be a MIDI control surface, drive WS2812B LED panels through an ESP32, or show a planetarium with GoTo slewing.
Apps come from a curated catalogue at https://brewser.io/ - 28 apps at launch. Anyone can submit, every submission is security-scanned (static analysis + taint tracking) before it's published. The same apps also run on PC and mobile.
The shell is also fully themeable from plain files on your SD card — wallpapers (static images or animated GLSL shader wallpapers), CSS styles, toolbars, cursors, and on-screen keyboards. No rebuild, no toolchain: drop a file in `/switch/brewser/themes/`, add one JSON line, relaunch. Docs: https://docs.brewser.io/docs/customize - if you make a theme, post it in this thread, I'd love to see them.
Install
1. Download Brewser.nro from the release: https://github.com/natureglass/Brewser/releases
2. Copy it to /switch/ on your SD card
3. Launch from the Homebrew Menu
Requirements: tested on Atmosphère 1.10+ (older versions may work). An optional NSP forwarder is in the release as a separately labeled asset - not required, the NRO is the normal way to run it. SHA-256 checksums are on the release page. Brewser self-updates from signed releases, so you install once.
Network & ban risk
Brewser talks only to github.com (releases, app downloads) and brewser.io (catalogue). It never contacts Nintendo servers, and it works fine with DNS.MITM / Incognito / 90DNS. Update checks are against signed releases (ECDSA P-256)
What it is not
It doesn't run commercial Switch games, ROMs, or backups, and never will. It's also not a general-purpose browser replacement: the engine covers roughly 70-75% of real-world web surface (hand-written pages, jQuery-era code, forms, canvas/WebGL apps are solid; capture-phase events, complex querySelector, position: sticky, flex-wrap and CSS transitions are known gaps). The honest, per-release coverage map lives at https://docs.brewser.io/docs/engine-status.
Web games are welcome in the catalogue - the Unity WebGL work is exactly for that - but the heart of the platform is apps and hardware tinkering. Full FAQ: https://brewser.io/faq/
Source & feedback
Source: https://github.com/natureglass/Brewser - (MPL 2.0)
Bugs: preferably GitHub Issues, but I'll be watching this thread as well.
Feature ideas: there's an ideas board on the site where you can vote.
Credit where it's due: Brewser's engine is a fork of TooTallNate's nx.js, which did the original work of bringing V8 and Skia to Switch homebrew. Everything web-platform on top - the HTML/CSS/DOM engine, the from-scratch WebGL1/2 bridge, and the hardware APIs (WebSerial, WebUSB, WebBluetooth, Web MIDI, WebNN) - is Brewser's own, built on that foundation.
Thanks also to everyone in the scene whose docs made this possible.




What it is
A real browser-grade engine — V8 with JIT, Skia rendering, WebGL1/2 via Mesa — running as standard homebrew. Advanced Three.js scenes work, first Unity WebGL content runs (Unity's 2D Platformer Microgame plays unmodified, WebGL1 export), and it exposes the hardware APIs the stock browser never will: Web MIDI, WebSerial, WebUSB, WebBluetooth, all verified on hardware (WebSerial verified with CP2102 adapters and ESP32 boards with native USB). Your Switch can be a MIDI control surface, drive WS2812B LED panels through an ESP32, or show a planetarium with GoTo slewing.
Apps come from a curated catalogue at https://brewser.io/ - 28 apps at launch. Anyone can submit, every submission is security-scanned (static analysis + taint tracking) before it's published. The same apps also run on PC and mobile.
The shell is also fully themeable from plain files on your SD card — wallpapers (static images or animated GLSL shader wallpapers), CSS styles, toolbars, cursors, and on-screen keyboards. No rebuild, no toolchain: drop a file in `/switch/brewser/themes/`, add one JSON line, relaunch. Docs: https://docs.brewser.io/docs/customize - if you make a theme, post it in this thread, I'd love to see them.
Install
1. Download Brewser.nro from the release: https://github.com/natureglass/Brewser/releases
2. Copy it to /switch/ on your SD card
3. Launch from the Homebrew Menu
Requirements: tested on Atmosphère 1.10+ (older versions may work). An optional NSP forwarder is in the release as a separately labeled asset - not required, the NRO is the normal way to run it. SHA-256 checksums are on the release page. Brewser self-updates from signed releases, so you install once.
Network & ban risk
Brewser talks only to github.com (releases, app downloads) and brewser.io (catalogue). It never contacts Nintendo servers, and it works fine with DNS.MITM / Incognito / 90DNS. Update checks are against signed releases (ECDSA P-256)
What it is not
It doesn't run commercial Switch games, ROMs, or backups, and never will. It's also not a general-purpose browser replacement: the engine covers roughly 70-75% of real-world web surface (hand-written pages, jQuery-era code, forms, canvas/WebGL apps are solid; capture-phase events, complex querySelector, position: sticky, flex-wrap and CSS transitions are known gaps). The honest, per-release coverage map lives at https://docs.brewser.io/docs/engine-status.
Web games are welcome in the catalogue - the Unity WebGL work is exactly for that - but the heart of the platform is apps and hardware tinkering. Full FAQ: https://brewser.io/faq/
Source & feedback
Source: https://github.com/natureglass/Brewser - (MPL 2.0)
Bugs: preferably GitHub Issues, but I'll be watching this thread as well.
Feature ideas: there's an ideas board on the site where you can vote.
Credit where it's due: Brewser's engine is a fork of TooTallNate's nx.js, which did the original work of bringing V8 and Skia to Switch homebrew. Everything web-platform on top - the HTML/CSS/DOM engine, the from-scratch WebGL1/2 bridge, and the hardware APIs (WebSerial, WebUSB, WebBluetooth, Web MIDI, WebNN) - is Brewser's own, built on that foundation.
Thanks also to everyone in the scene whose docs made this possible.




Last edited by natureglass,












