For the first time since 20 year (i.e. ever), the ROOT team plans to introduce backward incompatible changes for crucial interfaces. ROOT won’t actually break backward compatibility: old interfaces will simply stay frozen. You will need to migrate your code to those new interfaces to benefit from their new features. This new major version of ROOT will make ROOT much simpler and safer to use: we want to increase clarity and usability.

The ROOT team will be releasing parts of ROOT 7 throughout the coming years. Previews will gradually sneak into the ROOT sources, in the namespace ROOT::Experimental for those parts that are not yet cast in stone, and in the namespace ROOT for those that are. We will use standard C++ types, standard interface behavior (e.g. with respect to ownership and thread safety), good documentation and tests.

Building ROOT 7


Support for the c++17 standard is required. Usage of g++ >= 7 or clang >= 5 is recommended.

Relevant cmake variables

ROOT 7 will be built if at least one of these conditions is satisfied:

  • the CMAKE_CXX_STANDARD cmake variable is set to at least 17
  • the root7 cmake variable is set to ON

Building from source would look similar to this:

$ mkdir root7_build
$ cd root7_build
$ cmake -DCMAKE_CXX_STANDARD=17 path/to/root/source
$ cmake --build . -- -j4

ROOT 7 Features

ROOT’s new interface personality is already in production with RDataFrame . Next up is the TTree successor RNTuple .

Still in the design phase are ROOT’s new graphics and histogram packages, with tutorials such as for ROOT 7 graphics, for histograms and ntuple, and specifically for drawing and styling the new histograms.


Starting from ROOT version 6.26/00, RBrowser is the first web-based component used by default when ROOT is built with root7. It is automatically invoked with new TBrowser. We recommend to install the chrome/chromium web browser, but all other web browsers should do the job.

If for any reasons RBrowser does not provide required functionality, one always can disable it. Either by specifying root --web=off when starting ROOT or by setting Browser.Name: TRootBrowser in rootrc file. Please report your case at the ROOT Forum so we can address it!

RBrowser on remote node

To efficiently use RBrowser on a remote node, it is advised to use the ssh port forwarding and run the user interface on the localhost with the default web browser. In the provided example the remote http port 8899 will be mapped to the local 8877 port.

When logging on the remote host, configure also the port forwarding:

[shell] ssh -L 8877:remotehost:8899 username@remotehost

Configure ROOT the shell environment and start root with the --web=server:8899 option:

[shell] call /path/to/root/bin/
[shell] root --web=server:8899 $ROOTSYS/tutorials/v7/browser.cxx

Open the url provided by ROOT on the localhost, replacing port number 8899 by 8877:

[shell] firefox http://localhost:8877/win1/

We highly appreciate your feedback!