# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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.

baseURL = '//nightlies.apache.org/flink/flink-statefun-docs-release-3.1'
languageCode = "en-us"
title = "Apache Flink Stateful Functions"
enableGitInfo = false
theme = "book"
pygmentsUseClasses = true

[params]
  # Flag whether this is a stable version or not.
  # Used for the quickstart page.
  IsStable = true

  # Flag to indicate whether an outdated warning should be shown.
  ShowOutDatedWarning = false

  # This are the version referenced in the docs. Please only use these variables
  # to reference a specific Flink version, because this is the only place where
  # we change the version for the complete docs when forking of a release branch
  # etc.
  # The full version string as referenced in Maven (e.g. 1.2.1)
  Version = "3.1.1"

  # For stable releases, leave the bugfix version out (e.g. 1.2). For snapshot
  # release this should be the same as the regular version
  VersionTitle = "3.1"

  # The branch for this version of Apache Flink Stateful Functions
  Branch = "release-3.1"

  # The github repository for Apache Flink Stateful Functions
  Repo = "//github.com/apache/flink-statefun"

  GithubRepo = "https://github.com/apache/flink-statefun.git"

  # This suffix is appended to the Scala-dependent Maven artifact names
  ScalaVersion = "_2.12"

  ProjectHomepage = "//flink.apache.org"

  # External links at the bottom
  # of the menu
  MenuLinks = [
    ["Project Homepage", "//flink.apache.org"],
    ["JavaDocs", "//nightlies.apache.org/flink/flink-statefun-docs-release-3.1/api/java/"],
  ]

  PreviousDocs = [
    ["3.0", "https://nightlies.apache.org/flink/flink-statefun-docs-release-3.0"],
    ["2.2", "https://nightlies.apache.org/flink/flink-statefun-docs-release-2.2"],
    ["2.1", "https://nightlies.apache.org/flink/flink-statefun-docs-release-2.1"],
    ["2.0", "https://nightlies.apache.org/flink/flink-statefun-docs-release-2.2"]
  ]

[markup]
[markup.goldmark.renderer]
  unsafe = true
