> ## Documentation Index
> Fetch the complete documentation index at: https://docs.substrate.42.pe/llms.txt
> Use this file to discover all available pages before exploring further.

# substrate serve — Start the Local Read-Only Web Inspector

> substrate serve starts a localhost read-only web inspector on port 7475. The board auto-refreshes as agents write tasks and advance work.

Run `substrate serve` to open the local web inspector for your project. It binds to `127.0.0.1` and prints the URL — nothing is exposed off the machine. The board auto-refreshes as agents write tasks and advance work, giving you a live view without touching anything. `serve` is also the default subcommand: running `substrate` with no arguments is identical to running `substrate serve`.

## Usage

```shell theme={null}
substrate serve
substrate            # same thing — serve is the default subcommand
```

## Port Selection

The preferred port is `7475`. If that port is taken, `serve` scans upward through `7475–7499` for the first free port, so several projects' inspectors can coexist. It prints the port it bound. Exhausting the entire range fails with a clear error.

The bound port is recorded in `.substrate/serve.json`, so `substrate diagnose` can answer "which port is this project on?" without needing `lsof`.

## Single-Owner Lock

`serve` takes a single-owner lock via `.substrate/substrate.pid`, created exclusively so two near-simultaneous starts cannot both win.

* A live PID → the second `serve` refuses.
* A stale PID from a crashed process → reclaimed automatically.

`SIGINT` and `SIGTERM` shut down cleanly: the HTTP server and database client are closed, and both the PID file and `serve.json` are cleared.

## Read-Only

The UI observes and never writes — there is no drag-and-drop and no in-browser editing. See [Web UI](/concepts/web-ui).

<Note>
  `serve` refuses if there is no `.substrate/` in the current directory. Run `substrate init` first.
</Note>
