If you want to add your tool items in Toolbox, you need to define a toolbox JSON in your extension. The toolbox JSON files should be placed in toolbox/ folder in your extension.

└─ toolbox/
   └─ toolbox.json

Tool Group

The toolbox JSON defines an array of Tool Group definitions as below:

    "label": "Tool Group 1",
    "id": "tool-group-1",
    "diagram-types": [ "UMLClassDiagram" ],
    "items": [
        "label": "Tool Item 1",
        "id": "tool-item-1",
        "icon": "icon-UMLClass",
        "rubberband": "rect",
        "command": "my:add-element",
        "command-arg": {
          "id": "UMLClass",
          "stereotype": "my-stereotype"
  • label : The tool group title shown in the Toolbox.

  • id : Unique identifier.

  • diagram-types : A list of diagram types. The tool group will be shown only when one of the diagram-types is active. (e.g. "UMLClassDiagram", "UMLUseCaseDiagram", ...)

  • items : A list of tool item definitions.

Tool Item

A tool item represents an element that users can create on a diagram.

  • label : The tool item title shown in the Toolbox

  • id : Unique identifier of the tool item.

  • icon : Icon CSS class name. You can specify already defined icon names (e.g. "icon-UMLClass", "icon-UMLPackage", ...) or your own CSS class name in stylesheets of your extension.

  • rubberband : A type of rubberband. One of "rect"(for sizable node-type elements), "line"(for edge-type elements), "point"(for fixed-size node-type elements).

  • command : A command name to be executed.

  • command-arg : An argument object will be passed to the command.


A command used for tool item should create an element on a diagram. We strongly recommend to use app.factory.createModelAndView() function to create an element. See the section for more detail.

Toolbox will pass options object to the command. The passed options parameter contains:

  • diagram : The active diagram.

  • id : The identifier of tool item.

  • x1, y1, x2, y2 : The user dragged area on the diagram.

  • ... : command-arg are combined.

function handleAddElement (options) {
  options = Object.assign(options, {
    'model-init': {
      'stereotype': options.stereotype
    'view-init': {
      'stereotypeDisplay': 'icon',
      'suppressAttributes': true,
      'suppressOperations': true
  return app.factory.createModelAndView(options)

app.commands.register('my:add-element', handleAddElement)

Last updated