TypewriterText
v1.0.1Updated 21 Jul 2026Types text out character-by-character with an optional blinking cursor, either as a single static string or as a rotating list that types, pauses, deletes and moves to the next phrase. Wraps the MagicUI TypingAnimation primitive with build69 prop names (speed/deleteSpeed/pauseMs). Under prefers-reduced-motion it renders the first string statically instead of looping forever.
Preview
Live · 7 stories▸Why this is recommendedanimationtexttypewritertyping+7
Every TypewriterText variant lined up for comparison.
- ✓Rotating value propositions in a hero headline ("Build69 is a workspace for… Thai SMBs / invoice teams")
- ✓Making an AI assistant reply feel like it is being streamed live
- ✓Onboarding callouts that type out a personalised greeting
- ✓Landing page subheads that cycle through customer segments
- Rotating phrase list via `strings` — types, pauses, deletes, repeats
- Single static string via `text` with `loop={false}` for a one-shot type-out
- Blinking cursor toggled with `cursor`
- Independent type and delete speeds plus a pause between phrases
- Respects prefers-reduced-motion by rendering the first string statically (WCAG 2.3.3)
- ✕Body copy or long paragraphs
- ✕Text that re-renders frequently from state
- ✕Content that must be immediately readable by scanners or on first paint
Install
Ask your agent, or call the MCP tool directly. The resolved bundle is written into your project.
Usage
Tick variants in the left menu — each adds a tab with that variant’s real story source, the same code the preview above renders.
Props
textSingle static string to type out. Ignored when `strings` is provided.
—stringsRotating list of phrases; each is typed, held, then deleted.
—cursorShow the blinking cursor (default: true).
—speedPer-character typing speed in ms (default: 55).
—deleteSpeedPer-character delete speed in ms (default: 30).
—pauseMsHold time in ms once a phrase is fully typed (default: 1400).
—loopLoop the cycle. Defaults to true when `strings` has more than one entry.
—classNameClasses merged onto the rendered span.
—