A lightweight web browser for video game consoles and other low-dependency devices. Written in SDL2 using Chesto, it supports viewing simple websites.
Broccolini uses litehtml as its rendering engine. litehtml is not intended to be used in a "full-fledged" browser, but it is usable!
URL Webview | Tab Switcher |
---|---|
![]() |
![]() |
Video demo on YT: https://www.youtube.com/watch?v=I9lm6_RgElE
"Better than nothing" is the guiding philosophy of this project! It also has very limited JS support through either quickjs or mujs backends (see build instructions for details).
- renders HTML and CSS!
- inertia scrolling and touch-based navigation
- async image downloading
- history and bookmarks
- tabs and tab image previews
- very basic javascript support (via mujs or quickjs)
- private browsing mode
- restore previous tabs on re-launch
- full qwerty on-screen keyboard
- support for a few different font families
- base64 data uris and SVGs work
- pinch to zoom! and pan left/right
- add cursor to be controlled with the joystick
- fix images drawing on top of everything
- detailed history and managing bookmarks
- store and use cookies, local storage, etc (has initial support, but not done)
- handle POSTs and other non-GET requests
- handle different error codes
- video and audio embed support
- better javascript compatibility with more popular sites
- improve HTML/CSS compatibility
- no flexbox support
- form input elements (only button currently supported)
- iframes and frames
- probably many many more things
There are no stable releases available yet, however there are in-development builds for each platform under GH Actions.
Nightly links: Console builds - PC builds
This project uses snabbdom as a virutal DOM to apply updates that scripts execute on the page up to the litehtml/Chesto view. Snabbdom itself is Javascript, so it's parsed by the JSEngine (backed by either mujs or quickjs), and needs to be built separately, before it can be loaded at runtime.
To generate the ./resin/res/snappdom.js
file, run:
cd scripts
./build-snabbdom.sh
To verify that it's been loaded correctly, after running the app, check for:
[VirtualDOM] Loading Snabbdom bundle (45408 chars)
...
[JS Console] [VirtualDOM] Available Snabbdom exports: Fragment,array,attachTo,attributesModule,classModule,datasetModule,eventListenersModule,fragment,h,htmlDomApi,init,jsx,primitive,propsModule,styleModule,thunk,toVNode,vnode
[JS Console] [VirtualDOM] Snabbdom initialized successfully
As of this time, building must be done on a case-sensitive filesystem. Requires SDL2 development libraries for your operating system, and a C++ toolchain. (replace JS_ENGINE
with either quickjs
or mujs
)
git clone --recursive [email protected]:vgmoose/broccolini.git
cd broccolini
make pc JS_ENGINE=quickjs
After building, broccolini.bin
will be present in the current directory.
Support for the Wii U and Switch consoles is provided using homebrew libraries, thanks to community maintained SDL2 ports and toolchains. The Sealeo docker image contains pinned versions of these dependencies.
git clone --recursive https://github.com/vgmoose/broccolini.git
cd broccolini
export PLATFORM=wiiu # or switch
docker run -v $(pwd):/code -it ghcr.io/fortheusers/sealeo "make $PLATFORM"
If successful, broccolini.wuhb
or broccolini.nro
will be built. At this time, only mujs
is supported as a JS_ENGINE
on consoles.
This software is licensed under the GPLv3.