Skip to main content
Shiny draws graphs on a dark card scattered with faint stars, inside a holographic foil border: every shape is one clean flat color, slices and stacked bars are parted by a hairline of the card, and lines carry a soft glow.
Shiny ships as its own package, @graphysdk/theme-shiny, still on 0.x. A minor release may change its look, so pin a caret range (^0.1.0) to take only patches. Tell us what works and what doesn’t on Discord.

Install

Its peer dependencies are @graphysdk/react and React 19. Pass the theme to createGraphyKit and import its fonts once:
Every graph drawn through kit.GraphProvider takes the theme. The spec is written as usual and names no theme:
Without a kit, pass the theme to the provider instead: <GraphProvider theme={shiny}>. The provider reads the theme once, when it mounts. To switch themes, remount the provider, for example with a React key.

What the theme decides

The border

The foil is the theme’s one holographic part: a band of lilac, pink, cyan and mint round the card’s edge, with a fine diamond plate and streaks of light across it. Nothing inside the card is holographic, so shapes keep their own colors, a slice its angle and a bar its value.

Changing the look of one graph

A spec’s own styles(), scales and config() sit above the theme. This graph keeps the card and the border and draws its groups in Pulse and Sirius only:
The theme is drawn for a graph about 600 pixels wide. style.graph({ textScale }) scales its type for a larger or smaller one.

With a geom package

Shiny repaints the built-in geoms only. A geom from a package, such as the dumbbell, keeps its own shapes and is drawn on the card in the theme’s colors and type.

Fonts

fonts.css loads Inter Tight, in weights 500, 700 and 800, and JetBrains Mono, in weights 400, 500, 600 and 700, from Google Fonts. To host the fonts yourself, leave the import out and load families named Inter Tight and JetBrains Mono before the first graph is drawn.