18c339a94Sopenharmony_ci# node-addon-api Documents 28c339a94Sopenharmony_ci 38c339a94Sopenharmony_ci* [Setup](#setup) 48c339a94Sopenharmony_ci* [API Documentation](#api) 58c339a94Sopenharmony_ci* [Examples](#examples) 68c339a94Sopenharmony_ci* [ABI Stability Guideline](#abi-stability-guideline) 78c339a94Sopenharmony_ci* [More resource and info about native Addons](#resources) 88c339a94Sopenharmony_ci 98c339a94Sopenharmony_ciNode-API is an ABI stable C interface provided by Node.js for building native 108c339a94Sopenharmony_ciaddons. It is independent of the underlying JavaScript runtime (e.g. or ChakraCore) 118c339a94Sopenharmony_ciand is maintained as part of Node.js itself. It is intended to insulate 128c339a94Sopenharmony_cinative addons from changes in the underlying JavaScript engine and allow 138c339a94Sopenharmony_cimodules compiled for one version to run on later versions of Node.js without 148c339a94Sopenharmony_cirecompilation. 158c339a94Sopenharmony_ci 168c339a94Sopenharmony_ciThe `node-addon-api` module, which is not part of Node.js, preserves the benefits 178c339a94Sopenharmony_ciof the Node-API as it consists only of inline code that depends only on the stable API 188c339a94Sopenharmony_ciprovided by Node-API. As such, modules built against one version of Node.js 198c339a94Sopenharmony_ciusing node-addon-api should run without having to be rebuilt with newer versions 208c339a94Sopenharmony_ciof Node.js. 218c339a94Sopenharmony_ci 228c339a94Sopenharmony_ci## Setup 238c339a94Sopenharmony_ci - [Installation and usage](setup.md) 248c339a94Sopenharmony_ci - [node-gyp](node-gyp.md) 258c339a94Sopenharmony_ci - [cmake-js](cmake-js.md) 268c339a94Sopenharmony_ci - [Conversion tool](conversion-tool.md) 278c339a94Sopenharmony_ci - [Checker tool](checker-tool.md) 288c339a94Sopenharmony_ci - [Generator](generator.md) 298c339a94Sopenharmony_ci - [Prebuild tools](prebuild_tools.md) 308c339a94Sopenharmony_ci 318c339a94Sopenharmony_ci<a name="api"></a> 328c339a94Sopenharmony_ci 338c339a94Sopenharmony_ci## API Documentation 348c339a94Sopenharmony_ci 358c339a94Sopenharmony_ciThe following is the documentation for node-addon-api. 368c339a94Sopenharmony_ci 378c339a94Sopenharmony_ci - [Full Class Hierarchy](hierarchy.md) 388c339a94Sopenharmony_ci - [Addon Structure](addon.md) 398c339a94Sopenharmony_ci - Data Types: 408c339a94Sopenharmony_ci - [Env](env.md) 418c339a94Sopenharmony_ci - [CallbackInfo](callbackinfo.md) 428c339a94Sopenharmony_ci - [Reference](reference.md) 438c339a94Sopenharmony_ci - [Value](value.md) 448c339a94Sopenharmony_ci - [Name](name.md) 458c339a94Sopenharmony_ci - [Symbol](symbol.md) 468c339a94Sopenharmony_ci - [String](string.md) 478c339a94Sopenharmony_ci - [Number](number.md) 488c339a94Sopenharmony_ci - [Date](date.md) 498c339a94Sopenharmony_ci - [BigInt](bigint.md) 508c339a94Sopenharmony_ci - [Boolean](boolean.md) 518c339a94Sopenharmony_ci - [External](external.md) 528c339a94Sopenharmony_ci - [Object](object.md) 538c339a94Sopenharmony_ci - [Array](array.md) 548c339a94Sopenharmony_ci - [ObjectReference](object_reference.md) 558c339a94Sopenharmony_ci - [PropertyDescriptor](property_descriptor.md) 568c339a94Sopenharmony_ci - [Function](function.md) 578c339a94Sopenharmony_ci - [FunctionReference](function_reference.md) 588c339a94Sopenharmony_ci - [ObjectWrap](object_wrap.md) 598c339a94Sopenharmony_ci - [ClassPropertyDescriptor](class_property_descriptor.md) 608c339a94Sopenharmony_ci - [Buffer](buffer.md) 618c339a94Sopenharmony_ci - [ArrayBuffer](array_buffer.md) 628c339a94Sopenharmony_ci - [TypedArray](typed_array.md) 638c339a94Sopenharmony_ci - [TypedArrayOf](typed_array_of.md) 648c339a94Sopenharmony_ci - [DataView](dataview.md) 658c339a94Sopenharmony_ci - [Error Handling](error_handling.md) 668c339a94Sopenharmony_ci - [Error](error.md) 678c339a94Sopenharmony_ci - [TypeError](type_error.md) 688c339a94Sopenharmony_ci - [RangeError](range_error.md) 698c339a94Sopenharmony_ci - [SyntaxError](syntax_error.md) 708c339a94Sopenharmony_ci - [Object Lifetime Management](object_lifetime_management.md) 718c339a94Sopenharmony_ci - [HandleScope](handle_scope.md) 728c339a94Sopenharmony_ci - [EscapableHandleScope](escapable_handle_scope.md) 738c339a94Sopenharmony_ci - [Memory Management](memory_management.md) 748c339a94Sopenharmony_ci - [Async Operations](async_operations.md) 758c339a94Sopenharmony_ci - [AsyncWorker](async_worker.md) 768c339a94Sopenharmony_ci - [AsyncContext](async_context.md) 778c339a94Sopenharmony_ci - [AsyncWorker Variants](async_worker_variants.md) 788c339a94Sopenharmony_ci - [Thread-safe Functions](threadsafe.md) 798c339a94Sopenharmony_ci - [ThreadSafeFunction](threadsafe_function.md) 808c339a94Sopenharmony_ci - [TypedThreadSafeFunction](typed_threadsafe_function.md) 818c339a94Sopenharmony_ci - [Promises](promises.md) 828c339a94Sopenharmony_ci - [Version management](version_management.md) 838c339a94Sopenharmony_ci 848c339a94Sopenharmony_ci<a name="examples"></a> 858c339a94Sopenharmony_ci 868c339a94Sopenharmony_ci## Examples 878c339a94Sopenharmony_ci 888c339a94Sopenharmony_ciAre you new to **node-addon-api**? Take a look at our **[examples]()** 898c339a94Sopenharmony_ci 908c339a94Sopenharmony_ci- [Hello World](/tree/main/src/1-getting-started/1_hello_world) 918c339a94Sopenharmony_ci- [Pass arguments to a function](/tree/main/src/1-getting-started/2_function_arguments/node-addon-api) 928c339a94Sopenharmony_ci- [Callbacks](/tree/main/src/1-getting-started/3_callbacks/node-addon-api) 938c339a94Sopenharmony_ci- [Object factory](/tree/main/src/1-getting-started/4_object_factory/node-addon-api) 948c339a94Sopenharmony_ci- [Function factory](/tree/main/src/1-getting-started/5_function_factory/node-addon-api) 958c339a94Sopenharmony_ci- [Wrapping C++ Object](/tree/main/src/1-getting-started/6_object_wrap/node-addon-api) 968c339a94Sopenharmony_ci- [Factory of wrapped object](/tree/main/src/1-getting-started/7_factory_wrap/node-addon-api) 978c339a94Sopenharmony_ci- [Passing wrapped object around](/tree/main/src/2-js-to-native-conversion/8_passing_wrapped/node-addon-api) 988c339a94Sopenharmony_ci 998c339a94Sopenharmony_ci<a name="abi-stability-guideline"></a> 1008c339a94Sopenharmony_ci 1018c339a94Sopenharmony_ci## ABI Stability Guideline 1028c339a94Sopenharmony_ci 1038c339a94Sopenharmony_ciIt is important to remember that *other* Node.js interfaces such as 1048c339a94Sopenharmony_ci`libuv` (included in a project via `#include <uv.h>`) are not ABI-stable across 1058c339a94Sopenharmony_ciNode.js major versions. Thus, an addon must use Node-API and/or `node-addon-api` 1068c339a94Sopenharmony_ciexclusively and build against a version of Node.js that includes an 1078c339a94Sopenharmony_ciimplementation of Node-API (meaning an active LTS version of Node.js) in 1088c339a94Sopenharmony_ciorder to benefit from ABI stability across Node.js major versions. Node.js 1098c339a94Sopenharmony_ciprovides an [ABI stability guide][] containing a detailed explanation of ABI 1108c339a94Sopenharmony_cistability in general, and the Node-API ABI stability guarantee in particular. 1118c339a94Sopenharmony_ci 1128c339a94Sopenharmony_ci<a name="resources"></a> 1138c339a94Sopenharmony_ci 1148c339a94Sopenharmony_ci## More resource and info about native Addons 1158c339a94Sopenharmony_ci 1168c339a94Sopenharmony_ciThere are three options for implementing addons: Node-API, nan, or direct 1178c339a94Sopenharmony_ciuse of internal , libuv, and Node.js libraries. Unless there is a need for 1188c339a94Sopenharmony_cidirect access to functionality that is not exposed by Node-API as outlined 1198c339a94Sopenharmony_ciin [C/C++ addons](/dist/latest/docs/api/addons.html) 1208c339a94Sopenharmony_ciin Node.js core, use Node-API. Refer to 1218c339a94Sopenharmony_ci[C/C++ addons with Node-API](/dist/latest/docs/api/n-api.html) 1228c339a94Sopenharmony_cifor more information on Node-API. 1238c339a94Sopenharmony_ci 1248c339a94Sopenharmony_ci- [C++ Addons](/dist/latest/docs/api/addons.html) 1258c339a94Sopenharmony_ci- [Node-API](/dist/latest/docs/api/n-api.html) 1268c339a94Sopenharmony_ci- [Node-API - Next Generation Node API for Native Modules]() 1278c339a94Sopenharmony_ci- [How We Migrated Realm JavaScript From NAN to Node-API](/article/realm-javascript-nan-to-n-api) 1288c339a94Sopenharmony_ci 1298c339a94Sopenharmony_ciAs node-addon-api's core mission is to expose the plain C Node-API as C++ 1308c339a94Sopenharmony_ciwrappers, tools that facilitate n-api/node-addon-api providing more 1318c339a94Sopenharmony_ciconvenient patterns for developing a Node.js add-on with n-api/node-addon-api 1328c339a94Sopenharmony_cican be published to NPM as standalone packages. It is also recommended to tag 1338c339a94Sopenharmony_cisuch packages with `node-addon-api` to provide more visibility to the community. 1348c339a94Sopenharmony_ci 1358c339a94Sopenharmony_ciQuick links to NPM searches: [keywords:node-addon-api](/search?q=keywords%3Anode-addon-api). 1368c339a94Sopenharmony_ci 1378c339a94Sopenharmony_ci<a name="other-bindings"></a> 1388c339a94Sopenharmony_ci 1398c339a94Sopenharmony_ci## Other bindings 1408c339a94Sopenharmony_ci 1418c339a94Sopenharmony_ci[ABI stability guide]: /en/docs/guides/abi-stability/ 142