<!--
 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">Languages</span></li>

<li>
  <span class="section-nav-list-title">Java</span>
  <ul class="section-nav-list">
    <li><a href="{{ site.baseurl }}/documentation/sdks/java/">Java SDK overview</a></li>
    <li><a href="https://beam.apache.org/releases/javadoc/{{ site.release_latest }}/" target="_blank">Java SDK API reference <img src="{{ site.baseurl }}/images/external-link-icon.png"
                                                                                                                                   width="14" height="14"
                                                                                                                                   alt="External link."></a>
    </li>
    <li><a href="{{ site.baseurl }}/documentation/sdks/java-dependencies/">Java SDK dependencies</a></li>
    <li><a href="{{ site.baseurl }}/documentation/sdks/java-extensions/">Java SDK extensions</a></li>
    <li><a href="{{ site.baseurl }}/documentation/sdks/java-thirdparty/">Java 3rd party extensions</a></li>
    <li><a href="{{ site.baseurl }}/documentation/sdks/java/testing/nexmark/">Nexmark benchmark suite</a></li>
  </ul>
</li>

<li>
  <span class="section-nav-list-title">Python</span>
  <ul class="section-nav-list">
    <li><a href="{{ site.baseurl }}/documentation/sdks/python/">Python SDK overview</a></li>
    <li><a href="https://beam.apache.org/releases/pydoc/{{ site.release_latest }}/" target="_blank">Python SDK API reference <img src="{{ site.baseurl }}/images/external-link-icon.png"
                                                                                                                                   width="14" height="14"
                                                                                                                                   alt="External link."></a>
    </li>
    <li><a href="{{ site.baseurl }}/documentation/sdks/python-dependencies/">Python SDK dependencies</a></li>
    <li><a href="{{ site.baseurl }}/documentation/sdks/python-streaming/">Python streaming pipelines</a></li>
    <li><a href="{{ site.baseurl }}/documentation/sdks/python-type-safety/">Ensuring Python type safety</a></li>
    <li><a href="{{ site.baseurl }}/documentation/sdks/python-pipeline-dependencies/">Managing pipeline dependencies</a></li>
  </ul>
</li>

<li>
  <span class="section-nav-list-title">Go</span>
  <ul class="section-nav-list">
    <li><a href="{{ site.baseurl }}/documentation/sdks/go/">Go SDK overview</a></li>
    <li><a href="https://godoc.org/github.com/apache/beam/sdks/go/pkg/beam" target="_blank">Go SDK API reference <img src="{{ site.baseurl }}/images/external-link-icon.png"
                                                                                                                                   width="14" height="14"
                                                                                                                                   alt="External link."></a>
    </li>
  </ul>
</li>

<li>
  <span class="section-nav-list-title">SQL</span>
  <ul class="section-nav-list">
    <li><a href="{{ site.baseurl }}/documentation/dsls/sql/overview/">Overview</a></li>
    <li><a href="{{ site.baseurl }}/documentation/dsls/sql/walkthrough/">Walkthrough</a></li>
    <li><a href="{{ site.baseurl }}/documentation/dsls/sql/shell/">Shell</a></li>
    <li class="section-nav-item--collapsible">
      <span class="section-nav-list-title">SQL Reference</span>

      <ul class="section-nav-list">
        <li><a href="{{ site.baseurl }}/documentation/dsls/sql/data-types/">Data types</a></li>
        <li><a href="{{ site.baseurl }}/documentation/dsls/sql/lexical/">Lexical structure</a></li>
        <li><a href="{{ site.baseurl }}/documentation/dsls/sql/create-external-table/">CREATE EXTERNAL TABLE</a></li>
        <li><a href="{{ site.baseurl }}/documentation/dsls/sql/select/">SELECT</a></li>
        <li><a href="{{ site.baseurl }}/documentation/dsls/sql/windowing-and-triggering/">Windowing & Triggering</a></li>
        <li><a href="{{ site.baseurl }}/documentation/dsls/sql/joins/">Joins</a></li>
        <li><a href="{{ site.baseurl }}/documentation/dsls/sql/scalar-functions/">Scalar functions</a></li>
        <li><a href="{{ site.baseurl }}/documentation/dsls/sql/aggregate-functions/">Aggregate functions</a></li>
        <li><a href="{{ site.baseurl }}/documentation/dsls/sql/user-defined-functions/">User-defined functions</a></li>
        <li><a href="{{ site.baseurl }}/documentation/dsls/sql/set/">SET Pipeline Options</a></li>
      </ul>
    </li>
  </ul>
</li>
