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

@genart-dev/plugin-plants

v1.2.0

Published

Algorithmic plant generation for genart.dev — L-systems, phyllotaxis, geometric engines with 110 botanical presets

Readme

@genart-dev/plugin-plants

Algorithmic plant generation plugin for genart.dev — 110 botanically-accurate presets across 9 categories, powered by L-system, phyllotaxis, and geometric engines. 9 drawing styles, 5 detail levels, 3D turtle projection, growth animation, wind dynamics, ecosystem composition, and 19 MCP tools for AI-agent control.

Part of genart.dev — a generative art platform with an MCP server, desktop app, and IDE extensions.

Gallery

9 drawing styles — every plant renders in any style:

9 drawing styles applied to English Oak

Growth animation — continuous seed-to-bloom with tDOL time parameter:

Cherry Blossom growth series at 5 stages

Hero renders:

| Cherry Blossom × Watercolor | Bonsai × Sumi-e | Birch × Ink Sketch | |:---:|:---:|:---:| | Cherry watercolor | Bonsai sumi-e | Birch ink sketch |

| Maple × Pencil | Willow × Silhouette | Cherry × Fruit | |:---:|:---:|:---:| | Maple pencil | Willow silhouette | Cherry fruit |

Ecosystems — multi-species compositions with depth and atmosphere:

| Japanese Garden (Sumi-e) | Dark Forest (Woodcut) | Riverside (Watercolor) | |:---:|:---:|:---:| | Japanese garden | Dark forest | Riverside |

Install

npm install @genart-dev/plugin-plants

Usage

import plantsPlugin from "@genart-dev/plugin-plants";
import { createDefaultRegistry } from "@genart-dev/core";

const registry = createDefaultRegistry();
registry.registerPlugin(plantsPlugin);

// Or access individual exports
import {
  ALL_PRESETS,
  getPreset,
  filterPresets,
  searchPresets,
  iterateLSystem,
  turtleInterpret,
  generatePhyllotaxis,
} from "@genart-dev/plugin-plants";

Engines

Three generation engines cover the full range of plant morphology:

L-system (~80 presets)

Parametric Lindenmayer systems with stochastic and context-sensitive productions. A turtle interpreter converts module strings into branching geometry with continuous segment tapering (da Vinci width decay at branches + per-segment taper along trunk/branch runs), tropism forces, angle jitter, and implicit leaf placement at terminal branches.

import { iterateLSystem, turtleInterpret, modulesToString } from "@genart-dev/plugin-plants";

const preset = getPreset("english-oak");
const modules = iterateLSystem(preset.definition, 42);
const output = turtleInterpret(modules, preset.turtleConfig);
// output.segments, output.leaves, output.flowers

Phyllotaxis (~15 presets)

Vogel spiral placement with planar, cylindrical, and conical models. Golden-angle divergence produces Fibonacci parastichy patterns seen in sunflower heads, succulent rosettes, and flower clusters.

import { generatePhyllotaxis, calculateParastichies, GOLDEN_ANGLE } from "@genart-dev/plugin-plants";

const placements = generatePhyllotaxis({ count: 500, divergenceAngle: GOLDEN_ANGLE, model: "planar" });
const spirals = calculateParastichies(500, GOLDEN_ANGLE);
// spirals.clockwise = 21, spirals.counterClockwise = 34

Geometric (~15 presets)

Direct bezier-curve generators for leaf shapes, petal arrangements, cactus columns, lily pads, and fiddlehead spirals.

import { generateLeafShape, generatePetalArrangement } from "@genart-dev/plugin-plants";

const leaf = generateLeafShape({ width: 40, height: 80, shape: "ovate", veinCount: 7 });
const petals = generatePetalArrangement({ petalCount: 8, innerRadius: 20, outerRadius: 60 });

Drawing Styles (9)

Every plant can be rendered in any of 9 drawing styles, applied via the drawingStyle layer property:

| Style | Character | |---|---| | precise | Clean uniform lines, technical illustration | | botanical | Stippling dots, cross-hatching in shadows, plate-style | | ink-sketch | Rough scratchy lines, varying width, ink splatter | | sumi-e | Wet ink washes, thick-to-thin brush variation | | watercolor | Translucent washes with uneven wet edges | | pencil | Graphite hatching texture, soft tonal edges | | engraving | Parallel hatching lines following form contours | | woodcut | Bold black and white, no gradients | | silhouette | Solid filled shape, no internal detail |

import { getStyle, listStyleIds } from "@genart-dev/plugin-plants";

const style = getStyle("sumi-e");
// style.render(ctx, structuralOutput, transform, colors, config)

listStyleIds(); // ["precise", "botanical", "ink-sketch", "sumi-e", ...]

Detail Levels (5)

Control rendering density from quick sketches to full botanical plates:

| Level | What's Shown | |---|---| | minimal | Trunk and main branches only | | sketch | + secondary branches | | standard | + leaves and flowers | | detailed | + bark texture, leaf veins | | botanical-plate | Full botanical illustration density |

Layer Types (9)

| Layer Type | Category | Default Preset | Description | |---|---|---|---| | plants:tree | Trees (28) | english-oak | Deciduous, coniferous, tropical, fruit, ornamental trees | | plants:fern | Ferns (10) | barnsley-fern | Classic ferns, primitive plants, fiddlehead spirals | | plants:flower | Flowers (22) | sunflower | Radial flowers, inflorescences, specialized forms | | plants:vine | Vines (10) | english-ivy | Twining, tendril, adhesive, scrambling climbers | | plants:grass | Grasses (12) | prairie-grass | Prairie grasses, cereals, bamboo, papyrus | | plants:phyllotaxis | Succulents & more (10) | echeveria | Rosette succulents, cacti, aquatic plants | | plants:root-system | Roots (5) | carrot-taproot | Taproots, fibrous, aerial, mycorrhizal networks | | plants:hedge | Herbs & Shrubs (8) | rosemary | Multi-instance hedge mode with count and density | | plants:ecosystem | All categories | — | Multi-species composition with depth, arrangement, wind |

Presets (110)

Every preset encodes species-accurate branching angles, contraction ratios, and growth patterns measured from botanical references.

Trees (28)

Trees gallery

| ID | Name | Scientific Name | Engine | Complexity | |---|---|---|---|---| | english-oak | English Oak | Quercus robur | lsystem | complex | | sugar-maple | Sugar Maple | Acer saccharum | lsystem | complex | | japanese-maple | Japanese Maple | Acer palmatum | lsystem | complex | | silver-birch | Silver Birch | Betula pendula | lsystem | moderate | | weeping-willow | Weeping Willow | Salix babylonica | lsystem | showcase | | scots-pine | Scots Pine | Pinus sylvestris | lsystem | complex | | norway-spruce | Norway Spruce | Picea abies | lsystem | moderate | | italian-cypress | Italian Cypress | Cupressus sempervirens | lsystem | basic | | coconut-palm | Coconut Palm | Cocos nucifera | lsystem | moderate | | baobab | Baobab | Adansonia digitata | lsystem | complex | | cherry-blossom | Cherry Blossom | Prunus serrulata | lsystem | complex | | banyan-tree | Banyan Tree | Ficus benghalensis | lsystem | showcase | | apple-tree | Apple Tree | Malus domestica | lsystem | moderate | | american-elm | American Elm | Ulmus americana | lsystem | complex | | european-beech | European Beech | Fagus sylvatica | lsystem | complex | | quaking-aspen | Quaking Aspen | Populus tremuloides | lsystem | moderate | | atlas-cedar | Atlas Cedar | Cedrus atlantica | lsystem | complex | | douglas-fir | Douglas Fir | Pseudotsuga menziesii | lsystem | moderate | | common-juniper | Common Juniper | Juniperus communis | lsystem | moderate | | red-mangrove | Red Mangrove | Rhizophora mangle | lsystem | complex | | giant-bamboo | Giant Bamboo | Dendrocalamus giganteus | lsystem | moderate | | olive-tree | Olive Tree | Olea europaea | lsystem | complex | | orange-tree | Orange Tree | Citrus sinensis | lsystem | moderate | | bonsai-formal-upright | Bonsai (Formal Upright) | — | lsystem | complex | | bonsai-cascade | Bonsai (Cascade) | — | lsystem | complex | | magnolia | Magnolia | Magnolia grandiflora | lsystem | complex | | flowering-dogwood | Flowering Dogwood | Cornus florida | lsystem | moderate | | japanese-garden-pine | Japanese Garden Pine | Pinus thunbergii | lsystem | showcase |

Ferns (10)

Ferns gallery

| ID | Name | Scientific Name | Engine | Complexity | |---|---|---|---|---| | barnsley-fern | Barnsley Fern | Dryopteris filix-mas | lsystem | moderate | | maidenhair-fern | Maidenhair Fern | Adiantum capillus-veneris | lsystem | complex | | bracken-fern | Bracken | Pteridium aquilinum | lsystem | moderate | | boston-fern | Boston Fern | Nephrolepis exaltata | lsystem | moderate | | staghorn-fern | Staghorn Fern | Platycerium bifurcatum | lsystem | complex | | tree-fern | Tree Fern | Cyathea cooperi | lsystem | complex | | fiddlehead | Fiddlehead | Matteuccia struthiopteris | geometric | basic | | horsetail | Horsetail | Equisetum hyemale | lsystem | basic | | club-moss | Club Moss | Lycopodium clavatum | lsystem | moderate | | resurrection-fern | Resurrection Fern | Pleopeltis polypodioides | lsystem | moderate |

Flowers (22)

Flowers gallery

| ID | Name | Scientific Name | Engine | Complexity | |---|---|---|---|---| | sunflower | Sunflower | Helianthus annuus | phyllotaxis | showcase | | common-daisy | Common Daisy | Bellis perennis | geometric | basic | | dandelion-clock | Dandelion Clock | Taraxacum officinale | phyllotaxis | moderate | | wild-rose | Wild Rose | Rosa canina | geometric | moderate | | lotus | Lotus | Nelumbo nucifera | geometric | complex | | california-poppy | California Poppy | Eschscholzia californica | geometric | basic | | foxglove | Foxglove | Digitalis purpurea | lsystem | complex | | english-lavender | English Lavender | Lavandula angustifolia | lsystem | moderate | | tulip | Tulip | Tulipa gesneriana | geometric | basic | | hibiscus | Hibiscus | Hibiscus rosa-sinensis | geometric | moderate | | cosmos | Cosmos | Cosmos bipinnatus | geometric | basic | | zinnia | Zinnia | Zinnia elegans | geometric | moderate | | forget-me-not | Forget-me-not | Myosotis sylvatica | geometric | basic | | calla-lily | Calla Lily | Zantedeschia aethiopica | geometric | moderate | | bearded-iris | Bearded Iris | Iris germanica | geometric | complex | | bird-of-paradise | Bird of Paradise | Strelitzia reginae | geometric | complex | | elderflower | Elderflower | Sambucus nigra | phyllotaxis | moderate | | lilac | Lilac | Syringa vulgaris | phyllotaxis | complex | | hydrangea | Hydrangea | Hydrangea macrophylla | phyllotaxis | showcase | | yarrow | Yarrow | Achillea millefolium | phyllotaxis | moderate | | bleeding-heart | Bleeding Heart | Lamprocapnos spectabilis | lsystem | complex | | moth-orchid | Moth Orchid | Phalaenopsis amabilis | lsystem | showcase |

Grasses (12)

Grasses gallery

| ID | Name | Scientific Name | Engine | Complexity | |---|---|---|---|---| | prairie-grass | Prairie Grass | Schizachyrium scoparium | lsystem | moderate | | common-wheat | Common Wheat | Triticum aestivum | lsystem | basic | | pampas-grass | Pampas Grass | Cortaderia selloana | lsystem | complex | | bamboo-culm | Bamboo Culm | Phyllostachys edulis | lsystem | moderate | | common-reed | Common Reed | Phragmites australis | lsystem | moderate | | barley | Barley | Hordeum vulgare | lsystem | basic | | tall-fescue | Tall Fescue | Festuca arundinacea | lsystem | basic | | rice | Rice | Oryza sativa | lsystem | basic | | common-oat | Common Oat | Avena sativa | lsystem | basic | | cattail | Cattail | Typha latifolia | lsystem | moderate | | papyrus | Papyrus | Cyperus papyrus | lsystem | complex | | sedge | Sedge | Carex pendula | lsystem | basic |

Vines (10)

Vines gallery

| ID | Name | Scientific Name | Engine | Complexity | |---|---|---|---|---| | english-ivy | English Ivy | Hedera helix | lsystem | complex | | wisteria | Wisteria | Wisteria sinensis | lsystem | showcase | | grapevine | Grapevine | Vitis vinifera | lsystem | complex | | morning-glory | Morning Glory | Ipomoea nil | lsystem | moderate | | clematis | Clematis | Clematis vitalba | lsystem | complex | | honeysuckle | Honeysuckle | Lonicera periclymenum | lsystem | moderate | | passionflower | Passionflower | Passiflora caerulea | lsystem | showcase | | star-jasmine | Star Jasmine | Trachelospermum jasminoides | lsystem | moderate | | bougainvillea | Bougainvillea | Bougainvillea spectabilis | lsystem | complex | | sweet-pea | Sweet Pea | Lathyrus odoratus | lsystem | moderate |

Succulents (10)

Succulents gallery

| ID | Name | Scientific Name | Engine | Complexity | |---|---|---|---|---| | echeveria | Echeveria | Echeveria elegans | phyllotaxis | moderate | | aloe-vera | Aloe Vera | Aloe vera | phyllotaxis | moderate | | saguaro | Saguaro Cactus | Carnegiea gigantea | lsystem | complex | | barrel-cactus | Barrel Cactus | Ferocactus wislizeni | geometric | moderate | | agave | Agave | Agave americana | phyllotaxis | complex | | sempervivum | Sempervivum | Sempervivum tectorum | phyllotaxis | moderate | | haworthia | Haworthia | Haworthia fasciata | phyllotaxis | moderate | | prickly-pear | Prickly Pear | Opuntia ficus-indica | lsystem | moderate | | jade-plant | Jade Plant | Crassula ovata | lsystem | moderate | | string-of-pearls | String of Pearls | Senecio rowleyanus | lsystem | basic |

Herbs & Shrubs (8)

Herbs & Shrubs gallery

| ID | Name | Scientific Name | Engine | Complexity | |---|---|---|---|---| | rosemary | Rosemary | Salvia rosmarinus | lsystem | moderate | | thyme | Thyme | Thymus vulgaris | lsystem | basic | | sweet-basil | Sweet Basil | Ocimum basilicum | lsystem | basic | | boxwood | Boxwood | Buxus sempervirens | lsystem | moderate | | rhododendron | Rhododendron | Rhododendron ponticum | lsystem | complex | | holly | Holly | Ilex aquifolium | lsystem | moderate | | lavender-bush | Lavender Bush | Lavandula stoechas | lsystem | moderate | | wild-rose-bush | Wild Rose Bush | Rosa rugosa | lsystem | moderate |

Aquatic (5)

Aquatic gallery

| ID | Name | Scientific Name | Engine | Complexity | |---|---|---|---|---| | water-lily | Water Lily | Nymphaea alba | geometric | moderate | | giant-kelp | Giant Kelp | Macrocystis pyrifera | lsystem | complex | | lotus-pad | Lotus Pad | Nelumbo nucifera | geometric | basic | | sea-lettuce | Sea Lettuce | Ulva lactuca | geometric | basic | | duckweed | Duckweed | Lemna minor | geometric | basic |

Roots (5)

Roots gallery

| ID | Name | Scientific Name | Engine | Complexity | |---|---|---|---|---| | carrot-taproot | Carrot Taproot | Daucus carota | lsystem | moderate | | fibrous-grass-root | Fibrous Grass Root | Poaceae | lsystem | moderate | | mangrove-stilt-roots | Mangrove Stilt Roots | Rhizophora | lsystem | complex | | aerial-orchid-root | Aerial Orchid Root | Vanda | lsystem | moderate | | mycorrhizal-network | Mycorrhizal Network | Glomus | lsystem | showcase |

MCP Tools (19)

Exposed to AI agents through the MCP server when this plugin is registered:

| Tool | Description | |---|---| | add_plant | Add a plant layer from any of the 110 presets | | list_plant_presets | List presets filtered by category, tags, complexity, or engine | | search_plants | Full-text search across names, scientific names, descriptions, tags | | set_plant_grammar | Edit L-system axiom, iterations, angle, length/width decay | | set_plant_tropism | Configure gravity and susceptibility forces | | set_plant_season | Switch color palette to spring/summer/autumn/winter | | grow_plant | Step iterations up or down (seedling → sapling → mature → ancient) | | create_garden | Compose multiple plants with positions, seeds, and scale | | randomize_plant | Add a random plant, optionally constrained by category or engine | | analyze_phyllotaxis | Compute parastichy numbers and Fibonacci analysis | | explain_grammar | Human-readable L-system explanation with optional derivation trace | | create_inflorescence | Flower cluster arrangements (bouquet, wreath, meadow, row, spiral) | | set_plant_style | Set drawing style and detail level for a plant layer | | suggest_plant_style | AI-suggested style based on species and context | | set_plant_growth | Configure growth animation (tDOL time, curve, speed) | | advance_plant_growth | Step growth forward/backward in time | | set_plant_wind | Configure wind direction, strength, turbulence, gusts | | create_ecosystem | Multi-species ecosystem with depth lanes, arrangement, atmosphere | | export_plant_paths | Export structural geometry as path data (painting bridge, ADR 072) |

Preset Discovery

import { ALL_PRESETS, filterPresets, searchPresets, getCategories, getAllTags } from "@genart-dev/plugin-plants";

// All 110 presets
console.log(ALL_PRESETS.length); // 110

// Filter by category
const trees = filterPresets({ category: "trees" }); // 28 presets

// Filter by engine
const phyllotaxis = filterPresets({ engine: "phyllotaxis" }); // ~15 presets

// Filter by complexity
const showcases = filterPresets({ complexity: "showcase" }); // ~10 presets

// Filter by tags
const tropical = filterPresets({ tags: ["tropical"] });

// Full-text search
const results = searchPresets("fibonacci"); // sunflower, echeveria, ...

// Available categories and tags
getCategories(); // ["trees", "ferns", "flowers", ...]
getAllTags();     // ["adhesive", "annual", "bamboo", ...]

Tropism

Plants respond to environmental forces via the tropism system:

import { applyTropism, createTropism } from "@genart-dev/plugin-plants";

// Positive gravity = upward growth (phototropism)
// Negative gravity = drooping (gravitropism)
const tropism = createTropism({ gravity: -0.4, susceptibility: 0.5 });

| Species | Gravity | Effect | |---|---|---| | Weeping Willow | -0.72 | Strong drooping branches | | Coconut Palm | -0.55 | Fronds curve downward | | Morning Glory | +0.45 | Climbs upward toward light | | Sweet Pea | +0.55 | Strong upward climbing | | English Oak | -0.25 | Slight droop in outer branches |

v2 Features

3D Turtle Projection

The 3D turtle engine adds depth via camera projection, enabling perspective views of plants. Branches grow in 3D space and are projected to the canvas with depth-based opacity and scale.

import { turtle3DInterpret } from "@genart-dev/plugin-plants";

const output = turtle3DInterpret(modules, {
  ...turtleConfig,
  camera: { distance: 500, elevation: 15, azimuth: 30 },
});

Growth Animation

Continuous growth via time-dependent L-systems (tDOL). The filterByGrowthTime function clips geometry to a growth parameter, enabling smooth seed-to-bloom animation.

import { iterateTaggedLSystem, filterByGrowthTime, applyGrowthCurve } from "@genart-dev/plugin-plants";

const tagged = iterateTaggedLSystem(definition, 6);
const t = applyGrowthCurve(0.5, "ease-in-out"); // half-grown
const visible = filterByGrowthTime(tagged, t);

Wind Dynamics

Procedural wind simulation bends branches based on direction, strength, and Perlin noise turbulence. Supports steady breeze and intermittent gusts.

import { createWindNoise, computeWindStrength, DEFAULT_WIND_CONFIG } from "@genart-dev/plugin-plants";

const noise = createWindNoise(42);
const strength = computeWindStrength({ ...DEFAULT_WIND_CONFIG, direction: 45, strength: 0.6 }, time, noise);

Ecosystem Composition

The plants:ecosystem layer type and create_ecosystem MCP tool compose multiple species with automatic depth placement, atmospheric color grading, and arrangement patterns (scattered, clustered, row, arc).

Fruit, Bark & Veins

Detailed botanical features rendered through the style system:

  • Fruit: Apple, cherry, orange, berry, pine cone — placed at branch tips
  • Bark: Smooth, rough, peeling, plated, furrowed textures on trunks
  • Veins: Pinnate, palmate, parallel patterns on leaves

Painting Bridge (ADR 072)

Export structural geometry as path data for use with @genart-dev/plugin-painting layers:

import { structuralOutputToPathChannels } from "@genart-dev/plugin-plants";

const channels = structuralOutputToPathChannels(output, transform);
// channels.branches, channels.leaves — path data for painting layers

Segment Cache

Expensive L-system generation is cached by preset + seed + iterations key, avoiding redundant computation when only style or colors change.

Related Packages

| Package | Purpose | |---|---| | @genart-dev/core | Plugin host, layer system (dependency) | | @genart-dev/mcp-server | MCP server that surfaces plugin tools to AI agents |

Support

Questions, bugs, or feedback — [email protected] or open an issue.

License

MIT