Skip to content

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.

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

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