[](https://badge.fury.io/js/elkjs)
The [Eclipse Layout Kernel (ELK)](https://www.eclipse.org/elk/) implements an infrastructure to connect diagram editors or viewers to automatic layout algorithms. This library takes the layout-relevant part of ELK and makes it available to the JavaScript world.
ELK's flagship is a layer-based layout algorithm that is particularly suited for node-link diagrams with an inherent direction and ports (explicit attachment points on a node's border). It is based on the ideas originally introduced by Sugiyama et al. An example can be seen in the screenshot below.
Note that elkjs is not a diagramming framework itself - it computes positions for the elements of a diagram.
elkjs is the successor of [klayjs](https://github.com/kieler/klayjs).
#### Demonstrator
You can see elkjs [live in action](https://rtsys.informatik.uni-kiel.de/elklive/) in conjunction with TypeFox's [sprotty](https://github.com/eclipse/sprotty) diagramming framework.

# FAQs and Recurring Issues
The following list includes some recurring topics that may have been addressed in issues already:
* [#100][ejs100], [elk#355][e355], [elk#627][e627] - How to consider previous layout results, including
* dynamic layout, and
* incrementally adding nodes and edges to an existing layout.
* [elk#315][e315]: Standalone edge routing.
* [#85][ejs85] elkjs itself is a graph layout engine _only_. In other words, no rendering, styling, etc. is provided.
* [#127][ejs127], [#141][ejs141], [#142][ejs142] - Issues due to the underlying code transpilation by GWT and/or due to the outdated usage of js modules:
* `g is not defined`,
* `Can't resolve web-worker`, and
* general usage as part of react, webpack, etc.
* [#6][ejs6] Poor modularization
* Contributions here are welcome!
[ejs6]: https://github.com/kieler/elkjs/issues/6
[ejs85]: https://github.com/kieler/elkjs/issues/85
[ejs100]: https://github.com/kieler/elkjs/issues/100
[ejs127]: https://github.com/kieler/elkjs/issues/127
[ejs141]: https://github.com/kieler/elkjs/issues/141
[ejs142]: https://github.com/kieler/elkjs/issues/142
[e315]: https://github.com/eclipse/elk/issues/315
[e355]: https://github.com/eclipse/elk/issues/355
[e627]: https://github.com/eclipse/elk/issues/627
# Installation
The latest released version:
```bash
npm install elkjs
```
Development version based on ELK's `master` branch.
```bash
npm install elkjs@next
```
# Releases and Versioning
Releases are partly synchronized with ELK's versions: the minor version number is always the same but the revision number may diverge. For instance, elkjs 0.3.0 equals the functionality of ELK 0.3.0 but elkjs 0.3.2 may be different from ELK 0.3.2. This is necessary as there may be fixes that solely concern elkjs and should be released independently of ELK.
# Files
The library consists of two main files:
* `elk-api.js`: Provides the API and only the API.
* `elk-worker.js`: Provides the code that actually knows how to lay out a graph. This is the file that is generated from ELK's Java code base using GWT.
Two further files are provided:
* `elk.bundled.js`: A bundled version of the two previous files, ready to be dropped into a browser's `