---
title: Reveal and timing
description: Control character versus word reveal, cadence, entrance duration, and reduced-motion policy.
---

Block-level strategy (when a table row, code line, or list item becomes eligible) is internal. What you configure is how **flowing text** enters, how long those entrances last, and how `prefers-reduced-motion` is handled.

## Character or word

`reveal` defaults to `"character"`. Ordinary prose, headings, and list item text then enter by Unicode grapheme, so emoji and combined characters stay intact. Smoothstream waits for a complete word of geometry before starting that word, which keeps partial words from wrapping, then jumping to the next line.

Set `reveal="word"` to admit each complete word as one unit. The overall cadence still follows `interval`; words are grouped, not sped up.

```tsx
<Smoothstream reveal="word" receiving={receiving}>
  {text}
</Smoothstream>
```

Fenced code still commits **lines** while input is open, then reveals each admitted line using the same character or word setting.

## Cadence and duration

| Option | Default | Role |
| --- | --- | --- |
| `interval` | `3` | Base delay in milliseconds between presentation units. |
| `duration` | `1000` | Milliseconds spent on each text entrance. Also used for table-row fades, image entrances, and related motion. |

```tsx
<Smoothstream interval={3} duration={1000} receiving={receiving}>
  {text}
</Smoothstream>
```

In React, changing `interval`, `duration`, `mode`, or `reveal` remounts playback. In Vue, those changes rebuild the session. In the DOM adapter they are constructor-only. Set them once per response.

## Reduced motion

`reducedMotion` is an accessibility policy. It is not a synonym for `mode="static"`.

| Value | Behavior |
| --- | --- |
| `"system"` (default) | Follow `prefers-reduced-motion`. |
| `"always"` | Always use Smoothstream's reduced-motion path. |
| `"never"` | Ignore the system preference and allow animation. |

When motion is reduced, Markdown stabilization still runs, but currently safe content renders immediately as semantic HTML: no character pacing, reveal spans, fades, or layout transitions. Unresolved images stay real, accessibly hidden `<img>` elements and do not delay later blocks.

Once a mounted response enters reduced mode, it stays reduced so visible text cannot replay if the preference changes. A new instance picks up the policy in effect at mount.

Interactive feedback such as the code copy control can still move under `mode="static"` when the reduced-motion policy allows it. Use static mode for **completed content**, and reduced motion for **motion preference**.

<Callout type="info" title="SSR and the system policy">
  With `reducedMotion="system"` in streaming mode, React and Vue render an empty pending shell until the browser can read the media query. See [React](/adapters/react) and [Vue](/adapters/vue).
</Callout>
