vectordotdev/vector · error
transform output misconfigured
Error message
transform output misconfigured
What it means
In `expanded_definitions` (src/topology/schema.rs:186), after matching a transform output to the requested port, `.expect("transform output misconfigured")` fires when no output port matches. The comment notes this is a fatal misconfiguration that other parts of the topology builder normally catch earlier; reaching this expect means those earlier validations were bypassed.
Solutions
- Check the sink/consumer input references an output port the transform actually defines; fix the port name or add the named output.
- Run `vector validate` on the config before testing so the topology builder's own misconfiguration error surfaces instead of this panic.
- If using multiple outputs, declare them (e.g. route/remap named outputs) so every referenced port exists.
Example fix
// before (my_transform has no named output "foo")
sinks:
my_sink:
inputs:
- my_transform.foo
// after: use the default output or define the named output
sinks:
my_sink:
inputs:
- my_transform Defensive patterns
Strategy: validation
Validate before calling
// verify every referenced named output port exists on the producing transform
for input in sink.inputs {
if let Some(port) = &input.port {
assert!(transform_defines_output(&config, &input.component, port), "unknown output port {port}");
}
} Prevention
- Run `vector validate` (or `vector test`) before deploying configs that use named output ports.
- Double-check port names when a transform defines multiple outputs.
- Only reference named outputs from transforms that explicitly declare them (e.g. remap/route).
When it happens
Trigger: A sink (or consumer) references a transform's named output port that the transform does not define — e.g. `sink.inputs = [{"my_transform": "remap"}]` where `my_transform` only emits the default port — reached via validate_sink_expectations or test_expanded_definition without a prior topology build check.
Common situations: Typos in named output ports in the config; using `remap` outputs (`route`-style named outputs) on a transform that doesn't produce them; running `vector test`/`vector validate` against hand-edited configs.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- node exists
- source output misconfigured
- source output misconfigured - output for port
- transform must exist
- transform must exist - already found inputs
AI-assisted analysis of vectordotdev/vector@bdb87aeaa4 (2026-09-16).
Data as JSON: /api/errors/cca60335979fce54.
Report an issue: GitHub.
Appendix: source
Thrown at src/topology/schema.rs:186
.expect("already found inputs")
.iter()
.find_map(|output| {
if output.port == input.port {
Some(
input.with_definitions(
output
.schema_definitions(config.schema_enabled())
.values()
.cloned(),
),
)
} else {
None
}
})
// If we find no match, it means the topology is misconfigured. This is a fatal
// error, but other parts of the topology builder deal with this state.
.expect("transform output misconfigured");
if contains_never(&transform_definition) {
return Err(Error::ContainsNever);
}
// Append whatever number of additional pipelines we created to the existing
// pipeline definitions.
definitions.append(&mut transform_definition);
}
}
cache.insert(
(config.schema_enabled(), inputs.to_vec()),
definitions.clone(),
);
Ok(definitions)
}View on GitHub (pinned to bdb87aeaa4)