turbo.js is a small library that makes it easier to perform complex calculations that can be done in parallel. The actual calculation performed (the kernel executed) uses the GPU for execution. This enables you to work on an array of values all at once. The library is compatible with all browsers (even IE when not using ES6 template strings) and most desktop and mobile GPUs.

Turbo.js is

  • Non-volatile : Data is always accessible from the GPU and JavaScript side. Typed arrays ensure data integrity and low transfer overhead. Each run debugs the kernel code on the fly.
  • Dynamic Data Layout: Work on a flat float array (example to the left) or use 4D vectors, utilizing four 32bit floats I/O per parallel operation. turbo.js takes care of data transformation for you.

The home page of the library provides a live benchmarking that show the difference in performance which is not huge but great enough. Performance is measured in vectors per milliseconds. The gauges display the number of vectors in thousands. So a result of 1.23 would indicate a speed of 1,230 vectors (4,920 floats) per ms. In this specific case, V/ms is equivalent to points/ms on the fractal surface.


Turbo.js is designed for Desktop and Mobile, however since it’s using a feature that is not necessarily supported by all devices. Some phone manufacturers choose to use older GPU models for their devices that don’t support the required texture format turbo.js needs. That’s why, e.g., turbo.js works on Samsung S7 models using the Qualcomm Adreno 530, but not ones with the ARM Mali-T880 MP12.

More information and download at https://turbo.github.io/