vectordotdev/vector · error
output didn't exist
Error message
output didn't exist
What it means
`get_output_type` looks up a node's output list and finds the entry matching the requested port, asserting it exists. The panic means an edge references an output port that the source/transform node does not declare — the graph is internally inconsistent.
Solutions
- Check the wiring in your config: every `inputs` reference must match an existing named output of the component.
- Run `vector validate` on the config before loading to catch dangling port references.
- Ensure graph edges are rebuilt after any change to a node's output set.
Example fix
// before [transforms.foo.outputs] # removed 'processed' output but edges still reference it inputs = ["foo.processed"] // after inputs = ["foo"] # reference an output port that exists
Defensive patterns
Strategy: validation
Validate before calling
// Before loading, check every wire target port exists: vector validate --no-environment /etc/vector/vector.yaml
Try / catch
// Callers via typecheck already get Vec<String> errors; keep using:
if let Err(errors) = graph.typecheck() { eprintln!("typecheck failed: {errors:?}"); } Prevention
- Run `vector validate` in CI for every config change.
- When renaming transform outputs, grep configs for the old port name in all `inputs` lists.
- Avoid hand-editing output port names of built-in transforms.
When it happens
Trigger: `typecheck` resolving an edge whose OutputId.port has no matching output on the referenced source node; edges created before outputs were computed or with stale port names.
Common situations: Config wires referencing a named output that was renamed/removed (e.g. after `remap` changes or log/metric port renames); programmatic graph mutation that removes outputs but leaves edges.
Understand the failure class
Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.
Related errors
- errors ignored
- can't be empty
- completing more than 2^16 data files at a time is obviously…
- {}
- config should not have any errors
AI-assisted analysis of vectordotdev/vector@bdb87aeaa4 (2026-09-16).
Data as JSON: /api/errors/8f839512368883e4.
Report an issue: GitHub.
Appendix: source
Thrown at src/config/graph.rs:234
Node::Source { .. } => panic!("no inputs on sources"),
Node::Transform { in_ty, .. } => in_ty,
Node::Sink { ty } => ty,
}
}
/// Return the output type associated with a given `OutputId`.
///
/// # Panics
///
/// Will panic if the given id is not present in the graph or identifies a sink, which can't
/// have inputs.
fn get_output_type(&self, id: &OutputId) -> DataType {
match &self.nodes[&id.component] {
Node::Source { outputs } => outputs
.iter()
.find(|output| output.port == id.port)
.map(|output| output.ty)
.expect("output didn't exist"),
Node::Transform { outputs, .. } => outputs
.iter()
.find(|output| output.port == id.port)
.map(|output| output.ty)
.expect("output didn't exist"),
Node::Sink { .. } => panic!("no outputs on sinks"),
}
}
pub fn typecheck(&self) -> Result<(), Vec<String>> {
let mut errors = Vec::new();
// check that all edges connect components with compatible data types
for edge in &self.edges {
let from_ty = self.get_output_type(&edge.from);
let to_ty = self.get_input_type(&edge.to);
if !from_ty.intersects(to_ty) {View on GitHub (pinned to bdb87aeaa4)