# Development cycle

> **📝 Note**
>
> An LLM-optimized bundle of this entire section is available at [`section.md`](https://www.union.ai/docs/v1/union/user-guide/development-cycle/section.md).
> This single file contains all pages in this section, optimized for AI coding agent context.

This section covers developing production-ready workflows for Union.ai.

## Subpages

- [Authentication](https://www.union.ai/docs/v1/union/user-guide/development-cycle/authentication/page.md)
  - Authentication Methods
  - 1. PKCE (Proof Key of Code Exchange)
  - 2. DeviceFlow (Best for Remote Machines)
  - 3. ClientSecret (Best for CI/CD and Automation)
  - Managing Authentication Configuration
  - Troubleshooting Authentication Issues
- [Project structure](https://www.union.ai/docs/v1/union/user-guide/development-cycle/project-structure/page.md)
  - Recommended Directory Structure
  - Organizing Tasks and Workflows
  - Orchestration Directory for Helper Constructs
  - Core Logic for Workflow-Specific Functionality
  - Importance of `__init__.py`
  - Monorepo vs Multi-repo: Choosing a structure
  - CI/CD
  - Documentation and Docstrings
- [Projects and domains](https://www.union.ai/docs/v1/union/user-guide/development-cycle/projects-and-domains/page.md)
  - Projects
  - Domains
  - When to use different Union.ai projects?
  - Projects and Domains: The Power of the Project-Domain Pair
  - Domains: Clear Environment Separation
  - Projects: Organizing Workflows by Teams, Business Areas, or Applications
- [Building workflows](https://www.union.ai/docs/v1/union/user-guide/development-cycle/building-workflows/page.md)
  - When should I decompose tasks?
  - Differing runtime requirements
  - Improved cache performance
  - Take advantage of interruptible tasks
  - When should I parallelize tasks?
  - Parallelization constructs
  - When should I use caching?
- [Setting up a production project](https://www.union.ai/docs/v1/union/user-guide/development-cycle/setting-up-a-project/page.md)
  - Terminology
  - Create a Union.ai project
  - Creating a local production project directory using `union init`
  - Directory structure
- [Local dependencies](https://www.union.ai/docs/v1/union/user-guide/development-cycle/local-dependencies/page.md)
  - Define your dependencies in your `pyproject.toml`
  - Create a Python virtual environment
- [ImageSpec](https://www.union.ai/docs/v1/union/user-guide/development-cycle/image-spec/page.md)
  - Union.ai cloud image builder {#cloud-image-builder}
  - Local image builder
  - Local container engine
  - Access to a container registry
  - Make your image accessible to Union.ai
- [Running your code](https://www.union.ai/docs/v1/union/user-guide/development-cycle/running-your-code/page.md)
  - Set up your development environment
  - CLI commands for running your code
  - Running a script in local Python with `union run` {#running-a-script-in-local-python}
  - Running a script on Union.ai with `union run --remote`
  - Running tasks through uctl
  - Generate execution spec file
  - Update the input spec file for arguments to the workflow
  - Create execution using the exec spec file
  - Monitor the execution by providing the execution id from create command
  - Running workflows through uctl
  - Running launchplans through uctl
  - Generate an execution spec file
  - Update the input spec file for arguments to the workflow
  - Create execution using the exec spec file
  - Monitor the execution by providing the execution id from create command
  - Deploying your code to Union.ai with `union register`
  - Fast registration
  - Inspecting executions
  - Deploying your code to production
  - Package your code with `union package`
  - Register the package with `uctl register`
  - Using union register versus union package + uctl register
  - Image management and registration method
  - Building your own images
  - CI/CD with Flyte and GitHub Actions
  - Some CI/CD best practices
- [Overriding parameters](https://www.union.ai/docs/v1/union/user-guide/development-cycle/overriding-parameters/page.md)
  - Task parameters
  - Using `with_overrides` with `name` and `node_name`
  - Subworkflow and sub-launch plan parameters
- [Run details](https://www.union.ai/docs/v1/union/user-guide/development-cycle/run-details/page.md)
  - Passing parameters
  - Why `union run` rather than `python`?
- [Debugging with interactive tasks](https://www.union.ai/docs/v1/union/user-guide/development-cycle/debugging-with-interactive-tasks/page.md)
  - Enabling interactive tasks in your code
  - Basic example
  - requirements.txt
  - example.py
  - Register and run the workflow
  - Access the IDE
  - Inspect the task code
  - Interactive debugging
  - Update your code
  - Resume task
  - Auxiliary Python files
  - flyteinteractive_interactive_entrypoint.py
  - flyteinteractive_resume_task.py
  - launch.json
  - Integrated terminal
  - Install extensions
  - example-extensions.py
  - Manage resources
  - example-manage-resources.py
  - Pre and post hooks
  - example-pre-post-hooks.py
  - Only initiate VSCode on task failure
  - example-run-task-first.py
  - Debugging execution issues
- [Managing secrets](https://www.union.ai/docs/v1/union/user-guide/development-cycle/managing-secrets/page.md)
  - Creating secrets
  - Creating a secret on the command line
  - Creating a secret from a file
  - Scoping secrets
  - Listing secrets
  - Using secrets in workflow code
  - Using a secret created on the command line
  - Using a secret created from a file
  - Updating secrets
  - Deleting secrets
- [Managing API keys](https://www.union.ai/docs/v1/union/user-guide/development-cycle/managing-api-keys/page.md)
  - Creating an API key
  - Listing and deleting applications
- [Accessing AWS S3 buckets](https://www.union.ai/docs/v1/union/user-guide/development-cycle/accessing-aws-s3/page.md)
  - Creating secrets on Union.ai
  - Using secrets in a task
  - Conclusion
- [Task resource validation](https://www.union.ai/docs/v1/union/user-guide/development-cycle/task-resource-validation/page.md)
- [Running in a local cluster](https://www.union.ai/docs/v1/union/user-guide/development-cycle/running-in-a-local-cluster/page.md)
  - Running in a local Kubernetes cluster
  - Configuration
  - Start the workflow
  - Inspect the results
  - Local cluster with default image
  - Local cluster with custom image
- [CI/CD deployment](https://www.union.ai/docs/v1/union/user-guide/development-cycle/ci-cd-deployment/page.md)
  - Create a Union.ai API key
  - Store the secret in your CI/CD secrets store
  - Configure your CI/CD workflow file
- [Jupyter notebooks](https://www.union.ai/docs/v1/union/user-guide/development-cycle/jupyter-notebooks/page.md)
  - Write your workflows and tasks in cells
  - Enable the notebook to register workflows to Union.ai
- [Decks](https://www.union.ai/docs/v1/union/user-guide/development-cycle/decks/page.md)
  - Deck tabs
  - Deck renderers
  - Frame profiling renderer
  - Top-frame renderer
  - Markdown renderer
  - Box renderer
  - Image renderer
  - Custom renderers
  - Streaming Decks
  - Union Deck Succeed Video
  - Union Deck Fail Video
- [Remote management](https://www.union.ai/docs/v1/union/user-guide/development-cycle/remote-management/page.md)
  - Creating a `UnionRemote` object
  - Authenticating using a client secret
- [Streaming execution events](https://www.union.ai/docs/v1/union/user-guide/development-cycle/streaming-execution-events/page.md)
  - Overview
  - Interface: `stream_execution_events`
  - Event contents
  - Phases
  - How this differs from LaunchPlan notifications
  - Example: Node-level alerts (Slack)
  - What the example does
  - Summary

---
**Source**: https://github.com/unionai/unionai-docs/blob/main/content/user-guide/development-cycle/_index.md
**HTML**: https://www.union.ai/docs/v1/union/user-guide/development-cycle/
