2026-11-03 10:47:00 -05:00
2026-11-03 10:47:00 -05:00
2026-11-03 10:47:00 -05:00

Jihad Browser logo

Jihad Browser

UXP inside, webOS alive, inshallah!

Three cards side by side, as in webOS card view, on a Frutiger Aero backdrop: Jihad Mojo on the Internet Archive's home page, Jihad Enyo on MDN's CSS reference with its adverts blocked, and Jihad Mochi on BBC News


What it is

Jihad Browser is the webOS browser with a different engine inside. The interfaces are the stock browser's — Mojo, Enyo and the newer Mochi design — and under them runs Goanna, the engine of the UXP platform that Pale Moon and Basilisk are built on, in place of the 2011 WebKit. So it is one of the UXP browsers: it runs their engine, their XPI add-ons and their Personas, lays its settings out in their panes, and has an add-on site of its own built on Phoebus, the software the family's sites run.

It installs next to the stock browser and changes nothing else on the device. It is written for webOS 3 as a whole, built for the TouchPad and TouchPad Go and tested on the TouchPad. It exists because people kept webOS going long after 2011 — webOS Internals, Preware, PivotCE, webOS Ports, the webOS Archive, Herrie82's TLS work, webOS CE 3.1.0 — and this is one more piece of that.

Version1.0 (Jihad Mojo 1.0.0, Jihad Enyo 1.0.4, Jihad Mochi 1.0.0)
Runs onwebOS 3.0.5 and webOS CE 3.1.0, on the TouchPad and TouchPad Go
EngineGoanna 6.9 (UXP), with its own NSS for TLS 1.2 and 1.3
FlashThe Flash Player 10.3 already on the device
LicenceApache-2.0 and MPL-2.0 for Jihad's own code; the bundled libraries under their own licences (see NOTICE)

Where it stands

Counted from the project's own records: every part of the browser has a list of acceptance criteria, each one met only when it was shown working on a TouchPad (or, for the build, on a clean machine). What is left is either still to build or waits for a person: a finger on the device or the owner's decision. The road below runs to the first public release.

Everything but tabs: ███████████████████░ 721 of 732 criteria met (98 %).

Area Progress Met Left What it covers
Engine and page drawing ███████████████████░ 99 % 104 / 105 1 for a person Goanna inside the webOS card, frames to the card, the card's messages
Drawing on the GPU █████████████████░░░ 87 % 36 / 41 4 to do, 1 for a person the Adreno 220 composes the page; WebGL; pan and zoom speed
The modern web ████████████████████ 100 % 27 / 27 done today's sites: TLS, missing features filled in, video
The three interfaces ███████████████████░ 98 % 120 / 122 2 for a person Enyo, Mochi and Mojo
Touch and keyboard ████████████████████ 100 % 39 / 39 done taps, gestures, the on-screen keyboard
Settings and services ████████████████████ 100 % 60 / 60 done the settings panes, downloads, history, printing
Add-ons and Personas ███████████████████░ 98 % 169 / 171 1 for a person, 1 with tabs XPI add-ons, plugins, Personas, the add-on site
Privacy and security ████████████████████ 100 % 50 / 50 done the ad and tracker blocker, proxies, certificates
Building and updating ███████████████████░ 99 % 116 / 117 1 for a person one repository builds every package; engine updates; licences
Tabs ░░░░░░░░░░░░░░░░░░░░ 0 % 0 / 27 held groundwork only, held by the owner's decision
The owner's finger round ░░░░░░░░░░░░░░░░░░░░ 0 % 0 / 41 41 for a person the checks only a finger on the device can make

The road to release

flowchart LR
  nComplete["Complete<br/>The modern web<br/>Touch and keyboard<br/>Settings and services<br/>Privacy and security"]:::done
  nWaiting["Built, waiting on a person<br/>Engine and page drawing<br/>The three interfaces<br/>Add-ons and Personas<br/>Building and updating"]:::owner
  nWork0["Drawing on the GPU<br/>36 of 41, 4 to do"]:::doing
  nFinger["The owner's finger round<br/>41 checks"]:::owner
  nReview["Last review and fixes"]:::todo
  nRelease(("Release")):::goal
  nTabs["Tabs: groundwork<br/>0 of 27, held"]:::held
  nComplete --> nFinger
  nWaiting --> nFinger
  nWork0 --> nFinger
  nFinger --> nReview --> nRelease
  nTabs -.-> nRelease
  classDef done fill:#2e7d32,stroke:#1b5e20,color:#ffffff
  classDef doing fill:#f9a825,stroke:#f57f17,color:#000000
  classDef owner fill:#1565c0,stroke:#0d47a1,color:#ffffff
  classDef todo fill:#eeeeee,stroke:#9e9e9e,color:#000000
  classDef held fill:#bdbdbd,stroke:#757575,color:#000000,stroke-dasharray: 4 3
  classDef goal fill:#6a1b9a,stroke:#4a148c,color:#ffffff

Green is complete, amber still has work to do, blue waits for a person at the device (the finger tests are gathered into one round at the end), grey is not started or held. Whether tabs come before or after the release is the owner's call. Regenerated by tools/readme-progress.py from context/kits/ and docs/FINGER-TESTS.md.


What it does

The stock browser opens little of today's web; Atlas Browser brings a current WebKit to webOS. What follows is what Jihad adds that neither has.

Flash next to the modern web

The Flash game Bloxorz running full-page in Jihad Enyo

webOS shipped with Flash, and every browser since has dropped plug-ins. Jihad keeps the device's own Flash Player 10.3 working on today's pages: animation, sound, touch and keys. Flash runs in its own process with its own frame clock, so a game keeps its pace while the page does its work. Bloxorz runs straight from the Internet Archive.


Add-ons and Personas

Left: about:addons in Jihad Mojo, with Palefill installed. Right: about:personas in Jihad Mochi, the gallery of Personas with Wear and Take off

  • XPI add-ons install from a web page and are managed in about:addons, as in Pale Moon and Basilisk. Palefill, which fills in web features the engine lacks, comes installed.
  • Personas give the toolbar and buttons a picture and colours of their own. Two come with Jihad: Free Palestine, Battir's terraced olive hills from a CC BY 2.0 photograph by Labour Palestine, and Aurora Silk, drawn for Jihad in the glossy style of the screens webOS grew up with. about:personas is Jihad's own gallery: Wear, Take off, Remove, Undo, Install from file, and a search of Jihad's add-on site, addons.riverstonerelay.org, and of addons.mozilla.org, whose themes install with one confirmation. Persona sites made for Firefox, Pale Moon and Basilisk work too. Each interface keeps its own, so every card can look different.

Settings

Left: the Privacy pane of Jihad's Settings page in Jihad Enyo. Right: about:config in Jihad Mochi

A Settings page in Pale Moon's panes (General, Content, Privacy, Security, Advanced, About): search engine, home page, start-page links, cookies, history, fonts per script, smooth scrolling, frame rate — more than 55 options. Under it, about:config with every preference the engine has.

HTTPS

howsmyssl.com in Jihad Mojo: Version Good, 'Your client is using TLS 1.3'

Every webOS release shipped a 2009 OpenSSL that speaks TLS 1.0 at best, with a root store from 2010, which is why the stock browser lost most HTTPS sites and other browsers on webOS need the community's TLS packages or webOS CE. Jihad does not use the device's OpenSSL. Goanna brings its own NSS with Mozilla's root list, so HTTPS works the same on a stock 3.0.5 device as on CE 3.1.0; howsmyssl.com rates the protocol version Good, TLS 1.3.


Ads and trackers

Jihad refuses loads from the hosts on EasyList and EasyPrivacy before they leave the device and hides the frames adverts leave, in all three interfaces, with no add-on to install. The lists are bundled and refreshed from easylist.to every four days; Settings → Privacy switches it, shows the list versions and counts what was refused. (The lists are by The EasyList authors, used under the GNU GPL v3 or later; see CREDITS.md.)

The browser's identity

Jihad says it is Firefox 52.9, which it is at heart. When a site's bot check turns that away (Cloudflare's "verifying you are human" page, Startpage's captcha gate), Jihad comes back once as a current Firefox, header and script alike, and remembers the site; Settings → General lists the sites and forgets them on request. YouTube is shown its mobile site, which is a quarter of the desktop page's script. The few web platform pieces the engine lacks and modern pages assume (popover, inert, CSSStyleSheet.replace, Intl.ListFormat and the like) are supplied to each page before its scripts run, only where the engine has none.

Also

  • Three interfaces, one engine: Mojo with its round buttons, the classic Enyo browser, or the newer Mochi design. Install one or all three; each keeps its own profile, add-ons, Personas, history and bookmarks.
  • Printing to the IPP or AirPrint printer on your network.
  • DuckDuckGo Lite for search and home page; referrer rules honoured.
  • Pages are drawn on the TouchPad's GPU (the Adreno 220, through the engine's own compositor), and frames keep coming while a page's script runs: a pinch or a pan is answered while the page is busy. WebGL 1 works on it. user_pref("jihad.gpu.enabled", false); in an interface's profile goes back to drawing in software.

Installing

Install the .ipk for the interface you want with Preware or WebOS Quick Install:

Interface Package
Jihad Mojo (lightweight) net.riverstonerelay.jihad-browser-mojo
Jihad Enyo (the classic browser) net.riverstonerelay.jihad-browser
Jihad Mochi (newer design) net.riverstonerelay.jihad-browser-mochi

Developers: start at docs/PICKUP.md (current state), docs/DEVICE-BUILD.md (building) and docs/ENGINE.md (how Jihad uses the engine, and how to update it).


Building

Jihad builds on any x86_64 Linux from this repository alone. Everything it compiles or packages is in the repository, in a git submodule it pins, or fetched by one of its scripts and checked by sha256; the parts that care about the host's age run in podman containers. The host needs git, podman, curl, binutils and xz (and gcc, make and the libusb-compat headers for novacom), about 40 GB of disk, and several hours the first time, most of it the engine.

git clone --recurse-submodules https://git.trueog.net/NotAlexNoyle/Jihad-Browser.git
cd Jihad-Browser
tools/host/build-novacom.sh          # novacom + novacomd, into tools/host/bin/
sudo -b tools/host/bin/novacomd      # keep it running while a device is plugged in
build/webos-oe/build-all-device.sh   # plug in a TouchPad the first time: eight of its libraries are copied once

The packages land in build/webos-oe/out-ipk/. Install them with Preware or WebOS Quick Install, or with build/webos-oe/push-variant.sh mojo (or enyo, mochi) over novacom. The packages per distribution, what each step fetches, and the OpenEmbedded and desktop routes are in docs/DEVICE-BUILD.md.


Caveats

Everything above is measured on a TouchPad; the rest of this list is what it does not do yet, or does with a catch. Site by site, with causes and what was tried: docs/MODERN-WEB.md.

  • Only the TouchPad has been tested in hand (on webOS 3.0.5, then webOS CE 3.1.0); the TouchPad Go runs the same binaries at the same resolution and is covered by that equivalence, not by a device test. Other webOS 3 devices should work and have not been tried.
  • The TLS fix covers Jihad only. The stock browser, Mail and the system services still use the device's own OpenSSL; the webOS Archive guide covers those. Keep the clock set: certificate checks need the right date. howsmyssl.com's one "improvable" mark is post-quantum key agreement, which the engine does not have.
  • Frame rates are the device's. Drawn on the GPU, a simple page pans at 30-36 frames a second and desktop Wikipedia at 23-24 (its two pinned side panels are drawn again for every frame); the first frame at a new zoom comes within a quarter of a second most of the time. Mochi's text can look soft at some zoom levels.
  • WebGL is version 1 on a 2011 GPU. A 480-pixel spinning cube draws at 21-25 frames a second and reaches the card at about 20 (a smaller canvas reaches the card faster); four extensions desktop browsers offer are missing (ANGLE_instanced_arrays, WEBGL_compressed_texture_s3tc, EXT_blend_minmax, EXT_shader_texture_lod).
  • Modern single-page applications are slow. A page built as one large script (GitLab, Reddit's login page, DuckDuckGo's full results page) takes tens of seconds of script on this CPU, and the page is frozen while it runs. The desktop YouTube page is the worst of them, which is why Jihad asks YouTube for its mobile site.
  • Sites built as ES-module applications load their frame but not every script-driven part (GitHub's commit list and README, Mastodon's timeline): the engine's module loading is behind them.
  • DuckDuckGo's full results page shows its results, with its slide-out menu standing open at the top: the page is wider than the window and the card shows the strip past the edge where the page parks the menu. DuckDuckGo Lite, the default search, has no such page.
  • Some bot checks still refuse the engine. Akamai's (eBay) and Reddit's login gate on old.reddit.com do, with any identity. Startpage's search works after its proof-of-work check, which takes about four minutes on this CPU the first time and then holds for a week.
  • What no shim covers: CSS container queries, backdrop-filter, content-visibility, Intl.Segmenter, and H.264 in Media Source Extensions (WebM/VP9 plays). A page that needs one of those shows it.
  • palm-install skips the install scripts, so a package installed with it does not work. Use Preware, WebOS Quick Install or push-variant.sh.
  • Flash Player is the device's own and is not distributed with Jihad; a device without it has no Flash.

Thanks

HP's isis-project (the browser this forks), the UXP platform, Pale Moon, Basilisk and Palefill, Herrie82 and Atlas Browser, the webOS Archive, webOS Internals, Preware, PivotCE and webOS Ports, and everyone still carrying a webOS device in 2026.

Licensing

Apache-2.0 (the interfaces, the adapter, the IPC daemon) and MPL-2.0 (the Goanna backend, and the engine, which is modified: its source is the jihad/uxp-RB_20261006 branch of UXP-Jihad, the patches in build/desktop/patches/). The packages also carry the libraries the engine runs on, each under its own licence: glibc (LGPL-2.1), the GCC runtime (GPL-3.0 with the Runtime Library Exception), ALSA and GLib (LGPL), Expat, fontconfig, PCRE, libpng, zlib (permissive), FreeType (FreeType License), the engine's own about:license contents, FFmpeg 4.4.5's H.264/AAC/MP3 decoders (LGPL v2.1+, the two libraries built from unmodified source by build/webos-oe/build-ffmpeg-arm.sh), Lato (SIL OFL, Mochi package), and the Personas by other authors (CC BY / BY-SA, credited in CREDITS.md). NOTICE names every one, with where its text ships and where its source is. Palefill is MPL-2.0, shipped unmodified. Pale Moon, Basilisk and Moonchild branding is removed from the engine build; "Goanna" names the engine, Moonchild Productions' trademark, used to say what the browser runs on. Flash Player is the device's own and is not distributed. HP's SDK, downloaded by the build for its compiler, stays under HP's terms and nothing of it is redistributed. See LICENSE, NOTICE and CREDITS.md.

Palm, webOS, Pre, TouchPad and Synergy are trademarks of their respective owners. Jihad Browser is an independent community project, not made, endorsed or supported by HP, Palm or LG. Screenshots were taken on a real TouchPad.

S
Description
Goanna inside, webOS alive, inshallah.
Readme
124 MiB
0 Stars 1 Watchers 0 Forks
Languages
C++ 47.2%
JavaScript 20%
Shell 15%
HTML 5.8%
C 4.7%
Other 7.3%