# googlecontainertools/skaffold architecture

> Architecture diagram of the GitHub repository googlecontainertools/skaffold, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/googlecontainertools/skaffold
- Repository: https://github.com/googlecontainertools/skaffold

## Overview

Skaffold is a client-side Kubernetes development and deployment CLI. Its principal workflow loads project configuration, watches source changes, builds and tags images, pushes them when needed, renders manifests, and deploys to a cluster; dev mode adds logs and port forwarding for feedback. The map also captures documented init, render, verification, and diagnostic capabilities. README documents the workflow, while sampled implementation excerpts are limited, so some subsystem connections are shown only where the workflow is explicit.

Main entry points: [`pkg/skaffold/runner/runner.go`](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/runner/runner.go) (Workflow runner), [`cmd/skaffold/app/cmd/commands.go`](https://github.com/googlecontainertools/skaffold/blob/main/cmd/skaffold/app/cmd/commands.go) (Skaffold CLI), [`pkg/skaffold/loader/loader.go`](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/loader/loader.go) (Config loader), [`pkg/skaffold/parser/config.go`](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/parser/config.go) (Config parser)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["CLI and configuration"]
  node_cli["Skaffold CLI<br/>[commands.go]"]
  node_loader["Config loader<br/>[loader.go]"]
  node_parser["Config parser<br/>[config.go]"]
  node_config["Config schemas<br/>[config.go]"]
end

subgraph group_workflow["Development workflow"]
  node_runner["Workflow runner<br/>[runner.go]"]
  node_watcher["Source watcher<br/>[monitor.go]"]
  node_build["Image building<br/>[build.go]"]
  node_tag["Image tagging<br/>[tag.go]"]
  node_render["Manifest rendering<br/>[render.go]"]
  node_renderer["Render backends<br/>[render_mux.go]"]
end

subgraph group_runtime["Cluster runtime"]
  node_deploy["Deployment<br/>[deploy.go]"]
  node_deploymux["Deploy backends<br/>[deploy_mux.go]"]
  node_status["Resource status<br/>[status_check.go]"]
  node_logs["Log streaming<br/>[stream.go]"]
  node_ports["Port forwarding"]
  node_debug["Debug transforms<br/>[debug.go]"]
end

subgraph group_extras["Project tools"]
  node_init["Project initializer<br/>[init.go]"]
  node_verify["Verification<br/>[verify.go]"]
  node_diagnose["Diagnostics<br/>[diagnose.go]"]
  node_lint["Configuration lint<br/>[lint.go]"]
  node_inspect["Config inspection<br/>[helper.go]"]
end

node_developer(("Developer"))
node_registry[("Image registry")]
node_cluster[("Kubernetes cluster")]

node_developer -->|"runs commands"| node_cli
node_cli -->|"loads config"| node_loader
node_loader -->|"parses files"| node_parser
node_parser -->|"validates against"| node_config
node_cli -->|"starts workflow"| node_runner
node_runner -->|"watches source"| node_watcher
node_runner -->|"builds images"| node_build
node_runner -->|"tags images"| node_tag
node_runner -->|"pushes images"| node_registry
node_runner -->|"renders manifests"| node_render
node_render -->|"selects backend"| node_renderer
node_runner -->|"deploys resources"| node_deploy
node_deploy -->|"selects backend"| node_deploymux
node_deploymux -->|"applies resources"| node_cluster
node_runner -->|"checks resources"| node_status
node_runner -->|"streams logs"| node_logs
node_runner -->|"starts forwarding"| node_ports
node_runner -->|"configures debugging"| node_debug
node_cli -->|"initializes project"| node_init
node_cli -->|"runs verification"| node_verify
node_cli -->|"runs diagnostics"| node_diagnose
node_cli -->|"lints configuration"| node_lint
node_cli -->|"inspects configuration"| node_inspect

click node_cli "https://github.com/googlecontainertools/skaffold/blob/main/cmd/skaffold/app/cmd/commands.go"
click node_loader "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/loader/loader.go"
click node_parser "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/parser/config.go"
click node_config "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/schema/latest/config.go"
click node_runner "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/runner/runner.go"
click node_watcher "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/filemon/monitor.go"
click node_build "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/runner/build.go"
click node_tag "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/tag/tag.go"
click node_render "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/runner/render.go"
click node_renderer "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/render/renderer/render_mux.go"
click node_deploy "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/runner/deploy.go"
click node_deploymux "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/deploy/deploy_mux.go"
click node_status "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/kubernetes/status/status_check.go"
click node_logs "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/log/stream/stream.go"
click node_ports "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/kubernetes/portforward/forwarder_manager.go"
click node_debug "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/debug/debug.go"
click node_init "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/initializer/init.go"
click node_verify "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/runner/verify.go"
click node_diagnose "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/diagnose/diagnose.go"
click node_lint "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/lint/lint.go"
click node_inspect "https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/inspect/helper.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_loader,node_parser,node_config toneBlue
class node_runner,node_watcher,node_build,node_tag,node_render,node_renderer,node_registry,node_cluster toneAmber
class node_deploy,node_deploymux,node_status,node_logs,node_ports,node_debug toneMint
class node_init,node_verify,node_diagnose,node_lint,node_inspect toneRose
class node_developer toneIndigo
```

## Components

### CLI and configuration

- [Skaffold CLI](https://github.com/googlecontainertools/skaffold/blob/main/cmd/skaffold/app/cmd/commands.go): `cmd/skaffold/app/cmd/commands.go`
- [Config loader](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/loader/loader.go): `pkg/skaffold/loader/loader.go`
- [Config parser](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/parser/config.go): `pkg/skaffold/parser/config.go`
- [Config schemas](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/schema/latest/config.go): `pkg/skaffold/schema/latest/config.go`

### Development workflow

- [Workflow runner](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/runner/runner.go): `pkg/skaffold/runner/runner.go`
- [Source watcher](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/filemon/monitor.go): `pkg/skaffold/filemon/monitor.go`
- [Image building](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/runner/build.go): `pkg/skaffold/runner/build.go`
- [Image tagging](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/tag/tag.go): `pkg/skaffold/tag/tag.go`
- [Manifest rendering](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/runner/render.go): `pkg/skaffold/runner/render.go`
- [Render backends](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/render/renderer/render_mux.go): `pkg/skaffold/render/renderer/render_mux.go`

### Cluster runtime

- [Deployment](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/runner/deploy.go): `pkg/skaffold/runner/deploy.go`
- [Deploy backends](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/deploy/deploy_mux.go): `pkg/skaffold/deploy/deploy_mux.go`
- [Resource status](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/kubernetes/status/status_check.go): `pkg/skaffold/kubernetes/status/status_check.go`
- [Log streaming](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/log/stream/stream.go): `pkg/skaffold/log/stream/stream.go`
- [Port forwarding](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/kubernetes/portforward/forwarder_manager.go): `pkg/skaffold/kubernetes/portforward/forwarder_manager.go`
- [Debug transforms](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/debug/debug.go): `pkg/skaffold/debug/debug.go`

### Project tools

- [Project initializer](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/initializer/init.go): `pkg/skaffold/initializer/init.go`
- [Verification](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/runner/verify.go): `pkg/skaffold/runner/verify.go`
- [Diagnostics](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/diagnose/diagnose.go): `pkg/skaffold/diagnose/diagnose.go`
- [Configuration lint](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/lint/lint.go): `pkg/skaffold/lint/lint.go`
- [Config inspection](https://github.com/googlecontainertools/skaffold/blob/main/pkg/skaffold/inspect/helper.go): `pkg/skaffold/inspect/helper.go`

### Other components

- **Developer**
- **Image registry**
- **Kubernetes cluster**

## Connections

- Developer → Skaffold CLI: runs commands
- Skaffold CLI → Config loader: loads config
- Config loader → Config parser: parses files
- Config parser → Config schemas: validates against
- Skaffold CLI → Workflow runner: starts workflow
- Workflow runner → Source watcher: watches source
- Workflow runner → Image building: builds images
- Workflow runner → Image tagging: tags images
- Workflow runner → Image registry: pushes images
- Workflow runner → Manifest rendering: renders manifests
- Manifest rendering → Render backends: selects backend
- Workflow runner → Deployment: deploys resources
- Deployment → Deploy backends: selects backend
- Deploy backends → Kubernetes cluster: applies resources
- Workflow runner → Resource status: checks resources
- Workflow runner → Log streaming: streams logs
- Workflow runner → Port forwarding: starts forwarding
- Workflow runner → Debug transforms: configures debugging
- Skaffold CLI → Project initializer: initializes project
- Skaffold CLI → Verification: runs verification
- Skaffold CLI → Diagnostics: runs diagnostics
- Skaffold CLI → Configuration lint: lints configuration
- Skaffold CLI → Config inspection: inspects configuration
