NativeScript 280,332 (github.com/NativeScript/NativeScript (https://github.com/NativeScript/NativeScript 25,654 ), 25,653 stars) keeps JavaScript and drops the WebView: you describe screens in XML or with Angular 42,088 , Vue 5,482 , React 7,897 or Svelte 36,701 , and the runtime creates real Android and UIKit views. Every native API is reachable from JavaScript without a plugin. Device and Battery needed cordova-plugin-battery-status to read the battery; NativeScript calls Android's BatteryManager directly (not run here: this book does not build NativeScript apps):
import { Utils } from '@nativescript/core';
export function batteryPercent(): number {
const context = Utils.android.getApplicationContext();
const manager = context.getSystemService(android.content.Context.BATTERY_SERVICE);
return manager.getIntProperty(android.os.BatteryManager.BATTERY_PROPERTY_CAPACITY);
}The price is a second mental model. There is no DOM, so web libraries that touch document fail, styling uses a subset of CSS, and layout uses containers such as StackLayout and GridLayout: a Cordova 129 app cannot move over without rewriting its interface. The CLI is npm 2,036 install -g nativescript (9.1.1, command ns). Created at Telerik (now part of Progress), NativeScript moved to open governance in 2020 and has been an OpenJS Foundation incubating project since December 2020; @nativescript/core 9.1.2 shipped on 14 September 2026. React Native 36,878 (React Native) takes the same native-views approach with a far larger ecosystem.