Node.js Bindings for ROOT6

From Lsdf

Zurück zur Themenliste


ROOT is a modular scientific software framework developed at CERN. It has become a de-facto standard for storage, processing and analysis of data in elementary-particle physics, including experiments at the LHC. ROOT is written mainly in C++ and is typically used to execute user-provided macros (scripts) using a built-in C++ interpreter, which in the latest major version, 6, is based on LLVM. That said, bindings for higher-level languages such as Python, Ruby or R also exist and are commonly used.

The goal of this project is to create Node.js bindings for ROOT, thanks to which it will become possible to e.g. integrate ROOT into Node-based Web applications. We aim specifically at ROOT 6 because its LLVM-based C++ interpreter Cling offers many advantages over the one available in older ROOT versions. The bindings should:

  • allow the user to interact with any ROOT class from the Node.js JavaScript interpreter
  • accept C++ code for just-in-time compilation
  • update dynamically following changes to C++ internals
  • provide asynchronous wrappers for common I/O operations (i.e. file and tree access)
  • support the streaming of data in JSON format compatible with JavaScript ROOT


  • meet standard PSE goals
  • gain knowledge about interfacing between different programming languages
  • learn how to develop native-code modules for Node.js
  • get better at non-blocking/asynchronous programming


  • English (the output of the project is meant for consumption by an international scientific community)
  • Linux (should know how to write code under this OS, although the final product should ideally be cross-platform)
  • good knowledge of C++
  • basic knowledge of JavaScript and the Node.js ecosystem
  • some familiarity with asynchronous programming and streams

Project Supervisor

Marek Szuba (SCC Campus Nord)