wagoodman/dive · error

unsupported platform

Error message

unsupported platform

What it means

This is the Windows build of dive's podman resolver (resolver_unsupported.go, compiled only where the real podman resolver is not built). resolver.Build() is a stub that unconditionally returns 'unsupported platform' — the podman engine integration cannot build images on this platform build.

Source

Thrown at dive/image/podman/resolver_unsupported.go:24

import (
	"context"
	"fmt"

	"github.com/wagoodman/dive/dive/image"
)

type resolver struct{}

func NewResolverFromEngine() *resolver {
	return &resolver{}
}

// Name returns the name of the resolver to display to the user.
func (r *resolver) Name() string {
	return "podman"
}
func (r *resolver) Build(ctx context.Context, args []string) (*image.Image, error) {
	return nil, fmt.Errorf("unsupported platform")
}

func (r *resolver) Fetch(ctx context.Context, id string) (*image.Image, error) {
	return nil, fmt.Errorf("unsupported platform")
}

func (r *resolver) Extract(ctx context.Context, id string, l string, p string) error {
	return fmt.Errorf("unsupported platform")
}

View on GitHub (pinned to d6c691947f)

Solutions

  1. Use the docker source instead on this platform: 'dive --source docker <image>' (docker resolver is supported on Windows against a docker daemon)
  2. Run dive inside WSL2 or a Linux container where the fully-supported podman resolver is compiled in
  3. If embedding dive, detect the platform before selecting the podman resolver and fall back to the docker/archive resolver
  4. Track/upgrade to a dive version that ships native podman support for your platform if one becomes available

Example fix

# before (windows shell)
set DIVE_ENGINE=podman
dive myimg:latest   # Build/Fetch -> unsupported platform

# after
set DIVE_ENGINE=docker
dive myimg:latest
# or run under WSL2 for podman support
Defensive patterns

Strategy: validation

Validate before calling

// Choose a resolver that exists on this platform before calling Build.
import "runtime"

func pickBuildResolver() image.Resolver {
    if runtime.GOOS == "windows" {
        return docker.NewResolverFromEngine() // podman Build unsupported on this build
    }
    return podman.NewResolverFromEngine()
}

Type guard

// Narrow to the podman resolver only on supported platforms.
func podmanResolverSupported() bool { return runtime.GOOS != "windows" }

Try / catch

if _, err := res.Build(ctx, args); err != nil && err.Error() == "unsupported platform" {
    // deterministic stub error: switch to the docker resolver; do not retry
}

Prevention

When it happens

Trigger: Calling podman.NewResolverFromEngine().Build(...) on a platform where dive was compiled without podman support (i.e. the unsupported stub file is in the build). Practically: Windows binaries, or any build lacking the unix build tag used by the real resolver_cli/resolver.

Common situations: Running the stock Windows dive.exe with 'engine: podman' in .dive.yaml or DIVE_ENGINE=podman; library consumers compiling dive's podman package on Windows and calling Build; CI on windows-latest runners selecting the podman source.

Related errors


AI-assisted analysis of wagoodman/dive@d6c691947f (2026-08-15). Data as JSON: /api/errors/a8088010ff5dff56. Report an issue: GitHub.