Skip to content

vgmoose/broccolini

Repository files navigation

broccolini

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
Wikipedia demo Tab overview

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).

What Works

  • 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

To Do:

  • 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

Download

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

Building runtime dependencies

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

Building for PC

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.

Building for Consoles (using Docker)

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.

License

This software is licensed under the GPLv3.

About

Web browser with controller and touch screen support, designed for video game consoles

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published