Flyte 1 vs. Flyte 2

Flyte 2 is a massive architectural upgrade to Flyte 1, delivering higher scale, higher performance, and higher durability with simple migration.

Compare Features

Flyte 1 was built for a world of linear data pipelines. Flyte 2 is built for the world you're actually operating in now: durable compute-intensive jobs, dynamic agentic workflows, and production scale. Same open-source commitment, upgraded runtime underneath.

Workflow fanout
~5K tasks
bounded by map-task mechanics and K8s control-plane throughput
~10K tasks
improved orchestration, same underlying K8s scheduling path
Workflow executions / hour
~10K/hr
~10K/hr
Task executions / minute
~150/min
each task pays pod scheduling, image pull, container start, and Python import overhead
~250/min
Flyte 2 improves control flow
Cold start latency
~30s
~30s
Concurrent actions
~500
bounded by controller and global cluster limits
~10K tasks
improved orchestration, same underlying K8s scheduling path
Python-native workflow authoring
Static DAG DSL
Workflows must be fully defined at compile Tasks can call tasks directly with loops, time
Pure Python
Tasks can call tasks directly with loops, conditionals, and async control flow
Dynamic, agent-native workflows
Workflow structure is fixed at compile time. Branching paths must be known and defined ahead of execution
Build workflows to branch, loop, and generate new tasks at runtime. Native support for agentic decision loops and on the fly tool-calling logic
Workflow sandboxing for generated code
Monty sandbox starts in microseconds and structurally blocks filesystem access, network I/O, OS calls, and arbitrary imports; heavy computation runs in isolated containers
OOM crash handling
Task fails. Requires a manual rerun, often with the same resource shape that caused the crash
Catches the OOM, resumes with adjusted memory as determined by workflow author, no manual intervention needed at runtime
Spot node preemption
Preemption interrupts or fails the workflow. Recovery is a manual restart
Preemption is caught and handled in workflow logic; execution resumes rather than restarting from scratch
Custom error handling
Failures surface through task state and static, pre-configured retry policies only
Custom errors can be caught and handled directly in Python control flow, not just retried blindly
Runtime resource overrides
Resource shape is fixed at compile time. Adapting to a failure mode means redesigning the workflow
Override GPU, memory, image, retry policy, and environment at execution time, no redeploy required
Debugging after a failure
Static DAG view. Limited visibility into why or where a dynamic workflow failed
Visual reruns after crashes, full self-healing recovery history, and real-time execution state in the Ul
Distributed training resilience
Kubeflow operator only. A failed worker typically means restarting the whole job
Clustered tasks via native Kubernetes jobsets, with the same failure recovery model applied to distributed runs
Live model / realtime serving
Batch system; a separate serving stack is required
Single-node realtime serving via native Serve integration, alongside batch.
Batch inference / GPU utilization
Partial
Standard batch execution. Naive GPU utilization typically runs 30-40% due to idle time during data load.
Dynamic and token-aware batching pipeline data loading and inference concurrently, keeping GPUs continuously fed.
Agent execution runtime
Every tool call or short unit of work pays full batch-system overhead; impractical for chained steps
Control-flow expressiveness improves significantly with native Python branching and loops.
Unified batch and realtime lifecycle
Training/eval pipelines and serving are separate systems
The same data plane runs training workflows and serves single-node realtime endpoints: preprocess, train, evaluate, register, serve.

Migrating from Flyte 1

If you're running Flyte 1 in production, we’ve created resources to make the upgrade easy.

Migration Hub

See our full collection of resources, including the step-by-step Migration Guide, skills, Flyte 1 support sunset info, and virtual office hours.

1:1 Migration Consultation

(limited availability)

Get 30 minutes with a Union.ai engineer to walk through your specific migration, free.

Frequently asked questions

Start with the Migration Hub for all resources or go straight to the Migration Guide for step-by-step instructions and the full API-level mapping.

No. The Python task and workflow model carries forward. Most migration work is mechanical, updating decorators and config patterns, not a rewrite of your workflow logic.

Flyte 1 will continue to receive security patches in accordance with the published sunset schedule on the Migration Hub, after which it will be end of life.

No. The deployment model is unchanged, same Helm, Postgres, ingress, and IAM setup. Flyte 2 is now validated for single-cluster production at GA, so if you're already running Flyte 1 this way, it's an upgrade in place.

Task configuration (image, hardware resources) now lives in a `TaskEnvironment` object instead of the task decorator. Workflows are authored as tasks calling tasks directly via `@env.task`, one decorator instead of two. `map_task` maps to `flyte.map` or `asyncio.gather`, and `ImageSpec` maps to `flyte.Image`. These are the breaking changes to plan for, and the Migration Guide has the full API-level mapping.

Yes and it’s a straightforward update. `@workflow` and `@task` become `@env.task` decorators defined within a `TaskEnvironment`. The Migration Guide takes you through this.

It's the GA milestone that completes the path from local devbox development to full production scale in one open-source platform. You build and test locally, then run the same environment in production with no architectural changes.

Explore Flyte 2 locally