# X_LIVE_ROUTE_NO_ISLAND

## Means

a route reads live rows and boots nothing that could receive them

## Typical cause

a browser-only read (`useQuery`, `useConnection`, `useMutation`, `useMutationQueue`, `useRecord`, `useChannel`, or `hasPageSocket`) sits in a module of the route's server graph that no island imports, or on a route declaring `hydrate: 'never'`. It only ever runs on the server, where it answers its server state (nothing, or loading) forever, at 200. **`hasPageSocket()` is no exemption** since 21.0.0: it answers `false` on the server every time, which is how the reference app's update banner never showed. Reported by the `budgets` step

## Fix

move it into an island: `x g island <route-dir> --at <route-dir>`, import the module from that island's `mount()`, and declare it with `island({ src })` in the route file, with a `hydrate` other than `'never'`

[Routes, render and budgets](/error-codes#routes-render-and-budgets)
