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