Flyte is an LF AI & Data project for building production data and ML pipelines: tasks and workflows are Python functions with strongly typed interfaces, each execution is versioned and cacheable, and the whole thing runs on Kubernetes with a Go control plane underneath.
Self-hosted on Kubernetes: FlytePropeller creates a pod per task and deletes it after, connectors hand tasks to external services without holding a pod, and triggers cover cron, fixed rate, and artifact events. Typed I/O offloads large values to blob storage. Union.ai sells the managed platform, billed per action plus allocated compute.
How Flyte answers the questions Workflow Orchestration turns on.
| How it works | |
| Authoring model | Typed Python: tasks are functions whose inputs and outputs are checked before the run |
| Unit of work | A task: an async Python function under @env.task, grouped by a TaskEnvironment carrying the image, resources and defaults. Flyte 2 dropped the static @workflow DAG: composition is ordinary Python, tasks awaiting tasks, and fan-out is asyncio.gather |
| Passing data | Typed function signatures checked against their annotations, with the io types (File, Dir, DataFrame) offloading large values to blob storage and passing a reference rather than the bytes |
| Triggers | A Trigger attached to a task, automated by Cron with a five-field expression and a timezone, FixedRate in minutes, or OnArtifact, firing whenever a named artifact is produced; runs otherwise start from the CLI, the SDK or the API |
| Delivery guarantee | Retries per task; caching skips one whose inputs and version are unchanged |
| Caching and reruns | cache="auto" hashes the function body, image and code bundle into a version, so editing the function invalidates the entry; "override" pins a version you set and "disable" turns it off. ignored_inputs drops inputs from the key, salt namespaces it, and serialize makes concurrent identical calls wait on one result |
| Running it | |
| Where tasks run | A pod per task, created and deleted by FlytePropeller; operator plugins for Spark and Ray, and Web API tasks that start no pod |
| Connections | |
| Task languages | Python and nothing else: Flyte 2 ships one SDK, `flyte` on PyPI, and flytekit-java was archived in April 2026. Other languages run inside the task's own container image, or behind a connector |
| Connectors | flyte.connectors, the mechanism Flyte 1 called agents, a registry of async connectors that hand a task to an external service and poll it rather than holding a pod for the duration; anything not covered is a container image |
| Cost | |
| Billing unit | Free to self-host: Flyte 1 in full, and Flyte 2 through a single-binary chart still at v0.2.0 while its distributed backend is "coming soon". Union.ai, the vendor, bills per action at $0.0075, an action being one invocation of a task, trace or condition, with retries not counted and duration irrelevant, from $950 a month that is itself usage credit, plus allocated compute by the second |
vs Flyte: Free · Python, TypeScript
vs Flyte: Self-hosted · Free · Java
vs Flyte: Self-hosted · Free