---
title: "wendy cloud device foxglove serve"
description: "Deploy foxglove_bridge to the device and open a tunnel for Foxglove Studio"
---

## Syntax

```sh
wendy cloud device foxglove serve [flags]
```

## Examples

```sh
wendy cloud device foxglove serve --help
```

## Arguments

No positional arguments are declared in the command synopsis.

## Flags

Flags below include inherited options. Types and defaults come from the CLI source. An empty default means no value is configured.

| Flag | Type | Default | Description |
| --- | --- | --- | --- |
| `--app` | string | (empty) | appId of a Wendy-deployed ROS 2 app to bridge; derives its ROS_DOMAIN_ID |
| `--broker-url` | string | (empty) | Tunnel broker host:port (default: cloud :443 endpoint, otherwise &lt;cloud-host&gt;:50052) |
| `--cloud-grpc` | string | (empty) | Cloud gRPC endpoint (optional when a default session is set via 'wendy auth use') |
| `--device` | string | (empty) | Target device hostname; `wendy run` accepts a comma-separated list to deploy one build to several devices (needs a remote build host and --detach). Defaults to $WENDY_DEVICE, then the saved default device |
| `--distro` | string | `humble` | ROS 2 distro to build foxglove_bridge from |
| `--domain` | int | `0` | ROS_DOMAIN_ID the device's ROS 2 uses |
| `--interface` | string | (empty) | CycloneDDS network interface to use (for multi-interface devices) |
| `--json` | bool | `false` | Output in JSON format |
| `--port` | int | `8765` | Local port to forward foxglove_bridge to |
| `--rmw` | string | `rmw_cyclonedds_cpp` | RMW implementation the device's ROS 2 uses |

## Output

Output depends on the operation and selected target. Use the command help for additional guidance..

## JSON output

The global `--json` option requests machine-readable output. The CLI also selects JSON mode when no interactive terminal is attached. Support and payloads are command-specific; this flag does not guarantee a single JSON document for commands that stream logs or invoke build tools. Consult Details before parsing command output.

## Exit codes

The CLI entry point returns `0` on success and for its user-cancelled or default-cleared results. Other returned errors exit with `1` and print a diagnostic to stderr. Some operations may terminate through subprocess or signal handling; do not infer application health from the CLI exit code alone.

## Common errors

Check argument values and flag combinations against the synopsis above. For discovery, build, port, and readiness failures, see [deployment troubleshooting](../../../../../../errors/). Command-specific constraints are in Details.

## See also

- [wendy cloud device foxglove](../../../../../../reference/cli/cloud/device/foxglove/)
- [CLI conventions and configuration](../../../../../../reference/)

## Details

Generates a foxglove_bridge app, deploys it to the target device with
'wendy run' (host networking, so it joins the device's ROS 2 graph — including a
robot's native host ROS 2), then forwards its WebSocket port to your machine.

Connect Foxglove Studio to the printed ws:// URL. For a robot whose ROS 2 uses a
non-default domain or RMW (e.g. a Unitree Go2 on CycloneDDS), pass --domain and
--rmw so the bridge matches it. The bridge exposes every topic, including hidden
ROS topics, in the selected domain. Its device-side WebSocket listens only on
loopback and is accessed through the authenticated Wendy Cloud tunnel.

Domain selection matters: a robot's native ROS 2 is usually on domain 0, but a
Wendy-deployed ROS 2 app with no explicit "domainId" gets a stable domain derived
from its appId — essentially never 0. To bridge one of those, pass --app &lt;appId&gt;
and the matching domain is computed for you. With neither flag the bridge sits on
domain 0 and will show an empty graph if that is not where your nodes are.

Use the command help for additional guidance.
