Glin UI
Signature / Molecule

Meteor Shower

Falling diagonal streaks with staggered delays for hero backgrounds.

Changelog

Everything we shipped this quarter

Forty two improvements across builds, caching and observability, with migration notes where behavior changed.

Works with

  • Vercel
  • GitHub
  • Cloudflare
  • Astro

Installation$

Install from
pnpm dlx @glinui/cli@latest add meteor-shower

Prefer the package?

Usage$

Place inside a relative container. Meteors fall diagonally with staggered delays and randomized positions.

Examples$

Variants$

Default
Steep
Heavy
import { MeteorShower } from "@glinui/ui"
export function Variants() {
return (
<div data-glin-theme="dark" className="grid w-full gap-3 sm:grid-cols-3">
<div className="relative isolate flex h-44 items-end overflow-hidden rounded-xl bg-[var(--surface-0)] p-3">
<MeteorShower count={10} />
<span className="relative z-10 rounded-full bg-black/70 px-2.5 py-1 text-xs font-medium text-white">Default</span>
</div>
<div className="relative isolate flex h-44 items-end overflow-hidden rounded-xl bg-[var(--surface-0)] p-3">
<MeteorShower count={10} angle={235} />
<span className="relative z-10 rounded-full bg-black/70 px-2.5 py-1 text-xs font-medium text-white">Steep</span>
</div>
<div className="relative isolate flex h-44 items-end overflow-hidden rounded-xl bg-[var(--surface-0)] p-3">
<MeteorShower count={24} minDuration={2} maxDuration={5} />
<span className="relative z-10 rounded-full bg-black/70 px-2.5 py-1 text-xs font-medium text-white">Heavy</span>
</div>
</div>
)
}

Behind a sign in card$

Sign in to Northwind

Use your work email to continue.

import { MeteorShower, Button, Heading, Input, Label, Text } from "@glinui/ui"
export function SignIn() {
return (
<section data-glin-theme="dark" className="relative isolate flex min-h-[26rem] w-full items-center justify-center overflow-hidden rounded-xl bg-[var(--surface-0)] px-4 py-10">
<MeteorShower count={14} />
<form className="relative z-10 flex w-full max-w-sm flex-col gap-4 rounded-2xl border border-[var(--line-soft)] bg-[var(--surface-1)] p-6 text-left [box-shadow:var(--shadow-lg)]">
<div className="flex flex-col gap-1">
<Heading level={2} size="sm">Sign in to Northwind</Heading>
<Text size="sm" variant="muted">Use your work email to continue.</Text>
</div>
<div className="flex flex-col gap-1.5">
<Label htmlFor="email">Work email</Label>
<Input id="email" type="email" autoComplete="email" placeholder="you@company.com" />
</div>
<div className="flex flex-col gap-1.5">
<Label htmlFor="password">Password</Label>
<Input id="password" type="password" autoComplete="current-password" placeholder="At least 12 characters" />
</div>
<Button type="submit" className="w-full">Continue</Button>
</form>
</section>
)
}

Engines$

The engine prop is not applicable. Many independent css keyframe loops; an engine swap adds no value. It stays css only and still honors motion level none and reduced motion.

Accessibility$

  • Decorative (aria-hidden), invisible to screen readers.
  • No interactive elements.

Reduced Motion$

Component returns null when prefers-reduced-motion is active.

API Reference$

PropTypeRequiredDefaultDescription
anglenumberNo215Auto-generated from TypeScript source.
countnumberNo12Auto-generated from TypeScript source.
maxDelaynumberNo4Auto-generated from TypeScript source.
maxDurationnumberNo5Auto-generated from TypeScript source.
minDelaynumberNo0Auto-generated from TypeScript source.
minDurationnumberNo2Auto-generated from TypeScript source.

Source$

import { MeteorShower } from "@glinui/ui"
packages/ui/src/components/meteor-shower.tsx

Generated API Snapshot

Beta

Auto-extracted from TypeScript source in packages/ui/src/components/meteor-shower.tsx. This section is in beta and may lag behind hand-curated docs. Regenerate with pnpm --filter @glinui/docs api:generate.

Generated: 2026-10-08T01:41:21.546Z · Full index: /docs/api-metadata

Primary Props Type

MeteorShowerProps

MeteorShowerProps

PropTypeRequiredDefaultDescription
anglenumberNo215-
countnumberNo12-
maxDelaynumberNo4-
maxDurationnumberNo5-
minDelaynumberNo0-
minDurationnumberNo2-