Neonto Studio for Plugin Developers

Plugins can be used to extend Neonto Studio in many ways.

All types of plugins have a few things in common: they can provide some kind of user interface within Neonto Studio, and they can write out native iOS and Android code as part of the export process. This way, plugins can do pretty much anything within an exported app.

Example plugins

Download a zip package containing example plugins here:

Examples (320 kB)

Supported plugin types

There are several examples included of each of these types in the package.

JavaScript API documentation

Refer to the API documentation for specifications for each plugin type.

Structure of a plugin

Plugins are OS X bundles, using a similar folder structure to .app files used on OS X and iOS.

To read and modify the code of a plugin, right-click on it in Finder and choose “Show Package Contents”.

To install a plugin in Neonto Studio, use the Plugin Manager (found in the Plugins menu).

Where to start

It's easiest to start a plugin by modifying one of the working examples.

For example, Randomize.plugin (found in folder “Element examples”) is one of the most easily understood complete plugins.

To rename the plugin, it's not enough to rename the plugin bundle. You must also edit Contents/Info.plist and replace the plugin name in both the "bundle name" and "bundle identifier" fields. (The bundle identifier is an internal id that is used by the operating system.) You should also change the name Contents/Executables/Main.js, where the plugin can return localized strings to Neonto Studio including the plugin name displayed to the user.

Code and assets

The plugin’s code is in Contents/Executables/Main.js. This contains the functions that are called by Neonto Studio to perform various tasks, e.g. create the user interface and write code.

In Contents/Resources you can find the templates that provide the Android and iOS code. We have been using the Mustache template language for these, but this is not set in stone — it’s actually just a JS dependency that gets included by a setting in Info.plist. So if you want, you can easily do code generation using any other method.