Fact-checked by Grok 2 weeks ago

NativeScript

NativeScript is an open-source that enables developers to build native mobile and cross-platform applications for , , , , and using , , and popular web frameworks such as , , , , and . It provides direct access to platform-specific APIs from code, allowing for high-performance apps with a single shared codebase without requiring knowledge of native languages like or Kotlin. Originally created in 2014 by , a Bulgarian software company later acquired by , NativeScript quickly gained traction among JavaScript developers for its ability to leverage web skills for native app development. In December 2020, it joined the as an incubating project, overseen by the software consulting firm nStudio, which has fostered its evolution into a fully community-driven initiative under the Linux Foundation's umbrella. As of February 2025, the latest version, NativeScript 8.9, introduces previews of Node-API enabled engines and enhanced support for modern tools like v4, underscoring its ongoing commitment to aligning with contemporary JavaScript standards. Key features of NativeScript include strong integration for type-safe development, a rich ecosystem of plugins via its marketplace, and tools like the NativeScript CLI for streamlined workflows including live reloading and cloud builds. It emphasizes natural platform performance and by rendering components natively rather than through web views, distinguishing it from hybrid frameworks. NativeScript also supports web deployment, enabling the same codebase to target browsers alongside native platforms, which promotes and accelerates development cycles.

History and Development

Origins and Founding

NativeScript was founded by , a company based in , , as an open-source framework aimed at simplifying cross-platform . The project emerged from Telerik's mobile team, which had been exploring native development challenges since 2010, recognizing the inefficiencies of building separate applications for , , and other platforms. On June 12, 2014, Telerik publicly announced NativeScript with the release of version 0.1 in preview, introducing it as a tool to leverage for creating truly native mobile applications while maximizing code reuse and performance. The primary motivation behind NativeScript's creation was to empower web developers familiar with to build high-performance native apps without the need to learn platform-specific languages such as for or for . This approach addressed a key pain point in mobile development: the fragmentation caused by differing and UI paradigms across platforms, allowing developers to access native directly from and share business logic across and . Initial development efforts centered on establishing a bridge that enables code to interact seamlessly with underlying native and , ensuring apps could utilize platform-specific UI components for an authentic without compromises in speed or functionality. In late 2014, shortly after NativeScript's announcement, was acquired by Corporation in a deal announced on and completed on December 2, for approximately $262.5 million. , a U.S.-based company, continued to sponsor and support NativeScript's early development, integrating it into their broader portfolio of developer tools while preserving its open-source trajectory under the Apache License 2.0. This acquisition provided additional resources to refine the framework's core bridging mechanisms and expand its foundational capabilities.

Key Milestones and Evolution

NativeScript was first announced by on June 12, 2014, as an open-source framework for building native mobile applications using , initially supporting core for and platforms. The framework saw its public release in March 2015, marking the beginning of broader developer adoption with initial support and direct access to native . Version 1.0 followed in May 2015, providing stable cross-platform builds and establishing a foundation for consistent and app development without compromises on native performance. In 2016, NativeScript 2.0 introduced official integration with 2, enabling developers to leverage Angular's component-based architecture for native mobile apps while maintaining full access to platform-specific features. This release aligned NativeScript with the growing popularity of , facilitating and enhancing productivity for web developers transitioning to mobile. By June 2017, support for was announced through the NativeScript-Vue plugin, allowing Vue's reactive paradigm to drive native rendering on mobile devices. These integrations expanded NativeScript's appeal, drawing in communities from established frameworks and contributing to its growth beyond vanilla applications. The framework's governance evolved significantly at the end of 2019, when (following its acquisition of ) initiated a transition to full community stewardship, encouraging open-source contributors to take greater ownership of development and maintenance. This shift from corporate sponsorship to a community-driven model culminated in 2020 with the selection of nStudio as a key steward, fostering sustained innovation through collaborative efforts. In December 2020, NativeScript joined the as an incubating project, further solidifying its community-driven status. NativeScript 8.0, released on March 31, 2021, advanced the platform with features like support, Webpack 5 integration, and improved accessibility, while later versions extended capabilities to non-mobile platforms, including experimental support for spatial computing applications. Major releases continued to emphasize and ecosystem compatibility, with NativeScript 8.9 arriving on February 27, 2025, introducing a public preview of Node-API enabled engines (such as Hermes and V8) for enhanced execution, along with widget creation tools and v4 integration. This version addressed community feedback on and tooling, solidifying NativeScript's role in modern cross-platform . In 2025, the community marked the framework's approximate 10-year milestone since its 2015 public debut, celebrating sustained growth through events and releases that highlighted its evolution into a versatile tool for native and emerging platforms.

Community Transition and Current Status

In late 2019, Progress Software announced an initiative to transition NativeScript's maintenance to the open-source community under the Apache 2.0 license, aiming to foster greater developer involvement and sustainability. This shift culminated in the formation of nStudio, a non-profit organization composed of long-time NativeScript contributors and former Progress partners, which officially assumed stewardship of the project on May 29, 2020. The handover ensured no disruptions to existing applications while emphasizing community-driven evolution. As of November 2025, NativeScript remains under active, community-led development through its primary repository, which has garnered over 25,000 stars, indicating sustained popularity among developers. The latest stable release, version 8.9.9, was published on September 9, 2025, incorporating runtime improvements for , , and platforms. Contributions are coordinated via GitHub issues and pull requests, with ongoing involvement from former and engineers affiliated with nStudio, alongside a of independent developers. The community supports engagement through an active server for discussions and a dedicated for release announcements and tutorials. Looking ahead, NativeScript's 2025 roadmap focuses on expanding platform compatibility, including enhanced support for via and deeper integration with web technologies for hybrid workflows. Additional priorities include compatibility with modern bundlers like Vite and RsPack, as well as initiatives like Open Native for broader ecosystem alignment. The project sustains momentum through developer events, such as virtual meetups, and certification programs to empower contributors, marking a of open-source innovation since its 1.0 release in 2015.

Overview and Core Concepts

Definition and Purpose

NativeScript is an open-source framework designed for building truly native cross-platform mobile applications using or . It allows developers to create apps that render native user interfaces directly through platform-specific APIs, bypassing the use of webviews or hybrid wrappers to achieve authentic native performance and appearance on each supported operating system. This approach enables the compilation of a single codebase into fully native applications for , , and emerging platforms such as . The primary purpose of NativeScript is to empower web developers with JavaScript expertise to transition seamlessly into native mobile app development without requiring knowledge of platform-specific languages like Swift or Kotlin. By providing direct access to native APIs within a JavaScript runtime, it facilitates the reuse of familiar web technologies—such as data binding and UI declaration via XML—while supporting integrations with popular frameworks like Angular, Vue, React, Solid, and Svelte. This bridges the gap between web and native ecosystems, allowing for efficient development of high-performance apps with a shared codebase across multiple platforms. In contrast to hybrid approaches that embed within native shells, NativeScript delivers full native capabilities, including optimal speed, precise fidelity to platform guidelines, and unrestricted access to device hardware and features. This eliminates common compromises in performance and often associated with hybrid solutions, making it particularly suitable for developers aiming to produce professional-grade native applications without deep platform-specific expertise.

Supported Platforms and Languages

NativeScript primarily targets mobile platforms, with full support for and available since its initial launch in 2014. The framework also extends to through its Web runtime, introduced in version 8.0, enabling the same codebase to render in modern browsers. Additionally, experimental support for Apple's Vision Pro () was introduced in version 8.6 and enhanced in 8.9; as of 2025, it uses the App Lifecycle. NativeScript further supports (since at least 2018) and (via extensions, with beta support since 2019). At its core, NativeScript uses and as the primary programming languages, providing direct access to native without requiring wrappers or bridges for these languages. It does not natively support non-JavaScript languages, though integrations with frameworks like , , and are built on top of this JavaScript foundation. This language choice facilitates a single codebase that leverages skills for native app creation. One of NativeScript's key strengths is cross-platform code sharing, where up to 90% of the code can be reused across , , web, , , and , with platform-specific modules handling differences such as components or . Developers structure shared logic in common files while isolating platform-unique implementations, promoting efficiency in multi-platform projects. For device compatibility, NativeScript apps require or later, 5.0 ( level 21) or higher, and modern web browsers supporting 2015+ features, such as recent versions of , , , and . These requirements ensure optimal and access to contemporary native features while maintaining broad device coverage.

Architecture and Structure

Runtime Environment

The NativeScript runtime environment serves as the foundational layer that enables JavaScript code to execute natively on mobile devices, directly interfacing with platform-specific APIs without intermediaries like WebViews. It leverages the V8 JavaScript engine for both Android and iOS platforms, allowing for high-performance execution of JavaScript while bridging to native code. This unified engine choice, with V8's embedding capabilities and support for JIT-less mode on iOS, ensures consistent behavior across platforms. The operates through a -driven binding system that generates proxies for native classes, methods, and properties at build time. is extracted from platform headers using tools like the iOS metadata generator, which employs APIs to parse public declarations and produce binary files containing details on native APIs, such as class structures and method signatures. These files are then linked into the application binary, and at , the uses this —along with platform-specific helpers like functions—to dynamically create JavaScript-accessible proxies. This approach allows seamless invocation of native code from , with automatic and handled by the . Central to the runtime is the @nativescript/core package, which abstracts essential platform APIs into cross-platform JavaScript interfaces. It includes modules for file system operations, such as reading, writing, and managing files and folders via classes like File and Folder; HTTP networking for making requests and handling responses through the Http module. These APIs ensure developers can interact with device hardware and system resources in a platform-agnostic manner. Unlike , which is a server-side built around V8 with a full of modules for I/O and networking, NativeScript's is optimized for mobile environments, lacking complete Node.js module support but remaining compatible with many packages that do not depend on server-specific features. Recent advancements, such as previews of Node-API enabled engines in NativeScript 8.9 (released 2025), further enhance flexibility by allowing the to support alternative engines like Hermes or QuickJS while maintaining direct native access. This mobile-centric design prioritizes low overhead, fast startup, and native performance over Node.js's broader, non-mobile-focused capabilities.

UI Declaration and Rendering

In NativeScript, user interfaces are declared using a declarative XML syntax that defines layouts and components, which is paired with or code-behind files for handling logic, data binding, and interactions. This approach separates the structure from the behavior, allowing developers to define the UI hierarchy in XML files (e.g., main-page.xml) while implementing event handlers and properties in corresponding .js or .ts files. For instance, a simple layout might use <StackLayout> to arrange elements vertically or horizontally, containing components like <Label> for text display or <Button> for user interactions, with bindings such as text="{{ myProperty }}" linking to variables in the code-behind. The XML declarations are parsed and rendered directly as native platform controls, bypassing any web-based rendering engine to ensure a truly native . A <Button> element, for example, instantiates a UIButton on and an android.widget.Button on , leveraging the platform's native rendering pipeline for optimal performance and responsiveness. This direct mapping to native widgets enables smooth animations and interactions at 60 FPS, as the UI updates occur within the platform's graphics system without the overhead of hybrid webviews. containers like <GridLayout> or <FlexboxLayout> further structure the native views, supporting properties such as row/column definitions or flex directions that translate seamlessly to or Android's ViewGroup equivalents. Styling in NativeScript employs a CSS-like syntax applied through external files, inline properties, or scoped rules, supporting selectors such as type (e.g., Button), class (.btn-primary), ID (#submit), and hierarchical (StackLayout > [Button](/page/Button)). Platform-specific overrides are achieved via dedicated files like page.ios.css and page.android.css or selectors prefixed with .ns-ios and .ns-android, allowing tailored adjustments for or visuals without duplicating code. CSS variables (custom properties) are fully supported for reusable values, declared at the root level (e.g., :root { --primary-color: blue; }) and overridden as needed. Recent versions integrate through the official @nativescript/tailwind plugin, enabling utility-first classes for rapid styling in both v3 and v4, with automatic handling of platform colors and gradients via CSS in v4. Navigation follows a hierarchical page model managed by the <Frame> component, which handles routing between <Page> instances representing individual screens. Each <Page> serves as the root UI container, encapsulating content within a single child view and optionally including an <ActionBar> for top-level toolbar elements like titles or navigation buttons, which abstracts the iOS UINavigationBar and Android ActionBar. Routing is performed programmatically via methods like frame.navigate({ moduleName: 'next-page' }) for forward navigation or frame.goBack() for backward, supporting modular page transitions with lifecycle events such as navigatingTo and navigatedFrom for state management. This structure enables stack-based navigation with back button support, while components like <BottomNavigation> or <Tabs> handle lateral routing at the same hierarchy level.

Key Features

Direct Native API Access

NativeScript enables developers to access platform-specific APIs directly from JavaScript or TypeScript code, allowing seamless interaction with iOS and Android native functionalities without the need for intermediate wrappers or bridges. This direct access is facilitated through the runtime's metadata generation and type marshalling, which automatically converts between JavaScript data types and native equivalents, such as numbers, strings, booleans, arrays, and objects. For instance, developers can import and utilize core modules that expose these APIs, like the module for handling device storage. A practical example of this access involves retrieving device information, such as battery level. On iOS, the UIDevice class can be invoked directly: const batteryLevel = UIDevice.currentDevice.batteryLevel;, which mirrors the Objective-C API and returns the battery percentage as a float value between 0.0 and 1.0. Similarly, on Android, the BatteryManager can be accessed via the application context: const batteryManager = androidApp.context.getSystemService(android.content.Context.BATTERY_SERVICE); const batteryLevel = batteryManager.getIntProperty(android.os.BatteryManager.BATTERY_PROPERTY_CAPACITY);, providing equivalent functionality to native Java code. These calls leverage the platform's runtime to execute native methods instantaneously from JavaScript. To handle platform-specific code in shared projects, NativeScript supports conditional imports and runtime checks, ensuring compatibility across and without compilation errors. Developers can use constructs like if (isIOS) { /* [iOS](/page/IOS)-specific code */ } else if (isAndroid) { /* [Android](/page/Android)-specific code */ }, where isIOS and isAndroid are utilities from the platform module, or import platform-specific references such as import { ios as iosApp } from '@nativescript/[core](/page/Core)/application';. This approach allows writing shared logic while branching for native-exclusive features, maintaining a single codebase. The primary benefits of this direct access include comprehensive utilization of native capabilities, enabling applications to leverage all platform features for enhanced performance and user experience. Notably, it extends to integrating third-party SDKs, such as for backend services or for location features, by incorporating them via platform dependencies like for or for , and then calling their s directly from . This mechanism, augmented by API reflection for dynamic binding, provides unparalleled flexibility in cross-platform development.

API Reflection and Binding

NativeScript employs a reflection-based system to automatically generate bindings for native and , enabling developers to access platform-specific functionality directly from or code without writing native language wrappers. This system relies on generation during the build process, which inspects native SDK headers and libraries to produce a compact representation of available , including classes, methods, properties, and enums. At runtime, this metadata facilitates dynamic creation, allowing seamless invocation of native code through the , such as V8 for or JavaScriptCore for . The reflection process occurs at build time and varies by platform. For iOS, the metadata generator uses Clang's , including HeaderSearch and RecursiveASTVisitor, to parse and headers from the SDK and any linked third-party libraries, extracting details like method signatures, property types, and protocol definitions while excluding unsupported constructs such as unions or variable argument lists. On Android, BCEL iterates through and Kotlin bytecode in dependencies, capturing public tied to the specified compile SDK version (e.g., API level 34 by default) and generating JNI signatures for interop. The resulting file, such as metadata-arm64-v8a.bin for Android, is embedded in the app package and loaded at via platform-specific mechanisms, like inline for iOS or dynamic linking for Android, to establish bidirectional bindings without deserialization overhead. This approach ensures that only whitelisted APIs are exposed, configurable via a native-api-usage.json file using wildcard rules for or inclusion, which helps optimize app size and by filtering out unused or sensitive native elements. Bindings created through this reflection are type-safe wrappers that encapsulate native classes, methods, and properties, providing objects that mirror native structures for intuitive access. For instance, developers can instantiate a native class like UIDevice on or BatteryManager on , call overloaded methods with automatic signature resolution based on argument types, and set/get properties with implicit type coercion handled by dedicated marshalling layers. Callbacks are supported by allowing functions to be passed as arguments to native methods, where the runtime registers them as proxies and invokes them on native events, ensuring thread-safe execution. users benefit from auto-generated declaration files (.d.ts) that infer types from the , enabling compile-time checks and IntelliSense support for native , including generics and interfaces where applicable. These wrappers handle non-JSON-serializable , such as native objects or buffers, through synchronous calls that bridge the and native realms without performance-degrading . Despite its comprehensiveness, the reflection system has limitations, as not all obscure or private native APIs are automatically included in the due to constraints or deliberate SDK restrictions, potentially requiring developers to target specific compile versions or exclude incompatible elements. Unsupported features, like iOS variable arguments or certain Android internal classes, cannot be bound automatically, and runtime mismatches—such as using a higher level than compiled for—may trigger exceptions. To address gaps, manual bindings can be implemented via custom plugins that extend generation or use direct native code integration, allowing third-party libraries to be wrapped explicitly with definitions. The reflection and binding mechanisms have evolved significantly in NativeScript version 8 and later, with enhancements focused on improved integration, such as refined declaration generation in the @nativescript/types package for better inference of native generics and reduced compilation errors during upgrades. Version 8.2 introduced optimizations to type resolution, addressing issues with platform visibility in projects, while subsequent releases like 8.9 added support for Node-API engine previews and finer metadata filtering to enhance error handling and developer experience. These updates build on earlier foundations, prioritizing embeddability and modern ecosystem compatibility without altering the core build-time reflection pipeline.

Performance Optimizations

NativeScript achieves high performance through its direct use of native components, enabling smooth rendering without the overhead of JavaScript bridges typically found in hybrid frameworks. This architecture allows applications to leverage the platform's native rendering pipeline, supporting fluid user interfaces at 60 frames per second () on capable devices by utilizing GPU for animations and transitions. Key optimizations include of modules via code splitting, which defers the loading of non-essential code until needed, reducing initial bundle size and improving startup times. For Angular-based applications, ahead-of-time (AOT) compilation further enhances performance by compiling templates and components at build time, minimizing runtime parsing overhead. Additionally, NativeScript employs WeakRef for , particularly in event handling and , to prevent memory leaks by allowing unreferenced objects to be collected without strong retention. Profiling tools integrated into NativeScript facilitate performance analysis, including the built-in inspector accessible via Chrome DevTools for capturing heap snapshots to identify memory issues and CPU tracing through timeline profiling to pinpoint bottlenecks in execution. These tools enable developers to optimize execution and native interactions in during development. Benchmarks demonstrate NativeScript's efficiency, with applications achieving startup times under 2 seconds on mid-range devices when using optimizations like V8 heap snapshots and code minification, performing comparably to fully native apps in UI responsiveness and data marshalling tasks. For instance, in release mode on , NativeScript 8.3 handles primitive data marshalling in approximately 260 ms, approaching native speeds while maintaining cross-platform consistency.

Framework Integrations

Angular Integration

NativeScript provides official support for integration via the @nativescript/angular package, enabling developers to leverage 's component-based architecture while accessing NativeScript's native UI components and APIs for building cross-platform mobile applications on , , and . Project setup is streamlined using the NativeScript CLI, with the command ns create myApp --ng generating a boilerplate application configured for NativeScript, including necessary dependencies and module imports like NativeScriptCommonModule. For production builds, Ahead-of-Time (AOT) compilation is enabled by default, which compiles templates and components at build time to enhance runtime performance and reduce bundle size. Within Angular components, NativeScript directives—such as <GridLayout>, <StackLayout>, and <ListView>—are integrated directly into templates, allowing declarative that renders native without wrappers or bridges. This setup adapts NativeScript's structure for , supporting data binding, directives, and lifecycle hooks in a familiar environment. Key adaptations include platform-specific templates, where conditional logic (e.g., via *ngIf or platform detection services) renders tailored layouts for or , optimizing across devices. The Angular router is extended with NativeScript's RouterExtensions for seamless native navigation, handling transitions like back-button behavior and modal presentations without relying on web views. As of 2025, NativeScript maintains full compatibility with 19 and subsequent versions, including support for standalone components, signals, and improved tree-shaking, ensuring developers can adopt the latest Angular advancements in native contexts.

Vue.js Integration

NativeScript provides integration with through the NativeScript-Vue , which enables developers to build cross-platform native mobile applications using Vue's declarative rendering and component-based . This bridges with NativeScript's , allowing Vue single-file components to define user interfaces that compile directly to native and elements, rather than web views. Vue templates in NativeScript-Vue use XML-like syntax for declaring NativeScript components, such as <Page>, <StackLayout>, and <Label>, which render to platform-specific native widgets like UIView on or ViewGroup on . To set up a new project, developers use the NativeScript CLI with the --vue flag, for example: ns create myAwesomeApp --vue. This command scaffolds a project pre-configured with , including support for the Vue 3 API, enabling modern reactive patterns like ref and computed for managing component state. NativeScript-Vue aligns with Vue 3 and later versions, ensuring compatibility with the latest ecosystem tools and features. Unique to this integration are extensions for handling native platform behaviors, such as using Vue's v-if directive combined with NativeScript's module for conditional rendering based on the operating system (e.g., if (isAndroid) { ... }). For , NativeScript-Vue supports Vuex, with community plugins like nativescript-vuex-persistent providing native persistence by storing state in platform-specific key-value stores, such as SharedPreferences on and NSUserDefaults on . This allows application data to survive app restarts without relying on web-based storage mechanisms. The NativeScript-Vue plugin has been community-maintained since its initial release in 2017, evolving as an open-source project under the to support ongoing NativeScript updates and Vue advancements.

Other Framework Support

NativeScript supports integrations with several additional frameworks beyond its official and bindings, enabling developers to leverage familiar paradigms for building native mobile applications. These integrations are primarily community-driven and allow for declarative UI rendering directly to native components on and platforms. The react-nativescript package provides a React renderer for NativeScript, facilitating the use of JSX syntax to generate native elements. This integration translates components into NativeScript views, supporting core features such as hooks for state and effect management, as well as standard state handling through useState and similar APIs. Developers can incorporate NativeScript plugins seamlessly within components, maintaining access to platform-specific APIs. For , the @nativescript-community/svelte-native package enables the compilation of Svelte components into native widgets during the build process. This approach combines Svelte's reactive, compiler-based architecture with NativeScript's native rendering, producing efficient updates to platform views like labels, buttons, and layouts without intermediate DOM layers. Key functionalities include native via APIs and support for layout containers such as FlexboxLayout and GridLayout. Solid.js integration is available through the @nativescript-community/solid-js package, which patches Solid's renderer to work with NativeScript via the DOMiNATIVE library. This setup preserves Solid's fine-grained reactivity model, where updates are targeted to specific DOM nodes using signals for state management, ensuring performant native UI rendering. Event handling is adapted for NativeScript's event system, using prefixes like "on:raw-" for platform events. Starting with NativeScript 8.9, official templates for Solid.js projects are provided via the CLI, marking it as a supported option for new applications. As a fallback, NativeScript inherently supports plain and without any framework, allowing direct imperative or declarative UI construction using its core XML-based markup and JavaScript bindings to native APIs. These integrations—React, Svelte, and Solid—are largely community-maintained, with ongoing development through repositories and the NativeScript community. NativeScript 8.9 introduces experimental Node-API engines that enhance compatibility with broader ecosystems, including Ionic and , via dedicated bridges that allow NativeScript modules to operate within Capacitor-run environments without impacting web builds.

Tools and Ecosystem

CLI and Build Tools

The NativeScript CLI, also known as the ns tool, is the primary for creating, developing, and deploying NativeScript applications. It is installed globally via as a Node.js package using the command npm install -g nativescript, enabling developers to manage projects from across supported platforms. Core CLI commands facilitate key workflow stages. The ns create <project-name> command initializes a new project template, supporting options for plain , , or integrations. For development, ns run android or ns run ios compiles and deploys the app to connected devices or emulators, with flags like --watch enabling live reload for real-time updates during coding sessions. Building for release uses ns build android to generate an file or ns build ios to produce an archive, often with --release for optimized, signed binaries suitable for distribution. Additional utilities include ns clean to remove build artifacts like node_modules and platform folders, ensuring a fresh , and ns devices to list available targets. The build process in NativeScript involves several automated steps to transform or code into native platform binaries. It begins with transpilation of to if needed, followed by bundling of scripts, assets, and dependencies using to create efficient runtime packages. These are then integrated with native platform tools— for and for —to compile the final or files, incorporating UI declarations and bindings without intermediate web views. Live reload, activated via the --watch flag in ns run, monitors file changes and incrementally rebuilds and redeploys, significantly speeding up iteration. Setting up the development environment requires platform-specific tools. For Android development on Windows, macOS, or , Android Studio and the (JDK) are essential, along with enabling USB debugging on physical devices via ADB. iOS development mandates macOS with installed, an Apple Developer account for signing, and device provisioning profiles for testing on real hardware; iOS builds are not supported on Windows or without remote services. To bypass local setup limitations, developers can leverage cloud-based build services through CLI extensions, allowing remote compilation for platforms like from non-Mac environments. In recent updates, NativeScript CLI version 8.9, released in February 2025, introduced enhancements including preview support for Node-API engines like Hermes and QuickJS, which streamline native module integration during builds, and a new ns widget ios command for generating widget extensions compatible with and features. As of July 2025, the CLI has been updated to version 8.9.3 with minor fixes and improvements. These improvements expand CLI capabilities for modern app architectures while maintaining .

Plugins and Community Modules

NativeScript's plugin system is built on , allowing developers to extend the framework's core capabilities by integrating native device features and third-party services through reusable modules. These plugins leverage NativeScript's direct access to provide / bindings for platform-specific functionalities that are not included in the base framework. For instance, the @nativescript/camera plugin enables access to device camera hardware for capturing photos and videos, while nativescript-sqlite facilitates local database storage using on both and . The community contributes a vast array of modules available via the NativeScript , with over 200 plugins covering diverse areas such as , payments, and connectivity. Examples include @nativescript/google-maps for integrating interactive maps with markers and user interactions, plugins like nativescript-stripe for handling in-app payments, and nativescript-bluetooth for low-energy device communication. These modules are discoverable on the and can be installed directly from , enhancing app development without requiring custom native code. Installation of plugins is streamlined through NPM commands, such as npm install @nativescript/camera, which automatically handles dependencies and generates JavaScript bindings for the underlying native libraries via NativeScript's auto-binding mechanism. This process ensures seamless integration into projects, with the framework resolving platform-specific implementations at build time. Previously, the tns plugin add command was used, but NPM has become the standard for consistency with modern JavaScript workflows. Since the 2020 transition from to community governance, plugin maintenance has been handled through a vetting process led by the NativeScript Technical Steering Committee (TSC), ensuring quality, compatibility, and updates across framework versions. Community contributions are encouraged via repositories, with automated tools in plugin workspaces powered by Nx facilitating scalable development and migration. This structure has sustained an active ecosystem, with the TSC providing oversight for official plugins while allowing broader community modules to thrive.

Additional Services and Resources

NativeScript developers have access to various supporting services for building and deploying applications. The official cloud build service, provided by prior to the project's full transition to in 2020, was deprecated on May 31, 2020, following a migration period to community-driven alternatives. Developers now commonly utilize platforms such as for automated builds, leveraging dedicated actions like setup-nativescript to configure environments across Windows, , and macOS, with iOS builds restricted to macOS runners. The primary documentation hub is hosted at docs.nativescript.org, offering comprehensive tutorials for app development using , , , , and other frameworks, alongside detailed references for core runtime and platform-specific features. For prototyping and testing, preview.nativescript.org provides an online playground environment, enabling browser-based previews of NativeScript projects and QR code generation for device testing via the NativeScript Preview . Additional resources include the official NativeScript blog at blog.nativescript.org, which delivers announcements on releases, such as NativeScript 8.9's introduction of Node-API engine previews in February 2025, and guides on best practices. Developer certifications are available through partnered programs, including access to junior-level certifications through partnered programs such as certificates.dev, emphasizing skills in native integration and app optimization. Community support is facilitated through the official server, which succeeded the previous channel in 2021 for real-time discussions, troubleshooting, and collaboration among contributors. NativeScript integrates seamlessly with tools like Jenkins for automated pipelines, allowing scripted builds and deployments through NativeScript CLI commands within Jenkins jobs. For hybrid development extensions, the @nativescript/ionic-portals enables incorporation of Ionic Portals, supercharged components that embed web-based micro-frontends into native apps while maintaining access to device via Capacitor bridges.

References

  1. [1]
    Introduction | NativeScript
    NativeScript provides platform APIs directly to the JavaScript runtime (with strong types) for a rich TypeScript development experience.
  2. [2]
    NativeScript
    NativeScript empowers JavaScript with native APIs, allowing direct access to platform APIs without leaving JavaScript. JavaScript's awesomeness is at your ...NativeScript 8.9 Released · Docs · Build a master-detail app with... · Blog
  3. [3]
    NativeScript joins OpenJS Foundation as Incubating Project
    Dec 7, 2020 · NativeScript was created in 2014 and quickly gained popularity among JavaScript developers. The software consulting company and strong ...Missing: history | Show results with:history
  4. [4]
    NativeScript 8.9 Released
    Feb 27, 2025 · NativeScript 8.9 begins the first public preview of our Node-API enabled engines! This opens up a new era of NativeScript development.
  5. [5]
    NativeScript/NativeScript: Empowering JavaScript with ... - GitHub
    NativeScript empowers you to access native APIs from JavaScript directly. Currently iOS, Android, and visionOS runtimes are provided for rich mobile development ...
  6. [6]
    Announcing NativeScript - cross-platform framework for build
    Jun 12, 2014 · Our public launch is on 4th of March and this functionality will be supported fully on Android, and partial on iOS. for iOS we will release the ...Missing: founding | Show results with:founding
  7. [7]
    Progress Software Announces Intent to Acquire Telerik
    Oct 22, 2014 · Progress Software Corporation (NASDAQ:PRGS) today announced that it has entered into a definitive agreement to acquire privately held Telerik AD.
  8. [8]
    Progress Completes Acquisition of Telerik and Expands Executive ...
    Dec 2, 2014 · Progress acquired Telerik for an aggregate purchase price of approximately $262.5 million . Progress funded the purchase price from a ...
  9. [9]
    Progress Announces NativeScript 2.0 for Native Mobile App ...
    May 4, 2016 · Progress Announces NativeScript 2.0 for Native Mobile App Development with Angular 2. May 04, 2016. Download PDF ...
  10. [10]
    A new Vue for NativeScript
    Jun 6, 2017 · Want to write your NativeScript app using Vue.js instead of Angular or plain vanilla NativeScript? Look no further.
  11. [11]
    The Next Chapter for NativeScript: nStudio
    Jun 1, 2020 · Progress has selected nStudio because we believe it is best positioned to take the open source project in new and interesting directions.Who Is Nstudio? · Why Is Progress Doing This? · What Does This Mean For My...
  12. [12]
    NativeScript 8.0 Released
    Mar 31, 2021 · NativeScript 8.0 signals it's future solid footing for growth and natural modern JavaScript evolutions with increased community engagement.
  13. [13]
    Cheers to NativeScript 10 Years
    May 4, 2025 · We celebrate a decade of NativeScript representing a remarkable journey defined by innovation, collaboration, and a strong commitment to empowering JavaScript ...Nativescript Is Unique · Highly Technical Needs For... · Openness
  14. [14]
    Developing with visionOS - Nativescript Doc
    You can develop with a physical Vision Pro plugged in or using the Vision Pro Simulator. You will need at least the 8.7+ NativeScript CLI.Missing: roadmap web
  15. [15]
    React Native vs. NativeScript: Which is Better for Cross-Platform ...
    Sep 17, 2025 · Apps written in either of the two can share as much as 90% of the codebase. Generally, the simpler and less custom-styled the app is, the more ...
  16. [16]
    Requirements - NativeScript Docs
    The minimum required version is Windows 7. iOS Development, -, iOS applications cannot be developed on a Windows system. Android Development, Android 6.0 SDK ...
  17. [17]
    nativescript - NPM
    Jul 16, 2025 · Command-line interface for building NativeScript projects. Latest version ... Existing classic tokens will be revoked on November 19, 2025.
  18. [18]
    Platform Version Handling - Nativescript Doc
    When talking about platform versions, we are referring to specific platform level SDKs shipped with Android, iOS, visionOS, macOS, Meta Quest, etc.
  19. [19]
  20. [20]
    The New iOS Runtime, Powered by V8 - The NativeScript Blog
    Sep 19, 2019 · The runtimes are the native bridges that connect the native and the JavaScript world. There is one for Android and one for iOS.What Is The Ios Runtime And... · Why Do We Need To Change It? · Which Approach Did We Choose...Missing: environment | Show results with:environment
  21. [21]
    Deep dive: How NativeScript's JS native bindings work - GitHub
    Nov 25, 2022 · NativeScript is a JavaScript runtime that allows you to write an iOS or Android app entirely in TypeScript or JavaScript with no compromises.
  22. [22]
  23. [23]
    FileSystem - Nativescript Doc
    Provides easy-to-use APIs for working with files and folders in a device's file system like managing files, folders, paths, and separators, etc.Missing: sensors | Show results with:sensors
  24. [24]
    Http - Nativescript Doc
    Http provides utility methods to make all sorts of http networking requests. Using Http ​. GET request with a response body as a string ​.Missing: sensors | Show results with:sensors
  25. [25]
    Device - Nativescript Doc
    The Device class (singleton) contains information about the current device, such as os, manufacturer, uuid and more.Missing: sensors | Show results with:sensors
  26. [26]
    NativeScript Node-API engine previews
    Feb 27, 2025 · This means that we can run NativeScript apps on any JavaScript engine that supports Node-API. We already have support for V8, Hermes, QuickJS, ...Are There Any Breaking... · Performance And Benchmarks · How To UpdateMissing: environment | Show results with:environment
  27. [27]
    comparison of node and nativescript runtimes - npm - Stack Overflow
    Dec 8, 2022 · From my point of view nativescript is a different runtime than node.js. But Node.js incorporates the Google Chrome V8 JavaScript engine as well.
  28. [28]
    UI Components - Nativescript Doc
    Additional UI components can be created or installed via plugins. Layout Containers ​. StackLayout · GridLayout · RootLayout · FlexboxLayout · WrapLayout ...Missing: declaration XML
  29. [29]
    Page - NativeScript Docs
    NativeScript provides two approaches to instantiating your pages. Create a page in XML. You can define the UI declaration and the code for the page separately.Page Creation · Create A Page In Xml · Page Reference
  30. [30]
    Button - NativeScript Docs
    The Button provides abstraction over Android's widget.Button and iOS's UIButton. This component can be defined via XML or Code-Behind and we can set up its ...Missing: rendering | Show results with:rendering
  31. [31]
    Demystifying NativeScript Layouts
    Jul 14, 2015 · Layouts in NativeScript can be created either by writing XML markup to create a UI, or using JavaScript to add elements to a dynamically-created UI behind the ...Types Of Layouts · Stretching Content And Grid... · Complex LayoutsMissing: declaration | Show results with:declaration
  32. [32]
    Styling - Nativescript Doc
    When the page's XML declaration file is loaded, NativeScript looks for a CSS file with the same name (if such exists), reads any CSS styles that it finds ...Missing: documentation | Show results with:documentation
  33. [33]
    Tailwind CSS - Nativescript Doc
    Sep 21, 2025 · Tailwind CSS v4 uses Lightning CSS which handles this automatically. Makes using Tailwind CSS in NativeScript a whole lot easier!Usage · Tailwind CSS v4 · Tailwind CSS v3
  34. [34]
    Navigation - NativeScript Docs
    The Page is NativeScript's most basic navigation component. It represents a screen that the user can navigate to. This component serves two important roles. It ...Missing: documentation | Show results with:documentation
  35. [35]
    Page - Nativescript Doc
    A page emits various events during navigation that you can use to update data/state in your app. ... Gets or sets the ActionBar for this page. See ActionBar.Missing: documentation | Show results with:documentation<|separator|>
  36. [36]
    ActionBar - Nativescript Doc
    Sep 21, 2025 · <ActionBar> is NativeScript's abstraction over the Android ActionBar and iOS NavigationBar. It represents a toolbar at the top of the activity window.Examples · Props · ActionItem · ActionItem PropsMissing: documentation | Show results with:documentation
  37. [37]
    Full Native API Access | NativeScript-Vue
    NativeScript exposes all available native APIs directly to your JavaScript. It does not convert your JavaScript to native code (ie. to Java/Objective-C).Missing: documentation | Show results with:documentation
  38. [38]
    Application - NativeScript Docs
    Using Plugins · Accessing Native APIs through JavaScript · Metadata · Memory Management · Multithreading Model · Property System · Utils · CommonJS Modules in ...
  39. [39]
    Adding custom native code to a project - Nativescript Doc
    NativeScript allows you to access any native API anytime in your app. NativeScript provides direct access to all native APIs as well as cross-platform ...
  40. [40]
    Metadata - Nativescript Doc
    The platform metadata contains all the necessary information about each of the supported native classes, interfaces, protocols, structures, enumerations, ...Metadata Filtering · Metadata filtering rules in apps · Rules syntax · TroubleshootingMissing: reflection | Show results with:reflection
  41. [41]
    Metadata - NativeScript Docs
    Metadata. To allow JavaScript code to call into native iOS or Android code both NativeScript runtimes need the so called metadata.Missing: reflection | Show results with:reflection
  42. [42]
    Android Marshalling - Nativescript Doc
    NativeScript handles data type conversion between JavaScript and Java/Kotlin using type inference and dedicated wrappers for smooth integration.
  43. [43]
    Generating TypeScript Declaration Files - NativeScript Docs
    TypeScript uses declaration files (a.k.a definitions) to "recognize" the types and function signatures of a given module. In the context of NativeScript mobile ...
  44. [44]
    Accessing Native APIs through JavaScript - NativeScript Docs
    Learn how to access the native iOS and Android APIs through JavaScript in a NativeScript app without writing any Objective-C/Swift or Java/Kotlin code.
  45. [45]
    Where did my Types go with 8.2? - The NativeScript Blog
    Mar 28, 2022 · When upgrading to @nativescript/types 8.2, TypeScript declarations for platform API types, you might notice a few TypeScript compilation ...Missing: 8 | Show results with:8
  46. [46]
    Build Truly Native Mobile Apps with Angular | NativeScript
    With NativeScript, you can finally create zero compromise mobile apps with Angular that feature truly native UI and performance. Enjoy glorious 60fps without ...Angular + Nativescript = ❤ · Using Angular With... · Why Use Angular With...<|control11|><|separator|>
  47. [47]
    NativeScript 1.6 available now
    Feb 18, 2016 · Enable the entire native UI stack and maintain 60fps refresh rate; Document everything! With these principles at our back, the latest release ...Performance · Ui · Plugins
  48. [48]
    How to Build NativeScript Apps That Start Up Fast
    NativeScript Android apps run on top of Google's V8 engine, and NativeScript iOS apps run on top of Apple's JavaScriptCore engine. V8 has a neat feature called ...Missing: environment | Show results with:environment
  49. [49]
    Memory Management - NativeScript Docs
    Since collection is driven by the garbage collectors it is possible to hold a weak reference to the JavaScript instance of a splice. After a V8 GC, the splice ...Terms · iOS · Properties of the Implementation · Android
  50. [50]
    Lazy Loading - NativeScript Docs
    Lazy loading is an Angular technique that allows you to load feature components asynchronously when a specific route is activated. This can add some initial ...
  51. [51]
    Debugging - Nativescript Doc
    The quickest way to inspect state is to log values to the console. NativeScript supports console methods like log, info, warn, error, trace, dir, time and ...Console · Debugging with Chrome... · Supported Chrome DevTools...
  52. [52]
    NativeScript 8.5 Released
    Mar 28, 2023 · With 8.4 just released in November of last year, this 8.5 release stands atop the strong community input and commitment to elevate what is ...Missing: milestones | Show results with:milestones
  53. [53]
    Android Performance - The Why and The How - The NativeScript Blog
    Oct 6, 2016 · Although NativeScript applications are 100% native and run fast and fluid in most of the cases, sometimes an application may need additional fine tuning, to ...
  54. [54]
    Performance Benchmarks using JavaScript for Universal Platform ...
    Sep 1, 2022 · Let's begin to understand performance metrics of using JavaScript universally for rich platform development.Benchmark Setup · Simulators (debug) · Run Nativescript Benchmarks...Missing: 60fps | Show results with:60fps
  55. [55]
    GitHub - NativeScript/angular: NativeScript for Angular
    ### Summary of NativeScript Angular Integration
  56. [56]
    Build a master-detail app with Angular - Nativescript Doc
    Sep 21, 2025 · This tutorial introduces you to the fundamentals of building a NativeScript app with Angular by walking you through building an example app ...Missing: integration | Show results with:integration
  57. [57]
    Integrating NativeScript with Angular - GitHub
    This repository contains the code for integration of NativeScript with Angular. NativeScript is a framework which enables developers to write truly native ...
  58. [58]
    Introduction - NativeScript-Vue
    What is NativeScript? ​ NativeScript is an open source framework for building truly native mobile applications using JavaScript.Missing: definition | Show results with:definition
  59. [59]
    NativeScript Components
    NativeScript-Vue runs on top of NativeScript, so under the hood the native NativeScript views are used, there are only some differences with some views.Missing: tns | Show results with:tns
  60. [60]
    Installation - NativeScript-Vue
    Creating a project ​. Once you have your system ready, create a new NativeScript-Vue project using the NativeScript CLI: bash ns create myAwesomeApp ...
  61. [61]
  62. [62]
    Platform - NativeScript Docs
    Gets a value indicating if the app is running on the Android platform. isIOS, boolean, Gets a value indicating if the app is running on the iOS platform.
  63. [63]
    nativescript-vuex-persistent
    A small library to make vuex persistent in nativescript-vue projects. npm i ... // Here you will define the states that you want to be persistent.
  64. [64]
    Key-Value Local Storage in a Vue.js NativeScript App with Vuex
    Jun 12, 2018 · Vuex is a state management pattern + library for Vue.js applications. It serves as a centralized store for all the components in an application.
  65. [65]
    shirakaba/react-nativescript: React renderer for NativeScript - GitHub
    Jul 18, 2020 · React NativeScript is A React renderer for NativeScript, allowing you to write a NativeScript app using the familiar React style.
  66. [66]
  67. [67]
    API Docs • Svelte Native - NativeScript
    Svelte Native is a tool for building mobile applications. It combines NativeScript's access to the native platform views and Svelte's fast and efficient view ...
  68. [68]
    nativescript-community/solid-js: SolidJS for NativeScript - GitHub
    Custom render and patches for SolidJS to work with DOMiNATIVE on NativeScript. Playground Installation Via npm: npm install @nativescript-community/solid-js
  69. [69]
    NativeScript Capacitor
    Use anywhere in your Ionic codebase. Completely inactive with zero impact on your web environment. It is only active when Capacitor is running.
  70. [70]
    CLI Basics - Nativescript Doc
    The CLI is self-documented, so you can always run ns --help or ns <command> --help to view available commands, flags and descriptions.Cleaning · Cleaning a single project
  71. [71]
    Running a Project - Nativescript Doc
    either a physical or virtual. Running a project ​. To run a project, use the ns run command.
  72. [72]
    Command-line interface for building NativeScript apps - GitHub
    NativeScript provides platform APIs directly to the JavaScript runtime (with strong types) for a rich TypeScript development experience.Installation · Quick Start · Develop Your Project
  73. [73]
    Bundling Script Code with Webpack - NativeScript Docs
    Most importantly, they allow for page load time optimizations that reduce or parallelize the number of requests a browser makes to the server. Why bundle ...
  74. [74]
    TypeScript support for NativeScript projects - GitHub
    A package providing TypeScript support for NativeScript. NativeScript is a framework which enables developers to write truly native mobile applications.Missing: process assets IPA
  75. [75]
    Environment Setup - Nativescript Doc
    Select the guide relevant to your development machine and follow the steps carefully to get a clean working environment ready.Setting up Windows for... · Setting up macOS for... · Setting up Linux for...
  76. [76]
  77. [77]
    Build NativeScript Apps Remotely from Windows or Linux
    Mar 4, 2020 · The NativeScript Remote Builds plugin enables the existing NativeScript CLI commands on environments without any native tooling [1] requirements.
  78. [78]
    Recommended Plugins - Nativescript Doc
    This page serves as a quick reference for finding plugins for commonly used features. Feel free to request additional plugins to be listed here.
  79. [79]
    nativescript-sqlite
    A NativeScript module providing sqlite actions for Android and iOS. (with multi-threading) License There are two possible licenses this is released under;Missing: camera maps bluetooth
  80. [80]
    NativeScript Marketplace
    A JavaScript library providing an easy to use api for interacting with iOS and Android platform APIs.
  81. [81]
    Google Maps - Nativescript Doc
    Sep 21, 2025 · A plugin that allows you to use the Maps SDK to access Google Maps features. ... Fires when the map viewport state changes, camera states ...Missing: sqlite bluetooth
  82. [82]
    Using Plugins - NativeScript Docs
    Learn how to find, add and remove NativeScript plugins that provide native device and platform capabilities missing in the core NativeScript modules.
  83. [83]
    Plugin Workspace Guide - Nativescript Doc
    When migrating your plugin workspace to @nativescript/plugin-tools@5, it is expected that any Angular parts will be compatible with Angular 15 and higher.
  84. [84]
    Migration of NativeScript Cloud Builds to Circle CI
    May 12, 2020 · The setup of the current NativeScript cloud builds requires you to have a valid paid Apple developer account and a generated pair of certificate ...
  85. [85]
    hrueger/setup-nativescript - GitHub
    This is a GitHub Action to setup the NativeScript development environment on Windows, Linux and macOS. Supports 1: iOS builds are only supported on OSX.
  86. [86]
    Preview | NativeScript
    NativeScript Preview allows mobile app development with a browser, using StackBlitz to preview changes on a device, and access to native APIs.
  87. [87]
    How to setup CI/CD for nativescript using Visual studio online/Azure ...
    Mar 28, 2019 · How to setup CI/CD for nativescript using Visual studio online/Azure dev ops tools ... jenkins but jenkins was running on the vm, no i want to ...How to configure Nativescript job on Jenkins - Stack OverflowContinuous Integration with Jenkins for React Native (iOS + Android ...More results from stackoverflow.com
  88. [88]
    Ionic Portals - Nativescript Doc
    A plugin that allows you to use Ionic Portals in NativeScript. Ionic Portals are supercharged native WebView components for iOS and Android.Contents · Enable Ionic portals in your app · IonicPortalManager APIMissing: integration | Show results with:integration