npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

shadertoy-renderer

v1.1.0

Published

A lightweight WebGL 2.0 shader renderer for ShaderToy-compatible fragment shaders

Downloads

30

Readme

shadertoy-renderer

A lightweight WebGL 2.0 shader renderer for ShaderToy-compatible fragment shaders.

Original Project

This is an npm package version of ShaderToyLite.js by chipweinberger.

Features

  • 🚀 Lightweight - Only ~400 lines of code
  • 🔧 Direct ShaderToy compatibility - Load shaders without modification
  • 🎯 Pixel-perfect rendering
  • 🔄 Multiple buffer support (BufferA, BufferB, BufferC, BufferD)
  • 🖼️ Custom texture support
  • 📱 WebGL 2.0 powered
  • 🎮 Mouse and time-based interactions

Installation

npm install shadertoy-renderer

Usage

ES6 Modules

import ShaderToyRenderer from 'shadertoy-renderer';

const toy = new ShaderToyRenderer('myCanvas');
toy.setImage({
    source: `
        void mainImage( out vec4 fragColor, in vec2 fragCoord ) {
            vec2 uv = fragCoord/iResolution.xy;
            vec3 col = 0.5 + 0.5*cos(iTime+uv.xyx+vec3(0,2,4));
            fragColor = vec4(col,1.0);
        }
    `
});
toy.play();

CommonJS

const ShaderToyRenderer = require('shadertoy-renderer');

const toy = new ShaderToyRenderer('myCanvas');
// ... same usage as above

API

Constructor

  • new ShaderToyRenderer(canvasId) - Initialize with canvas element ID

Shader Methods

  • setCommon(source) - Set shared shader code
  • setBufferA(config) - Configure buffer A shader
  • setBufferB(config) - Configure buffer B shader
  • setBufferC(config) - Configure buffer C shader
  • setBufferD(config) - Configure buffer D shader
  • setImage(config) - Set main image shader

Playback Control

  • play() - Start animation
  • pause() - Pause animation
  • reset() - Reset animation to beginning
  • time() - Get current animation time in seconds
  • isPlaying() - Check if animation is playing

Utility Methods

  • addTexture(texture, key) - Add custom texture
  • setOnDraw(callback) - Set custom draw callback

Configuration Object

When setting shaders, use a configuration object:

{
    source: "void mainImage...",  // Shader source code
    iChannel0: "A",              // Input from BufferA
    iChannel1: "B",              // Input from BufferB
    iChannel2: "rock",           // Input from custom texture
    iChannel3: "C"               // Input from BufferC
}

Supported Uniforms

All standard ShaderToy uniforms are supported:

  • iResolution - Viewport resolution
  • iTime - Shader playback time
  • iTimeDelta - Render time between frames
  • iFrame - Frame counter
  • iMouse - Mouse coordinates
  • iDate - Current date/time
  • iChannel0-3 - Input textures
  • iChannelTime[4] - Channel playback times
  • iChannelResolution[4] - Channel resolutions

Requirements

  • WebGL 2.0 compatible browser
  • Canvas element in the DOM

Limitations

  • WebGL 2.0 only (no WebGL 1.0 fallback)
  • No built-in VR, sound, or keyboard support
  • Some rendering issues on iOS devices
  • No pre-provided textures (you must supply your own)

Example

<!DOCTYPE html>
<html>
<head>
    <script type="module">
        import ShaderToyRenderer from './node_modules/shadertoy-renderer/index.js';
        
        const toy = new ShaderToyRenderer('canvas');
        
        toy.setImage({
            source: `
                void mainImage( out vec4 fragColor, in vec2 fragCoord ) {
                    vec2 uv = fragCoord/iResolution.xy;
                    vec3 col = 0.5 + 0.5*cos(iTime+uv.xyx+vec3(0,2,4));
                    fragColor = vec4(col,1.0);
                }
            `
        });
        
        toy.play();
    </script>
</head>
<body>
    <canvas id="canvas" width="800" height="600"></canvas>
</body>
</html>

License

MIT - Check the original repository for licensing details.