Library / SDK
nodejs-mobile/nodejs-mobile avatar
nodejs-mobile/nodejs-mobile

Node.js for Mobile Apps: a full Node runtime inside an Android or iOS app

Full-fledged Node.js on Android and iOS

882 stars175 forksJavaScriptNOASSERTION

At a glance

What is it?
nodejs-mobile is a fork of Node.js carrying the patches that make the runtime work on mobile operating systems, with separate plugin repositories for React Native and Cordova. The fork tracks upstream rather than diverging, so its version numbers mirror the Node.js release it is based on, and it is built from a full Node source tree rather than a stripped-down runtime.
Who is it for?
Use nodejs-mobile when your mobile application genuinely needs a Node.js runtime inside it, for example to reuse server-side JavaScript libraries or to run tooling on device, because it is a real Node build with the platform fixes applied rather than a JavaScript runtime shim. Do not reach for it to speed up app logic, since running a Node event loop inside a mobile app brings its own memory and startup cost that a native module avoids.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 176 days ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A fork whose job is patches, not features

nodejs-mobile is the main repository for Node.js for Mobile Apps, a toolkit for integrating Node.js into mobile applications, and the README states its purpose plainly. It is the core library source code, and the plugin source lives in separate repositories for React Native and Cordova, so the three pieces are versioned apart. The project goals are listed as three numbered items and the third one is the constraint that shapes everything else: the project aims to diverge as little as possible from nodejs/node while fulfilling the first two goals. The first goal is to provide the fixes necessary to run Node.js on mobile operating systems. The second is to investigate which features need to be added to Node.js itself for it to be a useful tool for mobile app development. So the fork is a patch set on top of a moving upstream rather than a branch that grows its own identity.

Version numbers that mirror upstream Node

The versioning scheme is explained in detail because it is unusual and because reading it wrong leads to the wrong assumption about compatibility. The project does not follow SemVer. Instead it aims to reflect the upstream Node.js version it is based on, and a nodejs-mobile version A.B.C is based on Node.js version A.B.*, while the C is incremented whenever there are any changes to the codebase, whether fixes, features or otherwise. The practical reading is that the first two numbers tell you which Node.js release you get, and the third tells you which iteration of the mobile patches you get. That means two nodejs-mobile packages with the same A.B are not interchangeable, and the third number is the one that carries the mobile-specific work. The published releases follow this pattern, with v18.20.4 dated 2024-10-07, v18.17.3 dated 2024-09-23 and v18.17.2 dated 2023-10-17.

What is in the repository is a whole Node source tree

The top-level listing makes the scale clear. This is not a small library that wraps a Node binary; it is a Node.js source distribution with mobile additions. There is src, lib, deps, tools and test directories, the configure and configure.py scripts, node.gyp and node.gypi, common.gypi, the BSDmakefile and the vcbuild.bat Windows build script, plus typings and a glossary.md. Alongside that Node machinery there are the mobile-specific pieces: an android-patches directory, an android-configure script, and an android_configure.py, which is the part that applies and manages the platform fixes. There is also a benchmark directory, a Makefile whose contents are the upstream Node build system with the platform's test harness on top, and doc_mobile, which holds the documentation for this fork specifically.

The build is upstream Node plus a Python toolchain

The build system inherited from Node is visible in the Makefile, and it tells you what a contributor is dealing with. It includes config.mk, takes the build type from a BUILDTYPE variable defaulting to Release, and expects a Python 3 interpreter through a PYTHON variable. It computes the operating system and architecture by running uname, with a special case for os/390, and it picks up parallel build arguments from a JOBS variable. There are switches for enabling the V8 test harness with TAP output, for converting V8's JSON test results into JUnit XML through a Python script, and for skipping internationalisation support. The linting and formatting side is a mix of tools: a .clang-format and .cpplint for the C++ sources, an ESLint configuration for the JavaScript, a yamllint configuration, and a Ruff configuration in pyproject.toml that selects the pycodestyle, Pyflakes, Pylint and Ruff rule sets with a line length of 172.

The patch set is the actual product

The android-patches directory and the android_configure.py script are the parts of the repository that make it mobile. Upstream Node.js is built for servers and desktops, and a substantial part of what this project does is make that same tree compile and behave correctly on Android and iOS, where the operating system conventions around process management, signals, file paths and threading differ from a POSIX server. The directory of patches is the visible record of that work, and the configuration script is what applies it. The reason the project states its goal as diverging as little as possible from upstream is that a smaller patch set is one that can be rebased onto a new Node.js release without conflict, which is what keeps the fork current when upstream moves every few weeks.

Binaries for both platforms, and a documentation caveat

Binaries for Android and iOS are published on the releases page of the repository, so most users never build this themselves. The README also points newcomers to a FAQ document in the doc_mobile folder and to the discussions page, and it links an older project website whose content it marks as old. That caveat is worth repeating because it is the kind of thing that wastes a day. The documentation found in the repository is currently unchanged from the parent repository and may only be applicable to upstream Node. In other words, the user-facing guides predate the fork's own state, and the authoritative material is the doc_mobile folder, which contains separate BUILDING, TESTING and CONTRIBUTING files that the README refers you to for build instructions, for running the tests and for contributing.

Where nodejs-mobile is the wrong choice

Four limits apply. The first is that a mobile operating system already has a JavaScript engine, and for most application logic that engine is the better answer, because a Node runtime inside an app means a second event loop, a second copy of the standard library and a second set of native modules in the process, with the memory and start-up cost that implies. The second is that the fork's currency comes from upstream, so the Node.js version you inherit is whichever one the fork has caught up with rather than the current release, and the mobile patches have to be rebased onto each upstream bump. The third is that the plugin repositories are separate, so the React Native or Cordova plugin version has to match the core library version, and a mismatch shows up as an embedding problem rather than a clear error. And the fourth is licensing. The repository's licence field carries a custom licence that GitHub cannot classify, and while the presence of a BSDmakefile in the source tree suggests the upstream BSD terms still apply, the LICENSE file is the document that governs and it is worth reading rather than assuming.

Editorial conclusion

Use nodejs-mobile when your mobile application genuinely needs a Node.js runtime inside it, for example to reuse server-side JavaScript libraries or to run tooling on device, because it is a real Node build with the platform fixes applied rather than a JavaScript runtime shim. Do not reach for it to speed up app logic, since running a Node event loop inside a mobile app brings its own memory and startup cost that a native module avoids. Verify first which Node.js version the release you pick is based on, because the version number mirrors upstream and the patch level carries the mobile-specific fixes, that the plugin for your framework matches the core library you install, and that the licence in the repository covers your intended use, since GitHub cannot classify it as a standard licence.

Frequently asked questions

What is Node.js for Mobile Apps?

It is a toolkit for integrating Node.js into mobile applications, provided as a fork of Node.js with the fixes needed to run on mobile operating systems. The core library source is in the main repository, and the plugin source for React Native and Cordova lives in separate repositories.

How does nodejs-mobile versioning work?

It does not follow SemVer. A nodejs-mobile version A.B.C is based on Node.js version A.B.*, and the C is incremented whenever there are any changes to the codebase, whether fixes, features or otherwise, so the third number carries the mobile-specific work.

Where do I get nodejs-mobile binaries?

Binaries for Android and iOS are published on the releases page of the repository. Building from source is documented in the BUILDING.md file in the doc_mobile folder, with TESTING.md and CONTRIBUTING.md alongside it.

How does the project keep up with upstream Node.js?

One of the stated project goals is to diverge as little as possible from nodejs/node while still providing the mobile fixes. The android-patches directory and the android_configure.py script hold the platform-specific work, and a small patch set is what makes rebasing onto a new upstream release tractable.

Is the documentation in the repository current?

The README states plainly that documentation found in the repository is currently unchanged from the parent repository and may only be applicable to upstream Node. The fork-specific documents live in the doc_mobile folder, and an older project website is also linked and marked as old.

Official sources

  1. Issues
  2. nodejs-mobile/nodejs-mobile on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/nodejs-mobile-nodejs-mobile.svg)](https://hysenlabs.com/projects/nodejs-mobile-nodejs-mobile)

Was this useful?