sxyazi/yazi · error
No receiver found. Check if any receivers are running.
Error message
No receiver found. Check if any receivers are running.
What it means
`Shot::ensure_ability` validates the peer table from the DDS handshake before sending. When broadcasting (`receiver == Id::ZERO`) and `peers` is empty, there is no Yazi instance on the other end at all, so it bails with `No receiver found. Check if any receivers are running.`
Source
Thrown at yazi-cli/src/dds/shot.rs:62
Ok(())
}
pub(super) fn ensure_version(version: Option<&str>) -> Result<()> {
if version != Some(yazi_version::version()) {
bail!(
"Incompatible version (Ya {}, Yazi {}). Restart all `ya` and `yazi` processes if you upgraded either.",
yazi_version::version(),
version.unwrap_or("Unknown")
);
}
Ok(())
}
pub(super) fn ensure_ability(peers: &HashMap<Id, Peer>, kind: &str, receiver: Id) -> Result<()> {
match (receiver, peers.get(&receiver).map(|p| p.able(kind))) {
// Send to all receivers
(Id::ZERO, _) if peers.is_empty() => {
bail!("No receiver found. Check if any receivers are running.")
}
(Id::ZERO, _) if peers.values().all(|p| !p.able(kind)) => {
bail!("No receiver has the ability to receive `{kind}` messages.")
}
(Id::ZERO, _) => Ok(()),
// Send to a specific receiver
(_, Some(true)) => Ok(()),
(_, Some(false)) => {
bail!("Receiver `{receiver}` does not have the ability to receive `{kind}` messages.")
}
(_, None) => bail!("Receiver `{receiver}` not found. Check if the receiver is running."),
}
}
}
View on GitHub (pinned to 5f901b886b)
Solutions
- Start a Yazi instance first, then re-run the `ya` command.
- Check that Yazi is still alive (`pgrep yazi`) — restart it if it exited.
- For targeted sends, use `ya pub-to <id>` after confirming the receiver id exists via the peer list (e.g. `ya providers`).
Example fix
// before
$ ya pub "my-plugin" "{}"
Error: No receiver found...
// after
$ yazi & # start a receiver
$ ya pub "my-plugin" "{}" Defensive patterns
Strategy: fallback
Validate before calling
// shell guard before broadcasting
pgrep -x yazi >/dev/null || { echo "start yazi before running ya pub" >&2; exit 1; } Try / catch
match result {
Err(e) if e.to_string().starts_with("No receiver found") => {
eprintln!("no yazi instance running; start one or use `ya pub-to <id>` with a live id");
}
other => other,
} Prevention
- Ensure a yazi instance is running before any `ya pub` broadcast.
- In scripts, gate on `pgrep yazi` or the DDS peer list.
- Prefer `ya pub-to <id>` for targeted sends once you know a receiver exists.
When it happens
Trigger: Running any `ya pub` (broadcast, receiver `Id::ZERO`) while no `yazi` process is connected to the DDS socket; Yazi has exited; `YAZI_PID`-less invocation in an environment where Yazi never started.
Common situations: Running `ya` commands in a terminal before launching Yazi; Yazi crashed or was closed; pointing `ya` at a machine/session where no instance runs.
Related errors
- {}
- Unknown error
- Expected custom payload of kind `{reply_kind}`
- Connection closed before receiving reply
- Incompatible version (Ya {}, Yazi {}). Restart all `ya` and
AI-assisted analysis of sxyazi/yazi@5f901b886b (2026-09-02).
Data as JSON: /api/errors/373310e388aa5b5f.
Report an issue: GitHub.