apache/beam · error
No proto encoding for PaneInfoCoder, always part of Windowed
Error message
No proto encoding for PaneInfoCoder, always part of WindowedValue codec
What it means
_maybe_use_transform_service raises ValueError when Beam is asked to launch a local expansion/transform service but neither a `java` nor a `docker` executable can be found on the system (after checking JAVA_HOME and PATH). Beam has no way to start the required JVM-based service, so pipeline expansion cannot proceed locally.
Source
Thrown at sdks/typescript/src/apache_beam/coders/required_coders.ts:642
switch (encodingNibble) {
case PaneInfoEncoding.NO_INDEX:
// the header byte contains all the info
return;
case PaneInfoEncoding.ONE_INDEX:
writer.int32(value.index);
return;
case PaneInfoEncoding.TWO_INDICES:
writer.int32(value.index);
writer.int32(value.onTimeIndex);
return;
default:
throw new Error("Unknown PaneInfo encoding: " + encodingNibble);
}
}
toProto(pipelineContext: ProtoContext): runnerApi.Coder {
throw new Error(
"No proto encoding for PaneInfoCoder, always part of WindowedValue codec",
);
}
}
requireForSerialization(`${packageName}/coders/required_coders`, exports);
View on GitHub (pinned to 12126d8942)
Solutions
- Install a JDK/JRE and ensure `java` is on PATH (or set JAVA_HOME).
- Install Docker and ensure `docker` is on PATH so Beam can use a containerized expansion service.
- Point expansion_service at an already-running remote expansion service so no local Java/Docker is needed.
Example fix
// before # pipeline needs expansion service, host has no java/docker // after # sudo apt-get install -y default-jre (or) use ExternalTransform(..., expansion_service='host:port')
Defensive patterns
Strategy: fallback
Validate before calling
import shutil, os
java = shutil.which('java') or (os.path.join(os.environ.get('JAVA_HOME',''), 'bin/java') if os.path.exists(os.path.join(os.environ.get('JAVA_HOME',''), 'bin/java')) else None)
docker = shutil.which('docker')
assert java or docker, 'install Java or Docker before running local expansion' Type guard
def can_launch_expansion_service() -> bool:
import shutil, os
return bool(shutil.which('java') or shutil.which('docker') or (os.environ.get('JAVA_HOME') and os.path.exists(os.path.join(os.environ['JAVA_HOME'], 'bin/java')))) Try / catch
try:
p | ManagedRead(source='kafka')
except ValueError as e:
if 'neither Java nor Docker' in str(e):
rerun_with_remote_expansion_service() Prevention
- Verify `java -version` or `docker --version` works in your runtime image
- In CI, install a JRE in the base image or run a standalone expansion service
- Set JAVA_HOME correctly on Windows/macOS
- Use a remote expansion_service for environments without JVM tooling
When it happens
Trigger: Running a pipeline with external/managed transforms that requires a local expansion service (no expansion_service address given) on a machine without Java or Docker installed or not on PATH.
Common situations: Minimal Docker/CI images without a JRE; Windows/macOS dev machines where Java is installed but not on PATH; using slim apache-beam install on a system without docker.
Understand the failure class
Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.
Related errors
- Timing number 0b" + timingNumber.toString(2) + " has more th
- Java is not correctly installed in JAVA_HOME=%s to use this
- Java must be installed on this system to use this transform/
- Could not find coder for URN " + urn
- Unknown PaneInfo encoding: " + encodingNibble
AI-assisted analysis of apache/beam@12126d8942 (2026-09-13).
Data as JSON: /api/errors/fe38aefb03b2ba46.
Report an issue: GitHub.