About JavaScript Interop

Ultralight is built upon Apple's JavaScriptCore engine-- the same high-performance JavaScript engine used by Safari/WebKit on macOS and iOS.

We expose low-level C bindings to JavaScriptCore so that you can seamlessly integrate your native code with JavaScript running on a page.


C++ BIndings for JavaScriptCore

For convenience, we also offer a set C++ helpers to simplify usage from C++. See JSHelpers.h in the AppCore API

Using the JavaScriptCore API

To use the JavaScriptCore API in your code, just include <JavaScriptCore/JavaScript.h>:

#include <JavaScriptCore/JavaScript.h>

You can browse the API headers for JavaScriptCore by clicking here.

Common API Types

API Type



A JavaScript execution context, you will need this to make most calls in JavaScriptCore.


The base type for all JavaScript values (eg, Number, String, Object, Boolean, etc.).

This is a garbage-collected type.


A JavaScript object-- this value is technically typedef'd to the same underlying type as JSValueRef and can be passed anywhere that accepts a JSValueRef.

This is a garbage-collected type.


A raw UTF-16 string buffer for passing strings to/from JavaScript.


Used to create custom JavaScript objects that wrap native objects.

What’s Next