#  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.

streamlet-api-beta:
  title: The Heron Streamlet API is in beta
  content: The Heron Streamlet API is well tested and can be used to build and test topologies locally. The API is not yet fully stable, however, and breaking changes are likely in the coming weeks.
  type: success
storm-api:
  title: This document pertains to the older, Storm-based, Heron Topology API
  content: |
    Heron now offers two separate APIs for building topologies: the original, [Storm](https://storm.apache.org)-based Topology API, and the newer [Streamlet API](../../../concepts/topologies#the-heron-streamlet-api). Topologies created using the Topology API can still run on Heron and there are currently no plans to deprecate this API. We would, however, recommend that you use the Streamlet API for future work.
  type: warning
api-server-cluster-name:
  title: Select the cluster name carefully
  content: |
    Selecting a cluster name is important. When using the [Heron CLI tool](../heron-cli) to manage topologies, you always need to specify a cluster name. That cluster name must match the name assigned to the cluster when starting up the API server. If you start up the API server and assign the cluster the name `us-west-1` and later restart the server as `us-west-backup`, then all Heron CLI commands will need to be updated accordingly.
  type: danger
spouts-and-bolts:
  title: Don't want to manually create spouts and bolts? Try the Heron Streamlet API
  type: success
  content: |
    If you find manually creating and connecting spouts and bolts to be overly cumbersome, we recommend trying out the [Heron Streamlet API](../streamlet-api) for Java, which enables you to create your topology logic using a highly streamlined logic inspired by functional programming concepts.
new-streamlet-api:
  title: New Streamlet API for Heron
  type: success
  content: |
    As of version 0.16.0, Heron offers a new **Streamlet API** that you can use to write topologies in a more declarative, functional manner, without needing to specify spout and bolt logic directly. The Streamlet API is **currently in beta** and available for [Java](../../developers/java/streamlet-api). The Streamlet API for Python will be available soon.

    More information on the Streamlet API can be found [below](#the-heron-streamlet-api).

eco-api-beta:
  title: The Heron ECO API is in beta
  content: The Heron ECO API can be used to build and test topologies on your local or on a cluster.  The API still needs some testing and feedback from the community to understand how we  should continue to develop ECO.
  type: success