Emulation Hardware Homebrew Project Brewser - web runtime & app platform (WebGL2, Web MIDI, WebSerial · V8 + JIT / Skia)

natureglass

Member
Newcomer
Joined
Dec 25, 2025
Messages
7
Reaction score
11
Trophies
0
XP
31
Country
Netherlands
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.


brewser_led_matrix.gif
brewser_midi-controller.gif


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.

brewser_on_switch.pngbrewser_settings-2.jpgbrewser_achievements.jpgbrewser_google-login.jpg
 
Last edited by natureglass,
I don't understand what this is.... Who is using a Switch for MIDI controllers and why?
Normally Switch homebrew means C/C++ and the devkitPro toolchain. Brewser makes the Switch run web apps instead: HTML/JS/WebGL from a curated catalogue. If you can build a web page, you can build a Switch app, and the same app runs on PC and phone too.

As for MIDI, the homebrew answer is "because the hardware can, and nothing let it before.", also a Switch is a really nice touchscreen with a USB port, and plenty of them are sitting half-retired in drawers now. But MIDI is just one of the 28 launch apps: there's a planetarium, a Home Assistant remote, LED panel control, even a Unity game. The MIDI one just happens to photograph well.
 
Normally Switch homebrew means C/C++ and the devkitPro toolchain. Brewser makes the Switch run web apps instead: HTML/JS/WebGL from a curated catalogue. If you can build a web page, you can build a Switch app, and the same app runs on PC and phone too.

As for MIDI, the homebrew answer is "because the hardware can, and nothing let it before.", also a Switch is a really nice touchscreen with a USB port, and plenty of them are sitting half-retired in drawers now. But MIDI is just one of the 28 launch apps: there's a planetarium, a Home Assistant remote, LED panel control, even a Unity game. The MIDI one just happens to photograph well.
Ah okay, thanks for the explanation. So, some cool stuff included and hopefully scope for a lot more... Nice work 👌
 
  • Like
Reactions: natureglass
It's also not a general-purpose browser replacement
Damn, that was my biggest hope when I saw this thread.
So I cannot use this to use things like PLEX, Jellyfin, Disney+, YouTube, Deezer and so on "in the browser"?

Regardless everything else reads pretty nice so thank you very much!
 
  • Like
Reactions: natureglass
Damn, that was my biggest hope when I saw this thread.
So I cannot use this to use things like PLEX, Jellyfin, Disney+, YouTube, Deezer and so on "in the browser"?

Regardless everything else reads pretty nice so thank you very much!
DRM services: Disney+ (and effectively Deezer) are a hard no, and always will be. They require DRM modules (Widevine and friends) that a homebrew runtime can't ship. No way around that one, so I won't pretend otherwise.

The full websites: youtube.com, app.plex.tv also won't fly today. Those are heavy modern web apps, and the engine currently covers ~70–75% of the web surface (docs.brewser.io/docs/engine-status). Brewser is primary an app platform with a curated catalogue, not a URL-bar browser.

But purpose-built clients for open services are exactly what this platform is for, and is closer than you'd think: I have a Twitch streaming client already running on hardware (https://brewser.io/stream-cast), and the runtime ships a real video pipeline. Jellyfin and Plex have open APIs and no DRM, so native-feeling clients for them are genuinely buildable. That's what the ideas board on the site is for (https://brewser.io/brewser-ideas), vote for it, or if you write any JavaScript, a Jellyfin client might be the perfect first Brewser app to build.
 

Site & Scene News

Popular threads in this forum