Using GoJS with Node.js

As of 2.0, GoJS can be used in DOM-less contexts like Node.js. However there are some considerations:

For server-side operations that need to measure Pictures or TextBlocks, you should consider using a headless browser with Node. Click here for examples using Node with Puppeteer (headless Chrome).

Node.js example

If you saved the following JavaScript as nodescript.js and run it with node (node nodescript.js), it will output Model JSON results in the console, which include the locations of laid-out Nodes. You can use Node.js in this way to do server-side operations like large layouts, and then send the JSON to the client.

// nodescript.js
// This example loads the GoJS library, creates a Diagram with a layout and prints the JSON results.

// Load GoJS.  This assumes using require and CommonJS:
const go = require("gojs");

const $ = go.GraphObject.make;  // for conciseness in defining templates

const myDiagram =
  $(go.Diagram, '', // No DOM, so there can be no DIV!
    {
      viewSize: new go.Size(400,400), // Set this property in DOM-less environments
      layout: $(go.LayeredDigraphLayout)
    });

myDiagram.nodeTemplate =
  $(go.Node, 'Auto',
    // specify the size of the node rather than measuring the size of the text
    { width: 80, height: 40 },
    // automatically save the Node.location to the node's data object
    new go.Binding('location', 'loc', go.Point.parse).makeTwoWay(go.Point.stringify),
    $(go.Shape, 'RoundedRectangle', { strokeWidth: 0},
      new go.Binding('fill', 'color')),
    $(go.TextBlock,
      new go.Binding('text', 'key'))
  );

// After the layout, output results:
myDiagram.addDiagramListener('InitialLayoutCompleted', function() {
  console.log(myDiagram.model.toJson());
});

// load a model:
myDiagram.model = new go.GraphLinksModel(
[
  { key: 'Alpha', color: 'lightblue' },
  { key: 'Beta', color: 'orange' },
  { key: 'Gamma', color: 'lightgreen' },
  { key: 'Delta', color: 'pink' }
],
[
  { from: 'Alpha', to: 'Beta' },
  { from: 'Alpha', to: 'Gamma' },
  { from: 'Gamma', to: 'Delta' },
  { from: 'Delta', to: 'Alpha' }
]);

Alternatively, if your code is saved as nodescript.mjs or your project is of "type": "module", you can use GoJS as an ES6 module:

// nodescript.mjs
// This example loads the GoJS library, creates a Diagram with a layout and prints the JSON results.

// Load GoJS.  This assumes using import and ES6 modules:
import * as go from "gojs/release/go.mjs";

const $ = go.GraphObject.make;
. . .