Back to rankings

ruucm/shadergradient

TypeScriptshadergradient.co

Create beautiful moving gradients on Framer, Figma and React

figma-pluginframerglsl-shadersgradientreactjsthreejs
Star Growth
Stars
1.9k
Forks
106
Weekly Growth
β€”
Issues
16
5001k1.5k
Nov 2022Jan 2024Apr 2025Jul 2026
Artifactsnpmnpm install shadergradient
README

Shader Gradient v2

Customizable 3D, moving gradient for React. The v2 package is lean: it only ships the ShaderGradient renderer (and its canvas helper), while the stateless UI pieces now live in the separate @shadergradient/ui package.

Intro

Table of contents

Installation

Figma

Figma Plugin

Framer

Framer Component (Copy this URL and paste it on Framer Canvas)

React

Install the core renderer and its peer deps.

# with yarn
yarn add @shadergradient/react @react-three/fiber three three-stdlib camera-controls
yarn add -D @types/three

# with npm
npm i @shadergradient/react @react-three/fiber three three-stdlib camera-controls
npm i -D @types/three

# with pnpm
pnpm add @shadergradient/react @react-three/fiber three three-stdlib camera-controls
pnpm add -D @types/three

Need the stateless control surfaces? Pull them from the @shadergradient/ui package (ESM build used by Framer/Figma), not from @shadergradient/react.

Compatibility matrix

@shadergradient/react itself works on React 18 or 19, but the right @react-three/fiber version depends on your environment. For Next.js 15 App Router specifically, you must use R3F v9 + React 19 β€” R3F v8 is structurally incompatible with the App Router's vendored React 19 canary (see #138 for the full trace).

Environment React @react-three/fiber three
Next 15 β€” App Router ^19.0.0 ^9.0.0 >=0.158.0
Next 14 / Next 15 Pages / Vite / etc. ^18 or ^19 matching 8.x/9.x >=0.158.0

No next.config aliases or transpilePackages entries are required when you stay on these combinations.

Packages

  • @shadergradient/react
    • Ships only the renderer: ShaderGradient and ShaderGradientCanvas.
    • No built-in store or controls. Use your own state or pair with @shadergradient/ui.
  • @shadergradient/ui
    • Stateless UI/control components extracted from the core package for Framer/Figma usage.
    • Not published to npm; consumed as an ESM bundle (see packages/ui).
  • shadergradient-old
    • Legacy v1 package that bundled store + UI. Keep using this only if you rely on the old with-store build.

Usage

Drop ShaderGradient inside ShaderGradientCanvas and drive it with props or a query string.

import { ShaderGradientCanvas, ShaderGradient } from '@shadergradient/react'

function App() {
  return (
    <ShaderGradientCanvas
      style={{ position: 'absolute', inset: 0 }}
      pixelDensity={1.5}
      fov={45}
    >
      <ShaderGradient cDistance={32} cPolarAngle={125} />
    </ShaderGradientCanvas>
  )
}

Load settings from a URL (for example, one copied from shadergradient.co/customize):

<ShaderGradientCanvas>
  <ShaderGradient
    control='query'
    urlString='https://www.shadergradient.co/customize?animate=on&cDistance=3.6&cPolarAngle=90&color1=%2352ff89&color2=%23dbba95&color3=%23d0bce1&lightType=3d&shader=defaults&type=plane&uFrequency=5.5&uSpeed=0.4&uStrength=4'
  />
</ShaderGradientCanvas>

Available Gradient Properties (Types)

type MeshT = {
  type?: 'plane' | 'sphere' | 'waterPlane'
  animate?: 'on' | 'off'
  uTime?: number
  uSpeed?: number
  uStrength?: number
  uDensity?: number
  uFrequency?: number
  uAmplitude?: number
  range?: 'enabled' | 'disabled' | string
  rangeStart?: number
  rangeEnd?: number
  loop?: 'on' | 'off'
  loopDuration?: number
  positionX?: number
  positionY?: number
  positionZ?: number
  rotationX?: number
  rotationY?: number
  rotationZ?: number
  color1?: string
  color2?: string
  color3?: string
  reflection?: number
  wireframe?: boolean
  shader?: string
  rotSpringOption?: any
  posSpringOption?: any
}

type GradientT = MeshT & {
  control?: 'query' | 'props'
  isFigmaPlugin?: boolean
  smoothTime?: number
  cAzimuthAngle?: number
  cPolarAngle?: number
  cDistance?: number
  cameraZoom?: number
  lightType?: '3d' | 'env'
  brightness?: number
  envPreset?: 'city' | 'dawn' | 'lobby'
  grain?: 'on' | 'off'
  grainBlending?: number
  zoomOut?: boolean
  toggleAxis?: boolean
  hoverState?: string
  enableTransition?: boolean
  enableCameraUpdate?: boolean
  urlString?: string
  onCameraUpdate?: (updates: Partial<GradientT>) => void
}

ShaderGradientCanvas also accepts pixelDensity, fov, envBasePath, GL overrides (preserveDrawingBuffer, powerPreference), and lazy-load controls (lazyLoad, threshold, rootMargin).

Examples

Figma and Framer demos still use the UI package internally:

Conference Talks

FEConf 2024 ShaderGradient

Contributing

Setup

pnpm install

Start development

pnpm dev

Release

pnpm changeset
pnpm version-packages

then commit changes (message like v1.x.x)

# Release to npm
pnpm release

# Release it as ES Module (Hosted by GitHub Pages)
git push origin main

Future Plan

  • Detatch framer-motion peer depenency (Seperate UI & Store Package)
  • Figma GIF Support
  • More Shaders (Metalic, Glass, etc.)
  • Three.js version upgrade
  • Separate framer component bundles & shader gradient bundles
  • Separate shader codes as a separate package, and make it reusable for JS, Vue, etc.
  • Framer Plugin
  • Webflow Support
  • Wix Support

License

MIT Β© ruucm, stone-skipper

Related repositories
DouyinFE/semi-design

πŸš€A modern, comprehensive, flexible design system and React UI library, AI-friendly built-in.🎨Provide 3000+ Design Tokens, easy to build your design system. Make Semi Design to Any Design.πŸ§‘πŸ»β€πŸ’» Design to Code in one click

TypeScriptnpmOtherreactui-libary
semi.design
10.2k822
Shopify/polaris-react

Shopify's Polaris Design System - React implementation (Deprecated)

TypeScriptnpmOthershopify-polarisreact
polaris.shopify.com
6.2k1.3k
Shopify/polaris

Shopify’s design system to help us work together to build a great experience for all of our merchants.

TypeScriptnpmOthershopify-polarisreact
polaris.shopify.com
5.9k1.2k
BuilderIO/figma-html

Convert any website to editable Figma designs

TypeScriptnpmMIT Licensehtmlfigma
figma.com/community/plugin/747985167520967365
3.7k363
itmeo/webgradients

180 linear gradients in CSS3, Figma, Sketch and PSD formats β€” free for personal and commercial use

CSSnpmMIT Licensegradientbackground
webgradients.com
2.5k141
figma/plugin-samples

πŸ”Œ Sample Figma plugins.

TypeScriptnpmMIT Licensefigmafigma-plugin
figma.com/plugin-docs
1.8k351
lukasoppermann/design-tokens

🎨 Figma plugin to export design tokens to json in an amazon style dictionary compatible format.

TypeScriptnpmMIT Licensefigmafigma-plugin
figma.com/community/plugin/888356646278934516/Design-Tokens
1.1k148
yuanqing/create-figma-plugin

:battery: The comprehensive toolkit for developing plugins and widgets for Figma

TypeScriptnpmMIT Licensecreate-figma-pluginfigma
yuanqing.github.io/create-figma-plugin/
1.1k102