
Security News
The Hidden Blast Radius of the Axios Compromise
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.
better-vanta
Advanced tools
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r121/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vanta@0.5.21/dist/vanta.waves.min.js"></script>
<script>
VANTA.WAVES('#my-background')
</script>
VANTA.WAVES({
el: '#my-background', // element selector string or DOM object reference
color: 0x000000,
waveHeight: 20,
shininess: 50,
waveSpeed: 1.5,
zoom: 0.75
})
el: The container element.
mouseControls: (defaults to true) Set to false to disable mouse controls. Only applies to certain effects.
touchControls: (defaults to true) Set to false to disable touch controls. Only applies to certain effects.
gyroControls: (defaults to false) Set to true to allow gyroscope to imitate mouse. Only applies to certain effects.
NOTE: Each effect has its own specific parameters. Explore them all at www.vantajs.com!
const effect = VANTA.WAVES({
el: '#my-background',
color: 0x000000
})
// Later, when you want to update an animation in progress with new options
effect.setOptions({
color: 0xff88cc
})
// Later, if the container changes size and you want to force Vanta to redraw at the new canvas size
effect.resize()
const effect = VANTA.WAVES('#my-background')
effect.destroy() // e.g. call this in React's componentWillUnmount
npm i vanta, then import a specific effect as follows. Make sure three.js or p5.js has already been included via <script> tag.
import React from 'react'
import BIRDS from 'vanta/dist/vanta.birds.min'
// Make sure window.THREE is defined, e.g. by including three.min.js in the document head using a <script> tag
class MyComponent extends React.Component {
constructor() {
super()
this.vantaRef = React.createRef()
}
componentDidMount() {
this.vantaEffect = BIRDS({
el: this.vantaRef.current
})
}
componentWillUnmount() {
if (this.vantaEffect) this.vantaEffect.destroy()
}
render() {
return <div ref={this.vantaRef}>
Foreground content goes here
</div>
}
}
import React, { useState, useEffect, useRef } from 'react'
import BIRDS from 'vanta/dist/vanta.birds.min'
// Make sure window.THREE is defined, e.g. by including three.min.js in the document head using a <script> tag
const MyComponent = (props) => {
const [vantaEffect, setVantaEffect] = useState(0)
const myRef = useRef(null)
useEffect(() => {
if (!vantaEffect) {
setVantaEffect(BIRDS({
el: myRef.current
}))
}
return () => {
if (vantaEffect) vantaEffect.destroy()
}
}, [vantaEffect])
return <div ref={myRef}>
Foreground content goes here
</div>
}
<template>
<div ref='vantaRef'>
Foreground content here
</div>
</template>
<script>
import BIRDS from 'vanta/src/vanta.birds'
// Make sure window.THREE is defined, e.g. by including three.min.js in the document head using a <script> tag
export default {
mounted() {
this.vantaEffect = BIRDS({
el: this.$refs.vantaRef
})
},
beforeDestroy() {
if (this.vantaEffect) {
this.vantaEffect.destroy()
}
}
}
</script>
For effects that use three.js, you can import three from npm, and pass it into the effect function.
import React from 'react'
import * as THREE from 'three'
import BIRDS from 'vanta/dist/vanta.birds.min'
...
componentDidMount() {
this.vantaEffect = BIRDS({
el: this.vantaRef.current,
THREE: THREE // use a custom THREE when initializing
})
}
...
For effects that use p5.js, you can import p5 from npm, and pass it into the effect function.
import React from 'react'
import p5 from 'p5'
import TRUNK from 'vanta/dist/vanta.trunk.min'
...
componentDidMount() {
this.vantaEffect = TRUNK({
el: this.vantaRef.current,
p5: p5 // use a custom p5 when initializing
})
}
...
Clone the repo, switch to the gallery branch, run npm install and npm run dev, and go to localhost:8080.
General inspiration from shadertoy.com, #generative, /r/generative, /r/creativecoding, etc
Birds effect from https://threejs.org/examples/?q=birds#webgl_gpgpu_birds by @zz85
Fog effect from https://thebookofshaders.com/13/ by @patriciogonzalezvivo
Clouds effect from https://www.shadertoy.com/view/XslGRr by Inigo Quilez
Clouds2 effect from https://www.shadertoy.com/view/lsBfDz by Rune Stubbe
Trunk, Topology effects from http://generated.space/ by Kjetil Midtgarden Golid @kgolid
FAQs
3D animated backgrounds for your website
We found that better-vanta demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.

Research
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.

Research
Malicious versions of the Telnyx Python SDK on PyPI delivered credential-stealing malware via a multi-stage supply chain attack.