crucıble

Orrery

A machined dotted interactive globe: deterministic ice-white land dots on a matte graphite sphere with a whisper of rim atmosphere. Drag it with heavy desk-globe momentum and the idle spin clutches back in slowly; connection arcs launch in seeded bursts, travel with comet heads, and land with surface pulses. Camera-facing marker labels, hero-edge camera offset, one cool arc accent. Original OGL implementation — instanced point dots, DPR-clamped, offscreen-paused, full GL teardown, reduced-motion-safe.

oglpro

Installation

CLI

npx shadcn@latest add @crucible/orrery

Manual — install dependencies, then copy the source

npm install ogl

Props

PropTypeDefaultDescription
arcsOrreryArc[]a built-in set of 12 intercontinental routesPool of routes the seeded scheduler launches arcs from, in bursts.
markersOrreryMarker[][]Pinned locations with optional camera-facing labels.
rotationSpeednumber1Idle rotation speed multiplier. 0 disables the idle spin.
tiltnumber23Spin-axis tilt in degrees, like a desk globe on its stand.
momentumnumber1Throw weight: scales the velocity carried after a drag release. Higher feels heavier — more carry from the same flick.
frictionnumber1How quickly a thrown spin bleeds off. Higher stops sooner; lower glides longer. The idle spin always re-engages via a slow clutch.
arcFrequencynumber1Arc burst rate multiplier. 0 effectively disables new arcs.
arcAltitudenumber1Arc apex height multiplier (scaled by route distance).
arcSpeednumber1Arc travel speed multiplier.
dotDensitynumber1Surface dot density multiplier (≈11k samples at 1). Clamped 0.25–3.
oceanDotsnumber0.16Opacity of the faint ocean stipple, 0–1. 0 renders land only.
atmospherenumber1Atmosphere rim + halo intensity. 0 disables.
cameraDistancenumber3.6Camera distance in globe radii — smaller fills the frame more (below ~2.8 the sphere overflows the canvas, useful for extreme crops).
cameraOffset[number, number][0, 0]Globe offset from frame center in globe radii, [x right, y up] — lets the globe sit half-cropped at a hero's edge.
colorsOrreryColorsmatte graphite / ice white / cool blue accentPalette overrides.
sizenumberSquare size in px. Omit to fill the parent (give the parent a size).
dprnumber1.5devicePixelRatio ceiling; effective DPR is min(devicePixelRatio, dpr).
pausedbooleanfalseFreeze all animation, holding the current frame. Drag still works.
labelstringAccessible alt text. When set, the component is exposed as role="img" with this label; otherwise it is aria-hidden decoration.
seednumber7Seed for the deterministic dot dither and arc scheduler.
classNamestringExtra classes for the wrapper.

Honors prefers-reduced-motion with a designed static fallback, pauses offscreen and on hidden tabs, and passes className through.