joint.dia.Graph is the model holding all the cells (elements and links) of the diagram. It's a Backbone model. The collection of all the cells is stored in the property `cells`.

The graph is a powerful data model behind all JointJS diagrams. It not only provides an efficient storage for directed graphs but also offers useful algorithms for traversing the graphs.

Additionally, the graph accepts an option object in its constructor function that can contain the `cellNamespace` option. This option can be used to change the default behavior of JointJS which by default reads cell model definitions from the `joint.shapes` namespace. For example, if a cell is of type `'myshapes.MyElement'`, then the graph looks up `joint.shapes.myshapes.MyElement` model when deserializing a graph from the JSON format. If the graph is instantiated as e.g. `var graph = new joint.dia.Graph({}, { cellNamespace: myShapesNamespace })`, then the graph will read the model definition from the `myShapesNamespace.myshapes.MyElement` object instead. This is useful in situations where you don't want to - for any reason - use the `joint.shapes` namespace for defining your own custom shapes. This option is often used in combination with the `cellNamespaceView` option on the joint.dia.Paper object.