Skip to content

Digital Rain ​

Falling binary or hex characters in columns with fading trails. Similar to the Matrix rain effect but with customizable character sets, including binary, hexadecimal, and mixed modes.

Examples ​

Basic

Default settings.

<template>
    <EffectDemo>
        <canvas ref="canvasRef"></canvas>
    </EffectDemo>
</template>

<script
    setup
    lang="ts">
    import { onMounted, onUnmounted, ref } from 'vue';
    import { createDigitalRain } from '@basmilius/sparkle';

    const canvasRef = ref<HTMLCanvasElement>();
    let sim: ReturnType<typeof createDigitalRain> | null = null;

    onMounted(() => {
        if (canvasRef.value) {
            sim = createDigitalRain();
            sim.mount(canvasRef.value).start();
        }
    });

    onUnmounted(() => {
        sim?.destroy();
        sim = null;
    });
</script>

Configuration ​

All options are passed via a config object:

typescript
import { createDigitalRain } from '@basmilius/sparkle';

const rain = createDigitalRain({
    speed: 1,
    fontSize: 14,
    columns: 0,
    mode: 'hex',
    color: '#00ffaa',
    trailLength: 20,
    scale: 1
});
rain.mount(canvas).start();

speed ​

Speed multiplier for the falling character columns.

typescript
createDigitalRain({ speed: 1.5 });

fontSize ​

Font size in pixels for the rendered characters.

typescript
createDigitalRain({ fontSize: 18 });

columns ​

Number of character columns. Set to 0 for automatic column count based on canvas width and font size.

typescript
createDigitalRain({ columns: 30 });

mode ​

Character set used for the falling data. Choose 'binary' for 0s and 1s, 'hex' for hexadecimal characters, or 'mixed' for a combination of both.

typescript
createDigitalRain({ mode: 'binary' });

color ​

Color of the falling characters. The trailing characters fade from this color to transparent.

typescript
createDigitalRain({ color: '#ff4400' });

trailLength ​

Number of characters in each column's fading trail.

typescript
createDigitalRain({ trailLength: 30 });

scale ​

Scales all size-related values proportionally.

typescript
createDigitalRain({ scale: 1.5 });