<!--
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at
   http://www.apache.org/licenses/LICENSE-2.0
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License. See accompanying LICENSE file.
-->

<li><span class="section-nav-list-main-title">Runners</span></li>
<li><a href="{{ site.baseurl }}/documentation/runners/capability-matrix/">Capability Matrix</a></li>
<li><a href="{{ site.baseurl }}/documentation/runners/direct/">Direct Runner</a></li>
<li><a href="{{ site.baseurl }}/documentation/runners/apex/">Apache Apex</a></li>
<li><a href="{{ site.baseurl }}/documentation/runners/flink/">Apache Flink</a></li>
<li><a href="{{ site.baseurl }}/documentation/runners/gearpump/">Apache Gearpump</a></li>
<li><a href="{{ site.baseurl }}/documentation/runners/nemo/">Apache Nemo</a></li>
<li><a href="{{ site.baseurl }}/documentation/runners/samza/">Apache Samza</a></li>
<li><a href="{{ site.baseurl }}/documentation/runners/spark/">Apache Spark</a></li>
<li><a href="{{ site.baseurl }}/documentation/runners/dataflow/">Google Cloud Dataflow</a></li>
