<!DOCTYPE html>
<html lang="en">
  <head>
    
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
    <link rel="stylesheet" href="https://www.eclipse.org/elk/css/elk.css">
    <link rel="stylesheet" href="https://www.eclipse.org/elk/css/prism.css">

    <title>ELK Metadata Language (ELK)</title>

    
    
  </head>
  <body>

<nav class="navbar navbar-toggleable-md navbar-inverse">
  <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>
  <a class="navbar-brand" href="https://www.eclipse.org/elk/">Eclipse Layout Kernel</a>
  <div class="collapse navbar-collapse" id="navbarCollapse">
    <ul class="navbar-nav mr-auto">

      
      
        
        <li class="nav-item">
          <a class="nav-link" href="../../downloads.html">Downloads</a>
        </li>
      
        
        <li class="nav-item">
          <a class="nav-link" href="../../gettingstarted.html">Getting Started</a>
        </li>
      
        
        <li class="nav-item active">
          <a class="nav-link" href="../../documentation.html">Documentation <span class="sr-only">(current)</span></a>
        </li>
      
        
        <li class="nav-item">
          <a class="nav-link" href="../../reference.html">Reference</a>
        </li>
      
        
        <li class="nav-item">
          <a class="nav-link" href="../../support.html">Support</a>
        </li>
      

      <li class="nav-item">
        <a class="nav-link" href="https://github.com/eclipse/elk">GitHub</a>
      </li>

    </ul>
  </div>
</nav>


<div class="container px-3 py-5">


<div class="row">
  <div class="col-sm-9">
    <h1>ELK Metadata Language</h1>

    

<p>As described <a href="../../documentation/tooldevelopers/usingplainjavalayout.html">in other parts of the documentation</a>, the <em>Eclipse Layout Kernel</em> relies on metadata about all available layout algorithms and the layout options they support. Supplying metadata for your layout algorithm is done by writing an <em>ELK Metadata File</em> in our textual metadata language. The file is used by the ELK SDK to generate the following Java classes:</p>

<ul>
<li>An <code>ILayoutMetaDataProvider</code> that contains <code>IProperty</code> objects for each layout option you declare, along with a method that registers these options and layout algorithm categories with the <code>LayoutMetaDataService</code>. It is this class that needs to be registered through the <code>META-INF/services/ILayoutMetaDataProvider</code> file.</li>
<li>One <code>ILayoutMetaDataProvider</code> for each algorithm you declare. This contains one <code>IProperty</code> object for each layout option your algorithm supports (with the configured default value), as well as a method that registers your algorithm and its supported options with the <code>LayoutMetaDataService</code>. You should use the <code>IProperty</code> objects in this class to retrieve layout option values to ensure that you get correct defaults if an option is not set. These classes do not have to be registered with ELK&rsquo;s extension point because they are automatically registered through the main metadata class.</li>
</ul>

<p>This page explains how to write a metadata file. See the end of the page for an example metadata file of a very simple layout algorithm. (Pro-tip: Reading the previous sentence in action-movie-trailer-narrator voice makes it more compelling.)</p>

<h2 id="creating-and-registering-your-metadata-file">Creating and Registering Your Metadata File</h2>

<p>Follow these steps to add a metadata file to your layout algorithm project:</p>

<ol>
<li>Right-click your project&rsquo;s base package (which should have the same name as your plug-in project), and click <em>New - File</em>. Note that the base package cannot be empty (of course, you would never use the default empty package anyway since that&rsquo;s bad style now, would you&hellip;).</li>
<li>Give your file a sensible name (which is usually the name of your algorithm), and add the file extension <code>.melk</code>. Click <em>Finish</em>.</li>
<li>If Eclipse asks you whether you want to add the <em>Xtext nature</em> to your project, click <em>Yes</em>.</li>

<li><p>The ELK SDK needs some basic information in your file to generate your
<code>ILayoutMetaDataProvider</code>:</p>

<pre><code class="language-melk">package package.the.melk.file.is.in

bundle {
    // Change the following line according to what you want the
    // package and name of your meta data provider to be
    metadataClass options.MetaDataProvider
}
</code></pre>

<p>See below for details on what this is doing.</p></li>

<li><p>Add a folder <code>META-INF/services</code> inside one of your project&rsquo;s source folders (by default, we put it right inside of the <code>src</code> folder).</p></li>

<li><p>In that folder, create a file named <code>ILayoutMetaDataProvider</code>.</p></li>

<li><p>In that file, add a single line of text which contains the fully qualified name of the <code>ILayoutMetaDataProvider</code> that was generated for you by the ELK SDK.</p></li>

<li><p>Save and close the editor.</p></li>
</ol>

<h2 id="the-metadata-language">The Metadata Language</h2>

<p>The ELK metadata language contains everything you need to make the following information available to ELK:</p>

<ul>
<li>Which layout algorithms your plug-in provides, and which classes implement them.</li>
<li>Which layout options your plug-in contributes, and which layout options your algorithms support.</li>
<li>Which layout algorithm categories your plug-in contributes, and which of them your algorithms belong to.</li>
</ul>

<p>The basic layout of a metadata file looks something like this:</p>

<pre><code class="language-plain">&lt;package declaration&gt;

&lt;imports section&gt;

&lt;bundle information&gt;

&lt;metadata declarations&gt;
</code></pre>

<p>The package declaration and imports section work the same way as they do in Java: the package declaration indicates where the metadata file lies, and the imports import classes used in the file&rsquo;s declarations.The rest of this page will walk you through the remaining parts.</p>

<p><strong>Note:</strong> Feel free to use comments. The metadata language supports Java-style single-line comments (<code>//</code>) and multi-line comments (<code>/* */</code>).</p>

<h3 id="bundle-information">Bundle Information</h3>

<p>To be able to turn your metadata file into an <code>ILayoutMetaDataProvider</code>, ELK needs some basic information. This is what the bundle information section is all about. Here&rsquo;s what it would look like for a typical metadata file:</p>

<pre><code class="language-melk">/**
 * An optional bunch of Javadoc that will end up as the Javadoc for the
 * generated class.
 */
bundle {
    // The sub-package and name of the ILayoutMetaDataProvider that will be
    // generated for you. This is required for the generation process to
    // work.
    metadataClass properties.AwesomeOptions

    // A prefix that will automatically be added to the IDs of new layout
    // options declared in this metadata file. To save your a bit of typing.
    // Not strictly required, but highly recommended.
    idPrefix org.eclipse.elk.awesome
}
</code></pre>

<h3 id="options">Options</h3>

<p>While <a href="../../documentation/tooldevelopers/graphdatastructure/layoutoptions.html">this section of our documentation</a> describes what layout options are and how to use them, this section focuses on making their mere existence known to the world. Doing so will cause the ELK SDK to generate <code>IProperty</code> constants in your generated <code>ILayoutMetaDataProvider</code> that you can use <a href="../../documentation/tooldevelopers/graphdatastructure/layoutoptions.html">as described</a> to set layout option values. An option declaration can become rather complex, so here&rsquo;s what it generally looks like (we will go into the missing details below):</p>

<pre><code class="language-melk">// The option's ID, appended to the idPrefix declared in the bundle information
&lt;deprecated&gt; &lt;modifier&gt; option myLayoutOptionId : &lt;type&gt; {
    // A user-readable label for the layout option
    label &quot;Wobblyness Factor&quot;

    // A short user-readable description. This will also become the property
    // constant's Javadoc comment.
    description
        &quot;Controls the overall wobblyness of edges when connected
         to wobbles.&quot;

    // An optional default value used when the option is not configured
    // for a given graph. Of course, the given expression must evaluate
    // to the layout option's type as specified above.
    default = Direction.UNDEFINED

    // Optional lower and upper bounds option values must satisfy to be
    // valid. These must be comparable to the layout option's type as
    // specified above.
    lowerBound = 3
    upperBound = 5

    // Which graph elements the option can be meaningfully applied to.
    targets &lt;targets&gt;

    // An optional list of an arbitrary number of alternate IDs your
    // layout option should be accessible under. You should probably
    // not use this. We introduced this feature to ease the process of
    // transitioning when our project became the Eclipse Layout Kernel,
    // which caused all layout option IDs to change.
    legacyIds the.first.old.id.of.our.option,
              the.second.old.id.of.our.option

    // Some layout options only make sense if another option has a certain
    // value. Add a 'requires' declaration to each such dependency.
    requires some.other.layout.option.id == 42
}
</code></pre>

<p>Let&rsquo;s go through what the sample code didn&rsquo;t explain:</p>

<ul>
<li><p><code>&lt;deprecated&gt;</code></p>

<p>Prepending the option declaration with the <code>deprecated</code> keyword will mark the generated property constant as being deprecated in its Javadoc comment.</p></li>

<li><p><code>&lt;modifier&gt;</code></p>

<p>Option declarations support the following modifiers, of which one can be used:</p>

<table>
<thead>
<tr>
<th>Modifier</th>
<th>Meaning</th>
</tr>
</thead>

<tbody>
<tr>
<td><code>advanced</code></td>
<td> Advanced layout options are not shown in the <em>Layout</em> view by default. The user has to explicitly instruct the view to show advanced layout options.</td>
</tr>

<tr>
<td><code>programmatic</code></td>
<td>Programmatic layout options are not shown in the <em>Layout</em> view at all, but only set through programmatic layout configuration. The reason is often that they are either highly specialized, or that values of their data type cannot be properly entered in the layout view.</td>
</tr>

<tr>
<td><code>output</code></td>
<td>Output options are not really layout options at all, but are used by layout algorithms to annotate the input graph with further layout information that could not be returned otherwise. Not being input options at all, these options are of course not shown in the layout view.</td>
</tr>

<tr>
<td><code>global</code></td>
<td>A layout option that is global can be understood as a layout option that guides ELK&rsquo;s implementation of the layout process rather than influencing what a single layout algorithm does. You should not need to declare global options.</td>
</tr>
</tbody>
</table></li>

<li><p><code>&lt;type&gt;</code></p>

<p>The data type of a layout option. This can be any valid and visible Java type. Note that primitive types will be replaced by their object counterparts (for example, <code>int</code> will become <code>Integer</code>).</p></li>

<li><p><code>&lt;targets&gt;</code></p>

<p>Defines which graph elements a layout option can meaningfully be applied to. This mainly influences which layout options the <em>Layout</em> view shows depending on the currently selected diagram element. An option can have zero or more targets, defined as a comma-separated list. The following are valid targets:</p>

<table>
<thead>
<tr>
<th>Target</th>
<th>Meaning</th>
</tr>
</thead>

<tbody>
<tr>
<td><code>parents</code></td>
<td>The option makes sense for nodes that contain further nodes themselves (<em>parent nodes</em>).</td>
</tr>

<tr>
<td><code>nodes</code></td>
<td>The option makes sense for nodes (which also includes parent nodes).</td>
</tr>

<tr>
<td><code>edges</code></td>
<td>The option makes sense for edges.</td>
</tr>

<tr>
<td><code>ports</code></td>
<td>The option makes sense for ports.</td>
</tr>

<tr>
<td><code>labels</code></td>
<td>The option makes sense for labels.</td>
</tr>
</tbody>
</table>

<p>Note that there is nothing that stops programmers from setting a port option on a node. All you are saying with your declaration is that doing so won&rsquo;t make any difference because you will only interpret the option when it is set on ports.</p></li>
</ul>

<h4 id="grouping-layout-options">Grouping Layout Options</h4>

<p>Everyone likes things to be neat and tidy. Well, alright, <em>we</em> like things to be neat and tidy, which is why related options can be grouped together:</p>

<pre><code class="language-melk">group thegroupname {
    // Your options and nested groups go here
}
</code></pre>

<p>Groups do not just make the metadata file more readable, but also have an effect on the identifiers of your options: all the names of groups your options are in will be placed between the option ID prefix and the option&rsquo;s actual name, thus reflecting the grouping in option IDs as well.</p>

<h4 id="a-note-on-enumerations">A Note on Enumerations</h4>

<p>Layout options may well have an enumeration value type. Just as layout options can be declared to be advanced, this may also be true for enumeration values. Take for example a layout algorithm that offers different implementations of a certain feature. The implementation to be used is specified through a layout option that enumerates all possibilities. However, let us assume that some of the implementations are not quite ready for the public. (Homework assignment: work out five reasons why this could be the case.) The corresponding enumeration values can be annotated to make this clear:</p>

<pre><code class="language-java">public enum Strategy {
    WORKS_ALWAYS,
    WORKS_ON_SUNDAYS,
    @AdvancedPropertyValue
    WORKS_IF_YOU_ARE_CAREFUL,
    @ExperimentalPropertyValue
    WORKS_IN_EXPERIMENTAL_CONDITIONS
}
</code></pre>

<h3 id="categories">Categories</h3>

<p>Each layout algorithm can be assigned to a layout algorithm category. The categorization is for example used by the layout algorithm selection dialog or the documentation. While ELK already provides a number of predefined categories, this is how you would define your own:</p>

<pre><code class="language-melk">// The category's ID, appended to the idPrefix declared in the bundle information
category awesome {
    // A short category label that can be shown to users.
    label &quot;Awesome Algorithms&quot;

    description
        &quot;A not-too-long but totally meaningful description of what this category
         of layout algorithms is all about. Will be shown to users.&quot;
}
</code></pre>

<h3 id="algorithms">Algorithms</h3>

<p>Of course, everything we have done so far was simply in support of the main act: declaring the layout algorithms you have worked hard to develop (just to find out that there&rsquo;s hundreds of little details you got wrong; we&rsquo;ve been there&hellip;). Here&rsquo;s what an algorithm declaration looks like:</p>

<pre><code class="language-melk">// The algorithm's ID
algorithm algorithmid(&lt;class&gt;) {
    // User-readable short name and description for the algorithm
    label &quot;Excellent Algorithm&quot;

    description
        &quot;A brief and completely sensible description of what this algorithm
         does. Will be shown to users.&quot;

    // Optional name of the ILayoutMetaDataProvider class generated for this
    // algorithm
    metadataClass &lt;metadataClass&gt;

    // Optional validator class called by ELK before actually running the
    // layout algorithm.
    validator &lt;validatorClass&gt;

    // Optional path to an image that provides a preview of the kinds of
    // layouts this algorithm will produce. Relative to the plug-in's
    // root folder.
    preview path/to/preview/image.png

    // Optional ID of a category of layout algorithms this algorithm belongs to.
    category the.category.id

    // List of graph features this algorithm explicitly supports (see below)
    features &lt;features&gt;

    // Declarations for each layout option this algorithm supports (see below)
    &lt;supportedOptions&gt;
}
</code></pre>

<p>Three details deserve more explanation:</p>

<ul>
<li><p><code>class</code></p>

<p>The main class that provides the entry to your layout algorithm. This must be a subclass of <code>AbstractLayoutProvider</code> and may have to be imported in your metadata file&rsquo;s import section. <code>AbstractLayoutProvider</code> has an <code>initialize(String)</code> method that expects a <code>String</code> parameter to customize its behavior. You can define that parameter&rsquo;s value for your algorithm like this:</p>

<pre><code class="language-melk">algorithm myAlgorithm(TheAbstractLayoutProviderSubclass#TheParamterValue)
</code></pre></li>

<li><p><code>metadataClass</code></p>

<p>The metadata class will contain the property constants you should use to access your algorithm&rsquo;s property values. If no name is specified, a class with a default name will be generated in the package specified by the metadata file. <em>This class name must be distinct from any other metadata class name, both for algorithms and for the bundle itself.</em></p></li>

<li><p><code>validatorClass</code></p>

<p>Layout algorithms may have certain requirements concerning the graphs they are run on, including connectivity, hierarchy, or simlpy configuration. Instead of checking the input graph&rsquo;s validity in the algorithm itself, a validator class can be specified that is run automatically when layout is invoked through the <code>DiagramLayoutEngine</code>. The class must implement the <code>org.eclipse.elk.core.validation.IValidatingGraphElementVisitor</code> interface.</p></li>

<li><p><code>features</code></p>

<p>This is a comma-separated list of structural graph features that an algorithm explicitly supports. Most of these declarations are purely informational, but graph layout engines might decide to change the layout graph passed to your algorithm depending on whether it supports the original graph&rsquo;s features or not. At the time of writing, these are the possible graph features:</p>

<table>
<thead>
<tr>
<th>Feature</th>
<th>Meaning</th>
</tr>
</thead>

<tbody>
<tr>
<td><code>clusters</code></td>
<td> <strong>TODO: Document</strong></td>
</tr>

<tr>
<td><code>compound</code></td>
<td>Whether an algorithm supports the layout of hierarchical graphs. If it does not, the ELK graph layout engine will only ever give the algorithm a single level of hierarchy to be laid out at a time, regardless of what the user requests.</td>
</tr>

<tr>
<td><code>disconnected</code></td>
<td>Whether an algorithm has explicit support for disconnected components (groups of nodes without connection to other groups of nodes).</td>
</tr>

<tr>
<td><code>edge_labels</code></td>
<td> Whether an algorithm knows how to place edge labels or not. A graph layout engine may decide to run a post-processing on your algorithm&rsquo;s result to place edge labels afterwards.</td>
</tr>

<tr>
<td><code>inside_self_loops</code></td>
<td>Whether an algorithm supports routing a self loop through the inside of a node instead of around it.</td>
</tr>

<tr>
<td><code>multi_edges</code></td>
<td>Whether an algorithm supports edges that have the same source and target.</td>
</tr>

<tr>
<td><code>ports</code></td>
<td>Whether an algorithm supports edges connected to nodes through explicit ports.</td>
</tr>

<tr>
<td><code>self_loops</code></td>
<td>Whether an algorithm supports self loops (edges that connect a node to itself).</td>
</tr>
</tbody>
</table></li>

<li><p><code>supportedOptions</code></p>

<p>Algorithms declare which layout options they support, either with their default values as originally declared or with overridden default values. Each supported option ends up as an <code>IProperty</code> constant in the algorithm&rsquo;s layout meta data provider, complete with correct default values. These constants should be used to retrieve option values from within the algorithm code.</p>

<p>An option support declaration looks like this:</p>

<pre><code class="language-melk">supports the.option.id          // Standard default value
supports the.option.id = 42     // Overridden default value
</code></pre></li>
</ul>

<h2 id="example">Example</h2>

<p>The following is an example metadata file for a very simple layout algorithm:</p>

<pre><code class="language-melk">package cds.layout.simple

import cds.layout.simple.SimpleLayoutProvider
import org.eclipse.elk.core.math.ElkPadding

bundle {
    metadataClass options.SimpleMetaDataProvider
    idPrefix cds.layout.simple
}

option reverseInput : boolean {
    label &quot;Reverse Input&quot;
    description
        &quot;True if nodes should be placed in reverse order of their
        appearance in the graph.&quot;
    default = false
    targets parents
}

algorithm simple(SimpleLayoutProvider) {
    label &quot;Simple Layout Algorithm&quot;
    description
        &quot;This layout provider places nodes along a horizontal or a vertical line.&quot;
    metadataClass options.SimpleOptions

    supports reverseInput
    supports org.eclipse.elk.padding = new ElkPadding(10)
    supports org.eclipse.elk.spacing.edgeEdge = 5
    supports org.eclipse.elk.spacing.edgeNode = 10
    supports org.eclipse.elk.spacing.nodeNode = 10
}
</code></pre>

<p>Note how we override the default value of several properties for this algorithm.</p>

  </div>

  <div class="secnav col-sm-3">
  <ul>
    
    
      
    
      
    
      
        




  
  <a href="../../documentation/tooldevelopers.html">
    <li class="navlevel-1">
      Tool Developers
    </li>
  </a>
  
    
    




  
  <a href="../../documentation/tooldevelopers/graphdatastructure.html">
    <li class="navlevel-2">
      Graph Data Structure
    </li>
  </a>
  
    
    




  
  <a href="../../documentation/tooldevelopers/graphdatastructure/coordinatesystem.html">
    <li class="navlevel-3">
      Coordinate System
    </li>
  </a>
  

  
  <a href="../../documentation/tooldevelopers/graphdatastructure/layoutoptions.html">
    <li class="navlevel-3">
      Layout Options
    </li>
  </a>
  

  
  <a href="../../documentation/tooldevelopers/graphdatastructure/jsonformat.html">
    <li class="navlevel-3">
      JSON Format
    </li>
  </a>
  

  
  <a href="../../documentation/tooldevelopers/graphdatastructure/elktextformat.html">
    <li class="navlevel-3">
      ELK Text Format
    </li>
  </a>
  


  

  
  <a href="../../documentation/tooldevelopers/usingalgorithmsdirectly.html">
    <li class="navlevel-2">
      Using Algorithms Directly
    </li>
  </a>
  

  
  <a href="../../documentation/tooldevelopers/usingplainjavalayout.html">
    <li class="navlevel-2">
      Using Plain Java Layout
    </li>
  </a>
  

  
  <a href="../../documentation/tooldevelopers/usingeclipselayout.html">
    <li class="navlevel-2">
      Using Eclipse Layout
    </li>
  </a>
  
    
    




  
  <a href="../../documentation/tooldevelopers/usingeclipselayout/connectingtoelk.html">
    <li class="navlevel-3">
      Connecting to ELK
    </li>
  </a>
  

  
  <a href="../../documentation/tooldevelopers/usingeclipselayout/advancedconfiguration.html">
    <li class="navlevel-3">
      Advanced Configuration
    </li>
  </a>
  

  
  <a href="../../documentation/tooldevelopers/usingeclipselayout/layoutviewsupport.html">
    <li class="navlevel-3">
      Layout View Support
    </li>
  </a>
  

  
  <a href="../../documentation/tooldevelopers/usingeclipselayout/dependencyinjection.html">
    <li class="navlevel-3">
      Dependency Injection
    </li>
  </a>
  


  


  

  
  <a href="../../documentation/algorithmdevelopers.html">
    <li class="navlevel-1">
      Algorithm Developers
    </li>
  </a>
  
    
    




  
  <a href="../../documentation/algorithmdevelopers/gettingeclipseready.html">
    <li class="navlevel-2">
      Getting Eclipse Ready
    </li>
  </a>
  

  
  <a href="../../documentation/algorithmdevelopers/creatinganewproject.html">
    <li class="navlevel-2">
      Creating a New Project
    </li>
  </a>
  

  
  <a href="../../documentation/algorithmdevelopers/metadatalanguage.html">
    <li class="navlevel-2 active">
      ELK Metadata Language
    </li>
  </a>
  
    
    




  
  <a href="../../documentation/algorithmdevelopers/metadatalanguage/automaticbuilds.html">
    <li class="navlevel-3">
      Automatic Builds
    </li>
  </a>
  


  

  
  <a href="../../documentation/algorithmdevelopers/algorithmimplementation.html">
    <li class="navlevel-2">
      Algorithm Implementation
    </li>
  </a>
  
    
    




  
  <a href="../../documentation/algorithmdevelopers/algorithmimplementation/algorithmstructure.html">
    <li class="navlevel-3">
      Structuring Algorithms
    </li>
  </a>
  


  

  
  <a href="../../documentation/algorithmdevelopers/algorithmdebugging.html">
    <li class="navlevel-2">
      Algorithm Debugging
    </li>
  </a>
  

  
  <a href="../../documentation/algorithmdevelopers/randomgraphs.html">
    <li class="navlevel-2">
      Random Graph Generation
    </li>
  </a>
  

  
  <a href="../../documentation/algorithmdevelopers/unittesting.html">
    <li class="navlevel-2">
      Unit Tests
    </li>
  </a>
  


  

  
  <a href="../../documentation/contributors.html">
    <li class="navlevel-1">
      ELK Contributors
    </li>
  </a>
  
    
    




  
  <a href="../../documentation/contributors/developmentsetup.html">
    <li class="navlevel-2">
      Development Setup
    </li>
  </a>
  

  
  <a href="../../documentation/contributors/developmentworkflow.html">
    <li class="navlevel-2">
      Development Workflow
    </li>
  </a>
  
    
    




  
  <a href="../../documentation/contributors/developmentworkflow/installingwithoomph.html">
    <li class="navlevel-3">
      Installing With Oomph
    </li>
  </a>
  


  

  
  <a href="../../documentation/contributors/buildingelk.html">
    <li class="navlevel-2">
      Building ELK
    </li>
  </a>
  


  


      
    
      
    
      
    
  </ul>

  <div class="incubation-egg">
    <a href="https://www.eclipse.org/projects/what-is-incubation.php">
      <img src="https://www.eclipse.org/images/egg-incubation.png" alt="Incubation" />
    </a>
  </div>
</div>

</div>

    </div>
    <footer role="contentinfo">
      <div class="container">
        <div class="row">
            <div class="col">
              <span class="hidden-print">
                <a href="https://www.eclipse.org"><img class="logo-eclipse-white img-responsive" alt="logo" src="../../img/eclipse_foundation_logo.svg"/></a>
              </span>
            </div>
            <div class="col">
              
            </div>
          </div>
        <div class="row">
          <div class="col hidden-print">
            <a href="http://www.eclipse.org/">Eclipse Foundation</a><br/>
            <a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a><br/>
            <a href="http://www.eclipse.org/legal/termsofuse.php">Website Terms of Use</a><br/>
            <a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a><br/>
            <a href="http://www.eclipse.org/legal">Legal</a>
          </div>
          <div class="col">
              <p class="copyright-text">Copyright &copy; Eclipse Foundation, Inc. All Rights Reserved.</p>
          </div>
        </div>
      </div>

    </footer>

    <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>
    <script src="https://www.eclipse.org/elk/js/prism.js"></script>

    
    <script>$(function() { $('table').addClass('table'); })</script>
  </body>
</html>
