Customizable 3D, moving gradient package for React. Also available on modern design tools like Figma and Framer.
Framer ESM (Copy this URL and paste it on Framer Canvas)
Install below dependencies on your React app.
⚠️ New Version (from v2.0.0)
# with yarn
yarn add three @react-three/fiber @react-spring/three @shadergradient/react
yarn add -D @types/three
# with npm
npm i three @react-three/fiber @react-spring/three @shadergradient/react
npm i -D @types/three
# with pnpm
pnpm add three @react-three/fiber @react-spring/three @shadergradient/react
pnpm add -D @types/three
⚠️ Old Version (v1.x.x)
# with yarn
yarn add three @react-three/fiber @react-spring/three shadergradient
yarn add -D @types/three
# with npm
npm i three @react-three/fiber @react-spring/three shadergradient
npm i -D @types/three
# with pnpm
pnpm add three @react-three/fiber @react-spring/three shadergradient
pnpm add -D @types/three
Drop the gradient component on your canvas. Then you can customize it with props.
type MeshT = {
type?: 'plane' | 'sphere' | 'waterPlane'
animate?: 'on' | 'off'
uTime?: number
uSpeed?: number
uStrength?: number
uDensity?: number
uFrequency?: number
// renamed to Sprial on Framer & shadergradient.co
uAmplitude?: 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
dampingFactor?: number
// View (camera) props
cAzimuthAngle?: number
cPolarAngle?: number
// for both plane and waterPlane type
cDistance?: number
// only for sphere type
cameraZoom?: number
// Effect props
lightType?: '3d' | 'env'
brightness?: number
envPreset?: 'city' | 'dawn' | 'lobby'
grain?: 'on' | 'off'
grainBlending?: number
// Tool props
zoomOut?: boolean
toggleAxis?: boolean
hoverState?: string
enableTransition?: boolean
}
import React from 'react'
import { ShaderGradientCanvas, ShaderGradient } from '@shadergradient/react'
import * as reactSpring from '@react-spring/three'
function App() {
return (
<ShaderGradientCanvas
style={{
position: 'absolute',
top: 0,
}}
>
<ShaderGradient cDistance={32} cPolarAngle={125} />
</ShaderGradientCanvas>
)
}
or just copy and paste URL of the gradients. (Grab the URL from shadergradient.co/customize)
import React from 'react'
import { ShaderGradientCanvas, ShaderGradient } from '@shadergradient/react'
import * as reactSpring from '@react-spring/three'
function App() {
return (
<ShaderGradientCanvas
style={{
position: 'absolute',
top: 0,
}}
>
<ShaderGradient
control='query'
urlString='https://www.shadergradient.co/customize?animate=on&axesHelper=off&bgColor1=%23000000&bgColor2=%23000000&brightness=1.2&cAzimuthAngle=180&cDistance=3.6&cPolarAngle=90&cameraZoom=1&color1=%2352ff89&color2=%23dbba95&color3=%23d0bce1&embedMode=off&envPreset=city&fov=45&gizmoHelper=hide&grain=on&lightType=3d&pixelDensity=1&positionX=-1.4&positionY=0&positionZ=0&reflection=0.1&rotationX=0&rotationY=10&rotationZ=0&shader=defaults&type=plane&uDensity=1.3&uFrequency=5.5&uSpeed=0.4&uStrength=4&uTime=0&wireframe=false&zoomOut=false'
/>
</ShaderGradientCanvas>
)
}
For general React environments (current version, stateless):
import { ShaderGradient } from '@shadergradient/react'
This imports from /dist/without-store.mjs
For React with legacy Storized Control UI:
import { ShaderGradient } from 'shadergradient/with-store'
This imports from /dist/with-store.mjs
Example: shadergradient-web.vercel.app/customize (Next.js)
https://esm-shadergradient.onrender.com/without-store.mjs
https://esm-shadergradient.onrender.com/with-store.mjs
Example: shadergradient.co/customize (Framer Sites)https://esm-shadergradient.onrender.com/with-store.mjs
This version is mixed with DB code and uses the same store as StoreGradient.Note: All ESM modules are dynamically served based on client IPs. We refer to this system as "ESM Editor" and use it for development purposes.
shadergradient/
├─ src/
│ ├─ (current version code)
├─ src-dev/
├─ (previously used for staging new features)
The src
and src-dev
folders exist only within the shadergradient package directory. Previously, src-dev
was used as a staging area for new versions due to version management limitations in Framer.
However, we are phasing out this approach:
src-dev
folder is no longer actively used for development.src
and src-dev
directories for version management.This change will simplify our development process and align it more closely with standard practices. All new features and updates will be developed and tested within the Framer project environment, ensuring better integration and easier maintenance.
pnpm install
pnpm dev
pnpm changeset
pnpm version-packages
then commit changes (message with like v1.x.x)
# Release to npm
pnpm release
# Release it as ES Module (Hosted by GitHub Pages)
git push origin main
MIT © ruucm, stone-skipper