Running locally
Flyte runs locally with no cluster or Docker needed. Install the SDK, write tasks, and run them on your machine. When you’re ready to scale, drop the --local flag and the same code runs on a remote cluster with GPUs.
Getting started
If you haven’t already, install the SDK and configure local persistence as described in the Quickstart.
Running tasks locally
The --local flag tells Flyte to execute a task in your local Python environment rather than on a remote cluster. Add --tui to launch the interactive Terminal UI for real-time monitoring.
Basic local execution:
flyte run --local hello.py mainWith the interactive TUI:
flyte run --local --tui hello.py mainYou can also run tasks programmatically using the Python SDK with flyte.run(). See
Run and deploy tasks for details.
Terminal UI
The TUI is an interactive split-screen dashboard. Task tree on the left, details and logs on the right.
flyte run --local hello.py main
What you see:
- Task tree with live status:
●running,✓done,✗failed - Cache indicators:
$cache hit,~cache enabled but missed - Live logs:
print()output streams in real time - Details panel: inputs, outputs, timing, report paths
- Traced sub-tasks: child nodes for
@flyte.tracedecorated functions
Keyboard shortcuts:
| Key | Action |
|---|---|
q |
Quit |
d |
Details tab |
l |
Logs tab |
Exploring past runs
If you created a config file via flyte create config --local-persistence, Flyte
persists the inputs and outputs of every task run locally, so you can always go back and inspect what a task received and produced. Launch the TUI on its own to browse past runs, compare inputs and outputs, and review reports:
flyte start tuiWhat works locally
Most Flyte features work in both local and remote execution. The table below summarizes how each feature behaves locally.
| Feature | Local behavior | Details |
|---|---|---|
| Caching | Outputs stored in local SQLite, keyed on task name and inputs. Same inputs = instant results. | Caching |
| Tracing | @flyte.trace functions appear as child nodes in the TUI with their own timing, inputs, and outputs. |
Traces |
| Reports | HTML files saved locally. TUI shows the file path. | Reports |
| Serving | Run apps locally with python serve.py or flyte.with_servecontext(mode="local"). |
Serve and deploy apps |
| Plugins | Same decorators and APIs as remote. Secrets come from environment variables. | Integrations |
| Secrets | Read from .env files or environment variables. No flyte create secret needed. |
Secrets |
Local to devbox/remote
The same code runs in both environments. Here’s what changes:
| Aspect | Local | Devbox/Remote |
|---|---|---|
| Run pipeline | flyte run --local |
flyte run |
| TUI | --tui flag |
Dashboard in Flyte UI |
| Caching | Local SQLite | Cluster-wide distributed cache |
| Reports | Local HTML files | Rendered in the Flyte UI |
| Serving | python serve.py |
flyte deploy serve.py env |
| Secrets | .env / environment variables |
flyte create secret / flyte.Secret |
| Compute | Your CPU/GPU | Resources(cpu=2, memory="4Gi", gpu=1) |
The
TaskEnvironment is the bridge. Locally, image and resource settings are ignored. On the cluster, Flyte builds containers and allocates compute from the same definition.
Next steps
- Running the devbox: Run a full local Flyte cluster with Docker to test containerized execution before deploying remotely.
- Running on a remote cluster: Configure the CLI and SDK to run on a remote Flyte cluster.