Description:
Gridora is a React loading component that generates animated grid loaders with motion variants, per-cell effects, custom shapes, color ramps, and bitmap text.
It currently comes with more than 130 variants, 20 effects, 12 dot shapes, and CSS-driven output for React 1applications.
Features
- 130+ motion and glyph variants.
- 20 per-dot animation effects.
- 12 dot shapes, including circles, stars, rings, and bars.
- Horizontal, vertical, diagonal, radial, angular, random, and cycling color maps.
- Resolution-independent grids from 2 by 2 through 12 by 12 cells.
- CSS-driven animation with client injection or static stylesheet output.
- Accessible status markup with labels and reduced-motion control.
- Bitmap text loaders plus custom cell sequences.
How To Use It
Install the package
Install gridora with the package manager.
# Install the React loader package.
npm install gridora
# pnpm and Bun are supported too.
# pnpm add gridora
# bun add gridoraRender a built-in variant
Import GridLoader and choose a registered variant:
import { GridLoader } from "gridora";
export function BuildStatus() {
return (
<div aria-live="polite">
{/* Orbit is a radial variant from the public registry. */}
<GridLoader variant="orbit" label="Preparing build" />
</div>
);
}Tune the grid, colors, and effect
Configure the loader with a variant, grid size, color ramp, mapping mode, shape, and effect:
import { GridLoader } from "gridora";
export function UploadProgress() {
return (
<GridLoader
variant="ripple"
gridSize={7}
cellSize={6}
gap={2}
speed={1.2}
colors={["#0F766E", "#14B8A6", "#99F6E4"]}
colorMode="radial"
effect="glow"
shape="diamond"
glow={4}
label="Uploading files"
/>
);
}Draw text with GridLoaderText
GridLoaderText maps supported characters to bitmap masks and renders one grid loader per glyph:
import { GridLoaderText } from "gridora";
export function SyncMessage() {
return (
<GridLoaderText
text="SYNC"
effect="pulse"
color="#F8FAFC"
letterGap={7}
label="Synchronizing data"
/>
);
}Create a custom cell sequence
Pass ordered cell indices to replace a built-in phase pattern. The index uses row * gridSize + col:
import { GridLoader } from "gridora";
export function RouteSignal() {
return (
<GridLoader
gridSize={5}
sequence={[0, 1, 2, 7, 12, 17, 22]}
effect="bounce"
inactive="hidden"
colors={["#F97316", "#FACC15"]}
colorMode="cycle"
label="Routing request"
/>
);
}Use a static stylesheet
Import the package stylesheet when the app needs stylesheet output that loads before client hydration or fits a strict CSP policy:
// Place this import in the app's global CSS entry or root layout.
import "gridora/styles.css";
import { GridLoader } from "gridora";
export function StaticStylesLoader() {
return <GridLoader variant="compile" label="Compiling source" />;
}All Component Props
| Prop | Type | Default | Description |
|---|---|---|---|
variant | GridLoaderVariant | tokenStream | Built-in motion or glyph pattern. |
gridSize | number | 3 | Number of rows and columns, clamped to 2 through 12. |
cellSize | number | 4 | Cell size in pixels. |
size | number | undefined | Alias for cellSize, kept for backwards compatibility. |
dotSize | number | cellSize * 0.875 | Dot size in pixels. |
gap | number | 2.5 | Space between cells in pixels. |
speed | number | 1 | Duration of one cycle in seconds. |
color | string | currentColor | Base color or first color stop. |
colors | readonly string[] | undefined | Color ramp sampled according to colorMode. |
colorMode | GridLoaderColorMode | solid | Maps colors across the grid. |
effect | GridLoaderEffect | pulse | Keyframe animation applied to active dots. |
shape | GridLoaderShape | circle | Dot silhouette. |
easing | string | ease | CSS timing function. |
minOpacity | number | 0.2 | Resting opacity for the cycle. |
maxOpacity | number | 1 | Peak opacity for the cycle. |
minScale | number | 1 | Resting scale for the cycle. |
maxScale | number | 1 | Peak scale for the cycle. |
glow | number | 0 | Blur radius of the dot glow in pixels. |
spread | number | 1 | Portion of the cycle used by the stagger. |
offset | number | 0 | Extra phase offset in cycles. |
reverse | boolean | false | Plays the stagger backwards. |
direction | React.CSSProperties["animationDirection"] | normal | CSS animation direction. |
paused | boolean | false | Freezes the animation. |
inactive | "dim" | "hidden" | "solid" | dim | Rendering for cells outside the active shape. |
inactiveOpacity | number | 0.08 | Opacity for inactive cells in dim mode. |
inactiveColor | string | undefined | Color for inactive cells. |
mask | GridMask | string | null | null | Custom bitmap shape that overrides the variant shape. |
sequence | readonly number[] | undefined | Ordered cell indices that override variant and mask. |
maskMotion | MaskMotion | write | Drawing order for glyph and custom-mask variants. |
label | string | Loading | Status label announced to screen readers. |
respectReducedMotion | boolean | false | Disables the animation when the user requests reduced motion. |
GridLoaderText props
| Prop | Type | Default | Description |
|---|---|---|---|
text | string | required | Characters drawn through the bitmap font. |
letterGap | number | 6 | Space between glyphs in pixels. |
letterSpan | number | 1 / drawableCharacterCount | Portion of the cycle used by each glyph. |
simultaneous | boolean | false | Animates every glyph at the same time. |
Helpers and Low-Level Exports
Use the public registries when a settings panel, loader picker, or custom editor needs the package’s available values:
import {
GRID_LOADER_EFFECTS,
GRID_LOADER_SHAPES,
GRID_LOADER_VARIANT_NAMES,
sequenceToPhases,
} from "gridora";
// Build select menus from the exported registry values.
const effectOptions = GRID_LOADER_EFFECTS;
const shapeOptions = GRID_LOADER_SHAPES;
const variantOptions = GRID_LOADER_VARIANT_NAMES;
// Convert ordered cell indices into per-cell animation phases.
const phases = sequenceToPhases([0, 1, 5, 9], 3);Alternatives and Related Resources
FAQs
Q: Does Gridora need a CSS import?
A: The component injects keyframes on the client. Import gridora/styles.css when the application needs static stylesheet output for server rendering or a strict CSP policy.
Q: Which React versions does the package support?
A: The package declares React >=18 as a peer dependency. react-dom is optional.
Q: How do I make a loader from an exact cell order?
A: Pass a sequence array of flat cell indices. Each index uses row * gridSize + col, and the sequence takes precedence over variant and mask.
Q: How do I create a text loader?
A: Import GridLoaderText, pass a string through text, and set the shared styling props such as effect, color, and cellSize. Unsupported characters render as gaps.
Q: Does reduced motion work by default?
A: The respectReducedMotion default is false. Set it to true when the loader should honor the user’s reduced-motion preference.





