---
title: MARKLESS_REPEAT_ROWS_FROZEN
description: "This @for renders its rows once and never updates them: a Markless compiler error."
sidebar: { hidden: true }
search: { keywords: ["REPEAT_ROWS_FROZEN","repeat rows frozen","markless error"] }
pagination: false
---

**Error** from the compiler, while it builds your `.tsrx` files.

## What happened

Markless prints the message, the reason, and a suggestion:

```text
MARKLESS_REPEAT_ROWS_FROZEN: @for (const <itemName> of <collectionSource>) takes its rows from `<rootName>`, which is neither a state cell nor a computed, so the repeat resolves to no graph node and its rows are built on the server and never rebuilt in the browser. The row body reads `<readSource>`, a <value> that can change after that render, and those rows would silently keep their first-render values.
A keyed repeat reconciles through the graph node its collection resolves to; a collection that resolves to none renders its rows once, so any reactive read inside a row is frozen at its first-render value with nothing said at build time.
Put the collection on the graph - `const <rootName> = state([...])` or `const <rootName> = computed(() => ...)` inside the component - so the rows rebuild when `<readSource>` changes; or keep the rows static by reading only `<itemName>` inside them.
https://markless.dev/errors/MARKLESS_REPEAT_ROWS_FROZEN
```

Words in angle brackets change from case to case.

## How to fix it

Start with the suggestion in the message above.

This page has no guide yet. [Help write it](/contributing/improve-these-docs).

## Where it comes from

`@markless/compiler` raises this code. Source:

- [packages/compiler/src/passes/semantic-graph/diagnostics.ts](https://github.com/compiled-run/markless/blob/main/packages/compiler/src/passes/semantic-graph/diagnostics.ts)

Read [how to read a Markless error](/tooling/diagnostics), or go back to [all error codes](/errors).
