Before you start
Read the docs and run examples
Before diving into code, run at least 5 examples from the Flyte User Guide and Flytesnacks. Pay close attention to the generated graph view, task logs, and execution outputs.
Understand the architecture
Read through the Core Concepts, Control Plane, and Component Architecture sections.
Pick a good first issue
Browse good first issues on GitHub. Plugin and flytekit issues (labeled both
plugins and flytekit) are client-side and are the fastest to contribute to.Component reference
With the exception offlytekit, all components are maintained in the flyteorg/flyte monorepo.
flyteidl — Protobuf interface definitions
flyteidl — Protobuf interface definitions
Purpose: Flyte’s workflow specification. All communication between Flyte components uses these Protobuf messages as the contract.Language: Protocol BuffersMonorepo path: Generated Go code lives in
flyteidl/After modifying .proto files, run:flyteidl/gen/pb-go/. Python generated code is published as the flyteidl PyPI package.flyteadmin — Control plane
flyteadmin — Control plane
Purpose: gRPC + REST control plane. Stores workflow definitions, manages executions, and exposes the AdminService API.Language: GoMonorepo path:
flyteadmin/Development commands:flytepropeller — Kubernetes operator
flytepropeller — Kubernetes operator
Purpose: The workflow execution engine. A Kubernetes operator (controller) that reconciles
FlyteWorkflow CRD objects and drives node execution.Language: GoMonorepo path: flytepropeller/Development commands:flytekit — Python SDK
flytekit — Python SDK
Purpose: The primary Python SDK for writing tasks and workflows.Language: PythonRepository: flyteorg/flytekit (separate repo)Setup:Refer to the Flytekit Contribution Guide for full instructions.
flyteconsole — Web UI
flyteconsole — Web UI
Purpose: The Flyte web console for monitoring workflows, executions, and artifacts.Language: TypeScriptMonorepo path: Refer to the README for full setup.
flyteconsole/Setup:datacatalog — Artifact cache
datacatalog — Artifact cache
Purpose: Manages input/output artifacts and task output memoization.Language: GoMonorepo path:
datacatalog/flyteplugins — Execution plugins
flyteplugins — Execution plugins
Purpose: Backend plugins for external services (Spark, Ray, PyTorch, etc.).Language: GoMonorepo path:
flyteplugins/flytectl — CLI
flytectl — CLI
Purpose: The standalone Flyte CLI for managing resources and running sandboxes.Language: GoMonorepo path:
flytectl/Refer to the FlyteCTL Contribution Guide.Setting up the development environment
Requirements
This guide has been tested on AWS EC2 with Ubuntu 22.04, but works on any Linux system and macOS.Step 1: Install flytectl
Step 2: Start a k3s cluster with Minio and Postgres
Step 3: Build and run Flyte as a single binary
The monorepo builds all Flyte components (flyteadmin, flytepropeller, datacatalog, flyteconsole) into a single binary:Step 4: Build with custom component code
To develop against a modified component (e.g. flyteadmin):You can substitute
flyteadmin for any other component: flyteidl, flyteplugins, flytepropeller, datacatalog, or flytestdlib.Step 5: Run a hello world workflow
Tear down
Accessing local services
| Service | URL | Credentials |
|---|---|---|
| Flyte UI | http://localhost:30080/console | None (auth disabled) |
| Minio console | http://localhost:30080/minio/login | minio / miniostorage |
| Postgres | localhost:30001 | postgres / postgres |
| k3s dashboard | http://localhost:30080/kubernetes-dashboard | None |
| Docker registry | localhost:30000 | None |
Submitting a pull request
Fork and branch
Fork the flyteorg/flyte repository and create a feature branch.
Make your changes
Follow the code style for the component you are modifying. For Go components, run linters and tests:For flytekit (Python):
Sign your commits
Flyte requires all commits to be signed (Developer Certificate of Origin). Use
-s when committing:Open a pull request
Push your branch and open a PR against the
master branch. Fill in the PR template with:- What changed and why
- Link to the related issue (every PR should have an associated issue)
- Test plan
Change management principles
- Every PR must be associated with a GitHub issue.
- Large changes should be preceded by a design proposal (RFC).
- Every major change should include documentation updates.
- Owner files (
OWNERS) exist in all repositories and define who reviews what.