---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ytsaurus.tech/docs/en/flow/start.md
  - https://ytsaurus.tech/docs/ru/flow/start.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ytsaurus.tech/docs/en/llms.txt

<!-- source: en/_includes/flow/start.md -->
# Getting started with YTsaurus Flow

This section walks you through the steps to implement and run your own pipeline in Flow.

<!-- source: en/_includes/flow/language-choice.md -->
## Choose a language {#choose-language}

Flow supports several languages for implementing business logic:

- **[C++](https://ytsaurus.tech/docs/en/flow/cpp/getting-started.md)** — native implementation, maximum performance, full control. Use this for high-load pipelines.
- **[Java and Kotlin](https://ytsaurus.tech/docs/en/flow/java/getting-started.md)** — run via the [companion](https://ytsaurus.tech/docs/en/flow/concepts/companion.md) mechanism. They support Spring Boot. These are suitable for teams with a JVM stack.
- **[Python](https://ytsaurus.tech/docs/en/flow/python/getting-started.md)** — runs via the [companion](https://ytsaurus.tech/docs/en/flow/concepts/companion.md) mechanism. This is the easiest way to prototype a pipeline or process a small data stream.
- **[Go](https://ytsaurus.tech/docs/en/flow/go/getting-started.md)** — runs via the [companion](https://ytsaurus.tech/docs/en/flow/concepts/companion.md) mechanism. A single binary runs the pipeline and acts as a companion in the job. Suitable for teams with a Go stack.
- **[YQL](https://ytsaurus.tech/docs/en/flow/yql/getting-started.md)** — declarative pipeline description as an SQL query. It has a low entry barrier and doesn’t require writing code in C++, Java, Kotlin, Go, or Python. It’s under active development, and not all planned features are available yet.
<!-- endsource: en/_includes/flow/language-choice.md -->

## General plan

No matter which language you choose, creating a pipeline involves the following steps:

1. **Try the [Quick start](https://ytsaurus.tech/docs/en/flow/quickstart.md)** — run the C++ Word Count pipeline to get familiar with the Flow infrastructure.

2. **Review the basic concepts**. Read the [glossary](https://ytsaurus.tech/docs/en/flow/concepts/glossary.md) to understand the Flow model: pipelines, streams, computations, and messages.

3. **Study the concepts**. Get to know [Computation](https://ytsaurus.tech/docs/en/flow/concepts/computation.md), [Watermarks and Timers](https://ytsaurus.tech/docs/en/flow/concepts/watermarks.md), and [Stateful processing](https://ytsaurus.tech/docs/en/flow/concepts/stateful.md), as well as the [guarantees](https://ytsaurus.tech/docs/en/flow/concepts/guarantees.md) provided by the system.

4. **Explore examples** in your chosen language:
   - C++: [WordCount](https://ytsaurus.tech/docs/en/flow/cpp/examples/word_count.md), [Shuffle](https://ytsaurus.tech/docs/en/flow/cpp/examples/shuffle.md), [WaitClickJoin](https://ytsaurus.tech/docs/en/flow/cpp/examples/wait_click_join.md)
   - Java: [WordCount](https://ytsaurus.tech/docs/en/flow/java/examples/wordcount.md), [Shuffle](https://ytsaurus.tech/docs/en/flow/java/examples/shuffle.md), [WaitClickJoin](https://ytsaurus.tech/docs/en/flow/java/examples/wait_click_join.md)
   - Python: [WordCount](https://ytsaurus.tech/docs/en/flow/python/examples/wordcount.md), [Shuffle](https://ytsaurus.tech/docs/en/flow/python/examples/shuffle.md), [WaitClickJoin](https://ytsaurus.tech/docs/en/flow/python/examples/wait_click_join.md)
   - Go: [WordCount](https://ytsaurus.tech/docs/en/flow/go/examples/wordcount.md), [Shuffle](https://ytsaurus.tech/docs/en/flow/go/examples/shuffle.md), [WaitClickJoin](https://ytsaurus.tech/docs/en/flow/go/examples/wait_click_join.md)
   - YQL: [Quick start](https://ytsaurus.tech/docs/en/flow/yql/getting-started.md)

5. **Check out the available [connectors](https://ytsaurus.tech/docs/en/flow/connectors/about.md)** — queues, static tables, and others.

6. **Describe the pipeline spec** in YSON format. In addition to the examples, the [Spec & DynamicSpec](https://ytsaurus.tech/docs/en/flow/concepts/spec.md) section will help you.

7. **Implement your business logic** in the language you’ve chosen, following the relevant quick start guide.

8. **Create the necessary objects in YTsaurus** — tables, queues, and the pipeline.

9. **Write tests**. Follow the instructions for your programming language:
   - [C++](https://ytsaurus.tech/docs/en/flow/cpp/testing.md)
   - [Java](https://ytsaurus.tech/docs/en/flow/java/testing.md)
   - [Python](https://ytsaurus.tech/docs/en/flow/python/testing.md)
   - [Go](https://ytsaurus.tech/docs/en/flow/go/testing.md)

10. **Run the pipeline** and inspect its state with `yt flow get-pipeline-state <pipeline_path>`. For release rules, read [Release and table change rules](https://ytsaurus.tech/docs/en/flow/devops/vanilla/releases.md#release-and-configure-basic-rules).

## See also

- [About Flow](https://ytsaurus.tech/docs/en/flow/about.md)
- [Quick start](https://ytsaurus.tech/docs/en/flow/quickstart.md)
- [Basic concepts](https://ytsaurus.tech/docs/en/flow/concepts/glossary.md)
- [Connectors](https://ytsaurus.tech/docs/en/flow/connectors/about.md)
<!-- endsource: en/_includes/flow/start.md -->
