niso compared
Checked against 2994ef5 on 2026-11-10 by Capy (review pass: Subagent 124 and fable). The files it covers are unchanged since.
niso sits between the web stack and native toolkits: the app’s API is the web’s DOM and CSS, and what the user sees is the platform’s own views. The comparisons below are about architecture, not quality; each of these projects is far more mature than niso.
A browser or a WebView
Section titled “A browser or a WebView”Capacitor, Tauri and similar frameworks run the app in the platform’s WebView
(WKWebView, Android’s WebView, WebView2), and Electron ships Chromium. The
whole web platform is there, and the UI is drawn by the browser engine: a
<button> looks like a web button unless the app styles it.
niso has no browser engine. It implements the DOM, CSS and a set of web APIs
itself, and hands the laid-out tree to the native toolkit, so a <button> or a
switch is the platform’s control and text uses the platform’s fonts and
accessibility settings. The cost is coverage: niso implements a part of the web
platform, measured feature by feature in
Web platform support, and a page that relies
on something missing breaks where it would work in a WebView.
Other differences that follow:
- Navigation. A WebView loads documents; niso runs one document per app,
as a single-page app. The system back gesture doesn’t reach the page yet:
no host routes it to
history.back()(Navigation). - Security. A WebView isolates web content from the app. A niso page has its host’s trust. niso applies CORS to what a page reads from other origins, but it has no cookies, no Content Security Policy and no process isolation between origins (Security).
- JavaScript. On iOS only the system WebView may JIT. niso’s embedded engines are QuickJS (an interpreter) and Porffor (ahead of time to native code); a JIT comes through Node-API on desktop, and JavaScriptCore on Apple platforms is planned (Engines).
- Other languages. A WebView runs JavaScript. niso’s DOM is a C API too, so a Rust, C, Zig, Go or Java program can build the UI with no JavaScript at all (Native apps).
Electron
Section titled “Electron”Electron is Chromium plus Node for desktop apps: the full web platform and Node’s APIs, drawn by Chromium. niso targets phones, watches, TVs, cars and widgets as well as desktops, draws with native toolkits, and runs under Node, Deno or Bun when the app wants a JIT and Node’s APIs (Engines).
Running Electron apps on niso, with niso in Chromium’s place, is in progress
and not on main: the design and its status are in
Electron compatibility.
React Native
Section titled “React Native”React Native drives native views from JavaScript too, but through its own
component model (View, Text, Image) and a subset of CSS laid out by
Yoga, with React as the only UI library. A web app has to be rewritten for it.
niso’s API is the DOM itself, with CSS resolved by stylo, so React, Vue, Svelte, Solid or plain DOM code run as they do in a browser, and a library that only uses the DOM (a router, a drag and drop library) runs too, as far as niso implements the APIs it calls. Layout is niso’s, the same on every platform and compared with Chrome’s. Text is the exception: the fonts are each platform’s, so the same text measures and wraps differently on Apple platforms, Android and Linux, where the families come from fontconfig and depend on what’s installed (Linux notes). A framework that needs a niso adapter has found a niso bug (Decisions).
Flutter
Section titled “Flutter”Flutter apps are written in Dart and drawn entirely by Flutter’s own renderer,
including widgets made to look like the platform’s (Material, Cupertino). niso
apps are web pages or programs in any language with a C interface, and the
platform draws the controls: a switch on iOS is SwiftUI’s Toggle, not a
picture of one. niso draws only what has no native counterpart (box
backgrounds, borders, canvas), and lays text out itself so that inline content
is laid out by the same rules everywhere, with each platform’s fonts
(Text).
When niso isn’t the right choice
Section titled “When niso isn’t the right choice”- Your app needs the whole web platform today, or a browser feature niso doesn’t run yet: use a WebView.
- You need a stable, released toolkit: niso has no release.
- You want pixel-identical rendering on every platform: niso deliberately looks like each platform.
- Your app has to work with a screen reader: there’s no accessibility tree yet, so VoiceOver and TalkBack can’t read a niso app (Accessibility).