ROOT version 6.04/10 was released on 18 November, 2015. Changes with respect to 6.04/00 are listed at the end of the document.

For more information, see:

The following people have contributed to this new version:

David Abdurachmanov, CERN, CMS,
Bertrand Bellenot, CERN/SFT,
Rene Brun, CERN/SFT,
Philippe Canal, FNAL,
Cristina Cristescu, CERN/SFT,
Olivier Couet, CERN/SFT,
Kyle Cranmer, NYU, RooStats,
Aurelie Flandi, CERN/SFT,
Gerri Ganis, CERN/SFT,
Andrei Gheata, CERN/Alice,
Lukasz Janyst, CERN/IT,
Christopher Jones, Fermilab, CMS,
Wim Lavrijsen, LBNL, PyRoot,
Sergey Linev, GSI, http,
Pere Mato, CERN/SFT,
Lorenzo Moneta, CERN/SFT,
Axel Naumann, CERN/SFT,
Danilo Piparo, CERN/SFT,
Timur Pocheptsov, CERN/SFT,
Fons Rademakers, CERN/SFT,
Enric Tejedor Saavedra, CERN/SFT,
Liza Sakellari, CERN/SFT,
Manuel Tobias Schiller,
David Smith, CERN/IT,
Matevz Tadel, UCSD/CMS, Eve,
Vassil Vassilev, CERN/SFT
Wouter Verkerke, NIKHEF/Atlas, RooFit,
Yue Shi Lai, MIT,
Maciej Zimnoch, GSOC

Core Libraries


Platform support

ROOT now works on linuxarm64 / AArch64 / ARMv8 64-bit - thanks, David Abdurachmanov!

ROOT supports GCC 5.0 (a preview thereof) and XCode 6.3, Mac OSX 10.10.3


A lot of effort went into improving the thread-safety of Core and Meta classes / functions. A special thanks to Chris Jones from CMS!


Introduce a preview of C++17’s std::string_view. To take advantage of this new class use:

#include "RStringView.h"

The documentation of this can be found at The implementation provided is extracted from libcxx. Whenever the current compiler and standard library provide an implmentation, it is used.

The type string_view describes an object that can refer to a constant contiguous sequence of char-like objects with the first element of the sequence at position zero.

This type is used throughout the ROOT code to avoid copying strings when a sub-string is needed and to extent interfaces that uses to take a const char* to take a std::string_view as thus be able to be directly directly passed a TString, a std::string or a std::string_view. Usage example:

// With SetName(std::string_view)
std::string str; …
obj.SetName( str );
obj.SetName( {, len} );

Meta library

Backward Incompatibilities

TIsAProxy’s constructor no longer take the optional and unused 2nd argument which was reserved for a ‘context’. This context was unused in TIsAProxy itself and was not accessible from derived classes.


The new interface TInterpreter::Declare(const char* code) will declare the code to the interpreter with all interpreter extensions disabled, i.e. as “proper” C++ code. No autoloading or synamic lookup will be performed.

A new R_LOADLIBRARY(libWhatever) will load libWhatever at parse time. This allows ROOT to resolve symbols from this library very early on. It is a work-around for the following code from ROOT 5:

  // ROOT 5:
  void func() {
    Event* e = new Event;

Instead, write:

  // ROOT 6:
  #include "Event.h"

  void func() {
    Event* e = new Event;


Introduced new overload for calculating the TClass CheckSum:

   UInt_t TClass::GetCheckSum(ECheckSum code, Bool_t &isvalid) const;

which indicates via the ‘isvalid’ boolean whether the checksum could be calculated correctly or not.


Implemented new gROOT->GetTutorialsDir() static method to return the actual location of the tutorials directory. This is $ROOTSYS/tutorials when not configuring with –prefix or -Dgnuinstall for CMake.


Add an enum to access the palette by name.

Add new palettes with 255 colors. Names and colors’ definitions have been taken from here. Except for the kBird palette. These palettes can be accessed with gStyle->SetPalette(num). num can be taken within the following enum:

DeepSea GreyScale DarkBodyRadiator BlueYellow= RainBow InvertedDarkBodyRadiator Bird Cubehelix GreenRedViolet BlueRedYellow Ocean ColorPrintableOnGrey Alpine Aquamarine Army Atlantic Aurora Avocado Beach BlackBody BlueGreenYellow BrownCyan CMYK Candy Cherry Coffee DarkRainBow DarkTerrain Fall FruitPunch Fuchsia GreyYellow GreenBrownTerrain GreenPink Island Lake LightTemperature LightTerrain Mint Neon Pastel Pearl Pigeon Plum RedBlue Rose Rust SandyTerrain Sienna Solar SouthWest StarryNight Sunset TemperatureMap Thermometer Valentine VisibleSpectrum WaterMelon Cool Copper GistEart

Interpreter Library

Many, many bugs have been fixed; thanks to everyone who has reported them!


Cling is now using a new just-in-time compilation engine called OrcJIT, a development based on MCJIT. It enables interpretation of inline assembly and exceptions; it will hopefully in the near future also support interpreting thread local storage (but doesn’t at the moment).

Thanks to the new JIT, cling also comes with debug symbols for interpreted code; you can enable them with “.debug”.

Function evaluation

Function calls through TMethodCall etc have been accelerated.

llvm / clang

llvm / clang were updated to r227800. This includes everything from the clang 3.6 release.

Dictionary Generation

Detect usage of #pragma once for inlined headers.

Turn on verbosity of genreflex if the VERBOSE environment variable is defined.

Optimise forward declarations in rootmap files in order to make their interpretation faster.

Propagate attributes specified in xml selection files to selected classes even when selected through typedefs.

Optimise selection procedure caching selected declarations in the selection rules, therewith avoiding to query the AST twice.

Include in the PCH all the STL and C headers to guarantee portability of binaries from SLC6 to CC7.

I/O Libraries

I/O New functionalities

I/O Behavior change.

Networking Libraries

HTTP Server

Command Interface

One can now register an arbitrary command to the server, which become visible in the web browser. Then, when the item is clicked by the user, the command ends-up in a gROOT->ProcessLineSync() call.

Custom Properties

Custom properties can be configured for any item in the server. For example, one could configure an icon for each item visible in the browser. Or one could ‘hide’ any item from the user (but keep access with normal http requests). With such properties one could specify which item is drawn when web page is loaded, or configure monitoring. See tutorials/http/httpcontrol.C macro for more details.

Method Calls

Implement exe.json requests to be able to execute any method of registered objects. This request is used to provide remote TTree::Draw() functionality.


Correctly set ‘Cache-Control’ headers when replying to http requests. Better support of STL containers when converting objects into json with TBufferJSON class.

JavaScript ROOT

TTree Libraries

TTree Behavior change.


Added fast cloning support to TTree::MergeTrees and TTree::Merge(TCollection,Option_t).


The TTreeCache is now enabled by default. The default size of the TTreeCache is the estimated size of a cluster size for the TTree. The TTreeCache prefilling is also enabled by default; when in learning phase rather than reading each requested branch individually, the TTreeCache will read all the branches thus trading off the latencies inherent to multiple small reads for the potential of requesting more data than needed by read from the disk or server the baskets for too many branches.

The default behavior can be changed by either updating one of the rootrc files or by setting environment variables. The rootrc files, both the global and the local ones, now support the following the resource variable TTreeCache.Size which set the default size factor for auto sizing TTreeCache for TTrees. The estimated cluster size for the TTree and this factor is used to give the cache size. If option is set to zero auto cache creation is disabled and the default cache size is the historical one (equivalent to factor 1.0). If set to non zero auto cache creation is enabled and both auto created and default sized caches will use the configured factor: 0.0 no automatic cache and greater than 0.0 to enable cache. This value can be overridden by the environment variable ROOT_TTREECACHE_SIZE.

The resource variable TTreeCache.Prefill sets the default TTreeCache prefilling type. The prefill type may be: 0 for no prefilling and 1 to prefill all the branches. It can be overridden by the environment variable ROOT_TTREECACHE_PREFILL

In particular the default can be set back to the same as in version 5 by setting TTreeCache.Size (or ROOT_TTREECACHE_SIZE) and TTreeCache.Prefill (or ROOT_TTREECACHE_PREFILL) both to zero.

TTree methods which are expected to modify a cache, like AddBranchToCache, will attempt to setup a cache of default size if one does not exist, irrespective of whether the auto cache creation is enabled. Additionally several methods giving control of the cache have changed return type from void to Int_t, to be able to return a code to indicate if there was an error.

Usually TTree::SetCacheSize will no longer reset the list of branches to be cached (either set or previously learnt) nor restart the learning phase. The learning phase is restarted when a new cache is created, e.g. after having removed a cache with SetCacheSize(0).


The axis titles in case of a x:y:z plot with the option COLZ were not correct.


Change the format used to print the variables limit for ||-Coord to %g. It was %6.4f before.

Histogram Libraries


TFormula f("f","f1","[constant]+[slope]*x");


TF1 * f1 = new TF1("f1","f1","sin(x)",0,10);
TFormula * formula = (TFormula *) f1;

it is not valid anymore. The equivalent correct code is now

TF1 * f1 = new TF1("f1","f1","sin(x)",0,10);
TFormula * formula = f1->GetFormula();








GUI Libraries



2D Graphics Libraries













Cocoa backend

3D Graphics Libraries

GL Viewer


Build, Configuration and Testing Infrastructure

New functionalities

# Patch Releases

Release 6.04/02

Platform Support

Build System

Dictionary Generation







TFormula, TF1


Dictionary Generation



Release 6.04/04

Build System










Release 6.04/06




Release 6.04/08







Patches Release 6.04/08




Release 6.04/10

ROOT version 6.04/10 was released on 18 November, 2015.





HEAD of the v6-04-00-patches branch

Changes will be part of the future 6.04/12