2.0 alpha
These docs describe 2.0. Install it with @once-ui-system/core@alpha.
On 1.8.x? Read the 1.x docs
TrademarkTrademarkDocs
Ctrl k
Search docs...
Effects

MatrixFx

Updated: October 13, 2025
View on GitHub
The MatrixFx component creates an animated dot matrix reveal effect using the native Canvas 2D API. It supports instant reveal, progressive reveal on mount, or hover-triggered animations with smooth transitions. Perfect for hero sections, backgrounds, or interactive hover cards. Control the reveal animation speed with the speed prop. Higher values make the reveal faster. Use multiple colors for variety. Supports CSS variables and any valid color format. Customize the size of dots and spacing between them. Control where the reveal animation starts from. Place content inside the reveal effect. Add a subtle animated flicker to create a dynamic, alive feeling. Add dynamic wave effects to create fluid, organic motion. Choose between ripple (circular waves from center) or wave (S-curve flowing diagonally). Tiles are displaced, scale up at the wave front, and fade at the edges. The wave type creates an organic, flowing S-curve that travels diagonally from bottom-left to top-right. The curve rotates and morphs as it moves, straightening at the edges for a natural liquid motion. Use repeat: false for a single wave that plays once. Add delay for a pause before starting or between cycles (useful for sequencing multiple effects). Use trigger="hover" for native hover support. Dots progressively appear on hover and smoothly reverse when you move away. Use trigger="click" to toggle the effect on click. Use trigger="manual" with the active prop to control the effect from parent state. MatrixFx automatically detects low-end devices and the prefers-reduced-motion system setting. When either is detected, the animation renders a single static frame (no flicker, no bulge animation). You can override this with the reducedMotion prop. See useReducedMotion for details.
Prop
Type
Default
speed
Animation multiplier. Not a duration.
number1
colors
Palette for the dots.
string[]["brand-solid-medium"]
size
Dot size, in pixels.
number3
spacing
Gap between dots, in pixels.
number3
revealFrom
Where the reveal starts before spreading out.
centertopbottomleftright
center
trigger
What starts it. "manual" hands control to active.
hoverinstantmountclickmanual
instant
active
Run it, when trigger is "manual".
booleanfalse
flicker
Randomise dot brightness, for a noisier look.
booleanfalse
bulge
A ripple or wave distortion: its type, duration, intensity, delay and whether it repeats.
BulgeConfig
fps
Frame cap. Lower it on a large surface.
number60
reducedMotion
"auto" follows the reader's system setting, which is the right default for anything ambient.
booleanauto
auto
children
React.ReactNode
…and every FlexProps propinherited
Edit this page on GitHub
TrademarkTrademark
Built with curiosity by Lorant One and the Design Engineers Club