Kinetik UI

Dot Board

.md

A departures board of LED dots whose lines light in a left-to-right sweep when their text changes.

v1.0.0Live on web@shopify/react-native-skiareact-native-reanimatedreact-native-worklets
Component preview

Installation

Kinetik CLI
npx kinetik-ui add dot-board

The CLI copies the source and installs native dependencies with npx expo install, so versions match your Expo SDK. With shadcn: npx shadcn@latest add https://kinetik-ui.dev/r/dot-board.json

Install manually

  1. Install dependencies
    npx expo install @shopify/react-native-skia react-native-reanimated react-native-worklets
  2. Copy the source files
    • components/kinetik/dot-board.tsx
    View source files

Usage

import { DotBoard } from '@/components/kinetik/dot-board';

<DotBoard
  title="Next Departure"
  subtitle="Your ride leaves from gate twelve."
  lines={[
    '08:45',
    [{ text: 'KYOTO', color: amber }],
    [{ text: 'NZ', color: amber }, { text: '204' }],
  ]}
/>;

When to use

  • One short, glanceable status: a departure, a score, a queue number, a countdown.
  • A place where a bit of hardware character suits the product.

When not to use

  • Long text. Each line holds about nine characters at this size.
  • Languages outside A to Z: the dot font has no accents or other scripts, and unknown characters stay blank.

Notes

  • A line is a string, or runs with their own colours.
  • Change a line's text and only that line lights up again.
  • columns sets the width of the board; dots shrink to fit, so keep it low on small cards.

Props

DotBoardProps

PropTypeDefaultDescription
titlerequiredstring—
linesrequiredDotBoardLine[]—The lines shown on the board. Letters are upper-cased; unknown characters are blank.
subtitlestring—
columnsnumber—Characters per line. Defaults to the longest line, and at least 9.
staggernumber140Delay in ms between one line starting to light and the next. Defaults to 140.
styleStyleProp<ViewStyle>—

Performance and accessibility

Performance

Budget
One Skia canvas; the dots are prebuilt paths and the sweep only moves a clip on the UI thread. Nothing animates at rest.
Measured

Huawei P20 Lite (ANE-LX1), Android 9, release build · 16 ms median frame, 20 ms p90 · keeps drawing at rest · 129 MB app memory. Frames at rest come from the demo, which changes departure every 4 s. A board with unchanged text draws nothing.

Accessibility

Reduced motion
Dots appear lit at once, with no sweep.
Screen readers
The title, subtitle and every line read as one label ("Next Departure. Your ride leaves from gate twelve. 08:45. KYOTO. NZ204").
Touch target
Not interactive.

Source files

components/kinetik/dot-board.tsx is in the Code tab of the preview above.