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

  1. Start a Yazi instance first, then re-run the `ya` command.
  2. Check that Yazi is still alive (`pgrep yazi`) — restart it if it exited.
  3. 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

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


AI-assisted analysis of sxyazi/yazi@5f901b886b (2026-09-02). Data as JSON: /api/errors/373310e388aa5b5f. Report an issue: GitHub.