ShadowNode
The Node.js runtime in shadow, enables N-API and vast Node.js packages on edge devices.
The project is another runtime for your Node.js packages, while ShadowNode is designed to be used on memory limited devices. It's inspired and forked from the awesome project Samsung/iotjs.
Quick Start
To get started with ShadowNode, you could download prebuilt binaries on Release Page for following targets:
- Linux x64
- macOS x64
Memory usage and binary footprint are measured at here with real target daily.
Documentation
Build
Fetch source code
$ git clone https://github.com/yodaos-project/ShadowNode.git
$ cd ShadowNode
Build ShadowNode
$ npm run build
Get available build options
$ tools/build.py --help
Install
$ tools/build.py --install
Run tests
$ npm test
For additional information see Getting Started.
Compared with Node.js
ShadowNode is not designed to be ran identical code that ran on Node.js. While edge environments are experiencing limited resources on runtime, the packages to be ran on ShadowNode shall be rewritten in a resource compact way. However for the very initial thought of sharing the Node.js vast module ecosystem, we would like make ShadowNode compatible with Node.js with our efforts.
- Assert
- Buffer
- C/C++ Addon API
- Child Process
- Crypto
- DNS
- Events
- File System
- HTTP
- Module
- Net
- OS
- Process
- Stream
- Timers
- TLS
- UDP/Datagram
- Zlib
Since the MQTT
protocol is commonly used for communication between IoT devices, ShadowNode supports
the protocol natively, and keeps the API consistent with the popular library MQTT.js. See
MQTT API for details.
The WebSocket
is a popular protocol in IoT environment as well, and also supported by ShadowNode
natively. See WebSocket API.
For hardware geek, this project benefits from the upstream IoT.js, which has supported the following hardware interfaces, you are able to port ShadowNode to your platforms and start hacking with JavaScript:
License
ShadowNode is Open Source software under the Apache 2.0 license. Complete license and copyright information can be found within the code.