Plugin developed by Andrew Pitts and published under the MIT license. Original algorithm by Mathieu Jacomy and ported to sigma.js with permission.

This plugin runs an algorithm which distributes nodes in the network, ensuring that they do not overlap and providing a margin where specified.



Changes the layout's configuration.

var listener = s.configNoverlap(config);


Starts the layout. It is possible to pass a configuration if this is the first time you start the layout.



Returns whether the layout is running.



  • nodes: array: the subset of nodes to apply the layout.

Algorithm configuration

  • nodeMargin: number 5.0: The additional minimum space to apply around each and every node.
  • scaleNodes: number 1.2: A multiplier to apply to nodes such that larger nodes will have more space around them if this multiplier is greater than zero.
  • gridSize: integer 20: The number of rows and columns to use when dividing the nodes up into cells which the algorithm is applied to. Use more rows and columns for larger graphs for a more efficient algorithm.
  • permittedExpansion number 1.1: At every step, this is the maximum ratio to apply to the bounding box, i.e. the maximum by which the network is permitted to expand.
  • rendererIndex integer 0: The index of the renderer to use to compute overlap and collisions of the nodes.
  • speed number 2: A larger value increases the speed with which the algorithm will convergence at the cost of precision.
  • maxIterations number 500: The maximum number of iterations to run the algorithm for before stopping it.

Easing configuration

  • easing string: if specified, ease the transition between nodes positions if background is true. The duration is specified by the Sigma settings animationsTime. See sigma.utils.easing for available values.
  • duration number: duration of the transition for the easing method. Default value is Sigma setting animationsTime.


The plugin dispatches the following events:

  • start: on layout start.
  • interpolate: at the beginning of the layout animation if an easing function is specified and the layout is ran on background.
  • stop: on layout stop, will be dispatched after interpolate.


s = new sigma({
  graph: g,
  container: 'graph-container'

var config = {
  nodeMargin: 3.0,
  scaleNodes: 1.3

// Configure the algorithm
var listener = s.configNoverlap(config);

// Bind all events:
listener.bind('start stop interpolate', function(event) {

// Start the algorithm: