GoogleContainerTools/skaffold · error

creating renderer: %w

Error message

creating renderer: %w

What it means

Fires in NewForConfig when the renderer component (deploy pipeline renderer such as kubectl/kustomize/helm) cannot be constructed from the run context and options. Wraps the renderer factory error, typically invalid renderer configuration in skaffold.yaml or unsupported renderer/option combinations.

Source

Thrown at pkg/skaffold/runner/new.go:85

	// Always add skaffold-specific labels, except during `skaffold render`
	labeller := label.NewLabeller(runCtx.AddSkaffoldLabels(), runCtx.CustomLabels(), runCtx.GetRunID())
	tester, err := getTester(ctx, runCtx, isLocalImage)
	if err != nil {
		endTrace(instrumentation.TraceEndError(err))
		return nil, fmt.Errorf("creating tester: %w", err)
	}

	var deployer deploy.Deployer

	hydrationDir, err := util.GetHydrationDir(runCtx.Opts, runCtx.WorkingDir, true, isKptRendererOrDeployerUsed(runCtx.Pipelines))
	if err != nil {
		return nil, fmt.Errorf("getting render output path: %w", err)
	}

	renderer, err := GetRenderer(ctx, runCtx, hydrationDir, labeller.Labels(), runCtx.UsingLegacyHelmDeploy())
	if err != nil {
		endTrace(instrumentation.TraceEndError(err))
		return nil, fmt.Errorf("creating renderer: %w", err)
	}

	deployer, err = GetDeployer(ctx, runCtx, labeller, hydrationDir, runCtx.UsingLegacyHelmDeploy())
	if err != nil {
		endTrace(instrumentation.TraceEndError(err))
		return nil, fmt.Errorf("creating deployer: %w", err)
	}
	rOpts := platform.ResolverOpts{
		KubeContext:               runCtx.KubeContext,
		CliPlatformsSelection:     runCtx.Opts.Platforms,
		CheckClusterNodePlatforms: runCtx.CheckClusterNodePlatforms(),
		DisableMultiPlatformBuild: runCtx.DisableMultiPlatformBuild(),
	}

	platforms, err := platform.NewResolver(ctx, runCtx.Pipelines.All(), rOpts)
	if err != nil {
		endTrace(instrumentation.TraceEndError(err))
		return nil, fmt.Errorf("getting target platforms: %w", err)

View on GitHub (pinned to a1189de023)

Solutions

  1. Read the wrapped error: install/upgrade the required binary (kustomize, kpt, or helm) and ensure it's on PATH.
  2. Validate manifest paths/globs in skaffold.yaml point at existing files.
  3. Run `skaffold diagnose` to check renderer configuration.
  4. If a helm renderer, verify `releases` entries (chart path, name, version) are correct.
  5. Pin or upgrade the skaffold config schema (`apiVersion`) to match your installed skaffold.

Example fix

// before (PATH issue)
$ skaffold dev
// creating renderer: getting kustomize version: exec: "kustomize": executable file not found in $PATH
// after
brew install kustomize && skaffold dev
Defensive patterns

Strategy: validation

Validate before calling

for _, bin := range []string{"kubectl", "kustomize", "helm", "kpt"} {
  if _, err := exec.LookPath(bin); err != nil {
    log.Printf("warning: %s not on PATH; renderer may fail", bin)
  }
}

Try / catch

runner, err := runner.NewForConfig(runCtx)
if err != nil {
  if strings.Contains(err.Error(), "creating renderer") {
    return fmt.Errorf("renderer setup failed - check manifests config and required binaries: %w", err)
  }
  return err
}

Prevention

When it happens

Trigger: skaffold.yaml declares `manifests.render` (or legacy deploy kustomize/helm) that fails to initialize: kustomize/helm/kpt binary not found or incompatible, invalid `transformableResourceSelector`, bad helm release config, or unparseable manifest paths.

Common situations: Missing kustomize/kpt/helm binaries on PATH; kustomize version too old for the chosen feature; helm renderer with invalid flags; paths in `manifests:` globs matching nothing after a repo restructure.

Related errors


AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05). Data as JSON: /api/errors/90dca0d31b05782b. Report an issue: GitHub.