# JavaScript API

## C++ Apertus Plugins

### NodeJsExtension

NodeJsExtension plugin is a C++ Node.js module, compiled with [nbind](https://github.com/charto/nbind) in order to call C++ code from JavaScript. It's located in *ApertusVR/plugins/jsAPI/nodeJsExtension/* folder. Header files are [nbind](https://github.com/charto/nbind)  bindings to ApertusVR's C++ API.

> [Nbind](https://github.com/charto/nbind) is a set of headers that make your C++11 library accessible from JavaScript.

{% hint style="info" %}
Note: [Nbind ](https://github.com/charto/nbind)is a great tool but it has many limitations. [SWIG ](http://www.swig.org/)is an alternative, however, it currently does not support the specific version of [V8](https://developers.google.com/v8/) which is used by ApertusVR.
{% endhint %}

### NodeJsPlugin

NodeJsPlugin starts an embedded [Node.js](https://nodejs.org/en/) instance which serves as the backend for ApertusVR. It uses [Express](https://expressjs.com/) framework that provides a robust set of features for web and mobile applications.

> [Express](https://expressjs.com/) provides a thin layer of fundamental web application features, without obscuring Node.js features that you know and love.

The backend application is located in *ApertusVR/plugins/jsAPI/nodeJsPlugin/js/* folder.

## JavaScript Apertus Plugins
