> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/workflows/developer-guide/developer-guide.md).

# Developer Guide

This section is for people who **extend** Roboflow Workflows rather than only build with them: block authors, plugin maintainers, and anyone integrating the Workflows Execution Engine into their own application.

If you just want to build and run a Workflow in the browser, start with [Create a Workflow](/workflows/build/create-a-workflow.md) and [Build a Workflow](/workflows/build/build-a-workflow.md) instead.

## The pillars of Workflows

Several components work together to power a Workflow. Some you interact with daily, others run behind the scenes.

* **Workflows UI** - the visual editor where you design and manage Workflows. It is not strictly required, but it is the fastest path from idea to a working Workflow. At the end of the design process it produces the Workflow Definition that the Compiler and Execution Engine consume.
* **Workflow Definition** - an interchangeable JSON document that acts as a program written in the Workflows language. It separates the design of a Workflow from its execution: author it once, then run it in any environment. It declares **inputs** (images or configuration parameters), **steps** (instances of blocks, wired to inputs or to other steps' outputs), and **outputs** (named fields that reference step outputs).
* **Workflow blocks** - modular components that perform a specific operation. To a Workflow author they are black boxes with declared inputs, configuration properties, and outputs. Blocks are grouped into **plugins**, which are ordinary Python libraries. Roboflow ships its own plugins and the community can publish theirs.
* **Compiler and Execution Engine** - the systems that translate a Definition into a computation graph and then run it. Much like a compiler for a traditional language, they check correctness up front and then do the heavy lifting at runtime. They ship with the [Inference Server](https://docs.roboflow.com/deployment/self-hosted/self-hosted) and the [`inference` Python package](https://pypi.org/project/inference/).

<figure><img src="https://media.roboflow.com/inference/add-output.gif" alt="Building a Workflow in the Roboflow editor"><figcaption></figcaption></figure>

## Core concepts

* [Workflow Definition syntax](/workflows/developer-guide/developer-guide/definitions.md) - the JSON language: version marker, inputs, steps, selectors, and outputs
* [Workflow execution](/workflows/developer-guide/developer-guide/workflow-execution.md) - batch-oriented data, scalars, dimensionality levels, conditional execution, and how outputs are constructed
* [Kinds](/workflows/developer-guide/developer-guide/kinds.md) - the Workflows type system that makes connections between blocks verifiable at compile time
* [Data representations](/workflows/developer-guide/developer-guide/data-representations.md) - the Python types your block actually receives: `Batch`, `WorkflowImageData`, `VideoMetadata`

## Under the hood

* [Workflows Compiler](/workflows/developer-guide/developer-guide/compiler.md) - block loading, parsing, graph construction, data lineage, and step initialization
* [Execution Engine](/workflows/developer-guide/developer-guide/execution-engine.md) - runtime input validation, execution order, step input assembly, and flow control
* [Inner workflows](/workflows/developer-guide/developer-guide/inner-workflows.md) - embedding one Workflow Definition inside another
* [Execution Engine changelog](/workflows/developer-guide/developer-guide/execution-engine-changelog.md) - what changed in each Execution Engine version
* [Versioning](/workflows/developer-guide/developer-guide/versioning.md) - the compatibility promises between Definitions, blocks, and the Engine

## Building blocks

* [Create a Workflow block](/workflows/developer-guide/developer-guide/create-a-block.md) - the full guide: manifests, inputs, outputs, batch processing, flow control, dimensionality
* [Bundling blocks into a plugin](/workflows/developer-guide/developer-guide/block-bundling.md) - plugin structure, required interface, kinds, initializers, serializers
* [Dynamic Python blocks](/workflows/developer-guide/developer-guide/dynamic-python-blocks.md) - define a block in place inside a Workflow Definition
* [Testing blocks](/workflows/developer-guide/developer-guide/testing.md) - unit and integration testing approach
* [Community plugins](/workflows/developer-guide/developer-guide/community-plugins.md) - plugins published by the community

## Operating Workflows

* [Workflows Schema API](/workflows/developer-guide/developer-guide/schema-api.md) - describe a Workflow's inputs, outputs, and typing hints programmatically
* [Workflow profiling](/workflows/developer-guide/developer-guide/profiling.md) - measure step timing and find bottlenecks
* [Benchmarks](/workflows/developer-guide/developer-guide/benchmarks.md) - Workflow overhead compared with direct model inference
* [Video processing](/workflows/deploy/video-processing.md) - running Workflows on video frames and streams
