{{/*
 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">Roadmap</span></li>
<li><a href="/roadmap/">Roadmap Highlights</a></li>
<li><a href="/roadmap/portability">Portability Framework</a></li>
<li class="section-nav-item">
  <span class="section-nav-list-title">Languages</span>

  <ul class="section-nav-list">
    <li><a href="/roadmap/java-sdk">Java SDK</a></li>
    <li><a href="/roadmap/go-sdk">Go SDK</a></li>
    <li><a href="/roadmap/python-sdk">Python SDK</a></li>
    <li><a href="/roadmap/euphoria">Euphoria API</a></li>
    <li><a href="/roadmap/sql">SQL</a></li>
  </ul>
</li>
<li class="section-nav-item">
  <span class="section-nav-list-title">Runners</span>

  <ul class="section-nav-list">
    <li><a href="/roadmap/apex-runner/">Apex Runner</a></li>
    <li><a href="/roadmap/dataflow-runner/">Google Cloud Dataflow Runner</a></li>
    <li><a href="/roadmap/flink-runner/">Flink Runner</a></li>
    <li><a href="/roadmap/gearpump-runner/">Gearpump Runner</a></li>
    <li><a href="/roadmap/nemo-runner/">Nemo Runner</a></li>
    <li><a href="/roadmap/spark-runner/">Spark Runner</a></li>
    <li><a href="/roadmap/samza-runner/">Samza Runner</a></li>
  </ul>
</li>
<li class="section-nav-item">
  <span class="section-nav-list-title">Connectors</span>

  <ul class="section-nav-list">
    <li><a href="/roadmap/connectors-java-sdk/">Java SDK</a></li>
    <li><a href="/roadmap/connectors-python-sdk/">Python SDK</a></li>
    <li><a href="/roadmap/connectors-go-sdk/">Go SDK</a></li>
    <li><a href="/roadmap/connectors-multi-sdk/">Multi-SDK Efforts</a></li>
  </ul>
</li>
