Skip to content

Primordial Soup ​

The primordial soup effect simulates a microscopic world of single-celled organisms. Cells drift via Brownian motion, consume food particles to gain energy, grow, and divide through an animated mitosis sequence. Cells that can't find food shrink and eventually die off.

Examples ​

Basic

Default cell simulation with colorful organisms.

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

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

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

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

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

Configuration ​

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

const soup = createPrimordialSoup({
    speed: 1,
    maxCells: 40,
    foodRate: 3,
    colors: ['#66bb6a', '#42a5f5', '#ab47bc', '#ef5350', '#ffa726'],
    scale: 1
});
soup.mount(canvas).start();

Population Size ​

typescript
// Small, sparse population
createPrimordialSoup({ maxCells: 15 });

// Crowded petri dish
createPrimordialSoup({ maxCells: 80 });

Food Rate ​

Controls how quickly food particles appear for cells to consume:

typescript
// Scarce food, cells must compete
createPrimordialSoup({ foodRate: 1 });

// Abundant food, rapid growth and division
createPrimordialSoup({ foodRate: 8 });

Colors ​

Each color is assigned to a cell lineage. Child cells inherit their parent's color:

typescript
// Monochrome
createPrimordialSoup({ colors: ['#44aaff'] });

// Earthy tones
createPrimordialSoup({
    colors: ['#8bc34a', '#cddc39', '#ffeb3b', '#ff9800', '#795548']
});