You don't ink the hatch. You write the rules that decide how each patch of ground gets marked —
then let soil, water, drought, roots and time re-draw the plan, year over year. The drawing becomes a diagram of
process, and you can plot it out as clean vector linework.
Prototype · standalone · a grammar that turns ecology into marks
Painting the ground — click and drag to lay conditions. Switch to Grammar or Time to watch it draw.
Year 0
▦ Sequence plate — lay a run of years out on a page
Years
Page
Margins
Captions
🎹 MIDI control
Plug in your controller (e.g. an Akai MPD24) and hit Enable MIDI. Then hit Learn, click any slider on this page to arm it, and move a knob or fader to bind it — after that the control drives that slider hands-free. Bindings are saved on this device.
The stand — which colour is which plant
Read this as a convention, not a truth. The map from ground → mark is
a graphic argument you author — two designers will draw the same site differently and both can be right. The stand
under the drawing is an individual-based succession model: real trees competing for light, dying and seeding in.
v2 adds within-species evolution: a seedling inherits its parent's realized traits with a little mutation, and because
only well-matched stems survive to seed, lineages slowly adapt to their microsite — plus species now act on one another
(self-thinning by conspecific check, chemical allelopathy, and niche partitioning). This is a genuine selection-plus-inheritance
loop, but still a stylized teaching model with a small illustrative species pool and hand-tuned strengths — the numbers are
plausible, not calibrated. Every parameter is editable, so you author the model — you don't read data. The "moisture bleed",
"mycelium web" and materials are graphic devices you paint and choose, not simulations of hydrology or fungal growth.
Grove teaches representation and stylized ecology; it certifies neither.
Data source: there is none external — the site and mix are what you set, the stand is the model above, and
water/soil/mycelium/marks are drawn. See Method, algorithms & sources below for exactly how every stem and mark is made.
Lay the ground
Pick a brush, then paint the plan. The faint underlay shows the conditions you've laid; the drawing
reads them.
Community
Soil
Overlay
Scenes
The grammar — ground → mark
Ink & boldness
Push the whole drawing from delicate to full graphic boldness. These scale every mark at once; each rule still has its own controls below.
The deck — ground → mark
Each rule turns one ground signal into a family of marks. Toggle them, tweak them, watch the sheet re-ink. The legend under the drawing is generated straight from this deck.
Time & disturbance
Data source
Horizon & drought
Drought window
A drought drops moisture site-wide for a spell — the hatch thins and gaps open, then it recovers.
Ink
Sheet, tiles & the living model
Page shape
Presets set the aspect; type exact pixels for a specific sheet. The drawing re-fits and every mark redraws to the new page — the sheet is exactly the pixels you type (240–2400), never rounded to a whole number of tiles.
Print plate (export size)
A print is a scale, not a bigger sheet. Compose at a screen-sized sheet; the plate renders that same drawing at exact print pixels, so every mark keeps its physical size on paper. (A literal 3900 × 5700 working sheet would put ~40× more stipple on screen and crawl.) Picking a plate re-shapes the sheet to its aspect, so what you compose is what prints.
Tile density
How fine the conditions grid (and every mask edge) is: smaller cells = denser, more detailed tiling; larger = coarser and faster. Image-fill tile SIZE is set per rule in Grammar.
Living model — layers react to each other
On: the canopy shades and crowds out the pioneers beneath it, moisture and mycelium bleed cell-to-cell, and clearings close in from their edges. Off: each cell grows on its own clock.
Underlay overlay
Tint the sheet by which layer dominates each cell, or by moisture, to read the growth — a diagnostic wash under the ink.
Method, algorithms & data sources
The pipeline. A grid of cells (sized from the Sheet — page shape × grid resolution, square by default) holds the conditions you paint (community · soil · water · mycelium). Each year the reactive model steps the grid forward and produces five per-cell driver values — bare, pioneer, thicket (mid), canopy, moisture. The grammar maps each driver to a mark family (vector marks or an image fill). One geometry pass emits abstract primitives (dots · segments · paths · masked textures); two backends draw them — Canvas2D for the live scrub, SVG on export — so the plot always matches the screen.
The algorithms.
Reactive succession (default) — the grid is stepped one year at a time and the layers react to each other, echoing Wilding's individual-based rules on cells: canopy casts shade (light = e−k·canopy, blurred over neighbours) that suppresses the pioneer + bare layer beneath, so pioneers give way; moisture = soil + water-proximity − drought + canopy-retention, then a diffusion pass bleeds dryness cell-to-cell; vegetation colonises from vegetated edges so a clearing closes inward; mycelium diffuses into vegetated neighbours and buffers drought. Deterministic (seeded). Turn Sheet → Reactive off to fall back to each cell on its own clock: a von-Bertalanffy saturating curve cover(t)=cap·(1−e−(t+off)/τ). Stylized teaching model, not the Wilding sim itself.
Image fills — a texture rule tiles a chosen graphic (the Graphic Textures library), keyed so its black marks become ink and its white ground goes transparent, then masked to where its driver is present so it grows in with the years. One primitive per rule; the SVG export embeds the tile as a data-URI <pattern> + a per-cell <mask>, so the plate matches the screen.
Water distance — a multi-source breadth-first flood-fill (BFS) from painted water cells; near-water ground is wetted by an exponential decay of that distance.
Stipple / poché — points on a fixed jittered lattice, kept when the driver exceeds each point's stored random threshold (a Poisson-disk-like fill that grows as the driver rises, never re-scatters). Poché uses big overlapping filled disks above a threshold → a solid mass with an organic edge.
Line hatch & cross-hatch — parallel lines swept across the sheet, each clipped to the canvas (Liang–Barsky) and broken into segments where the driver is present, with per-line angle jitter + a sine wobble so it reads hand-drawn, not like graph paper. Cross-hatch is two passes at ~78°.
Flicks & crossed dashes — short oriented strokes on the lattice; riparian band = shore-parallel ticks whose direction is the gradient of the water-distance field.
Mycelium web — the space-colonisation algorithm (Runions et al. 2007): filaments grow from painted mycelium cells toward vegetated attractors, branching and thickening with the years.
Randomness — a seeded mulberry32 PRNG + hash-based value jitter, so every drawing is deterministic and reproducible.
Data sources. None external — this is a designer-authored, stylized model: the ground is what you paint, the succession is the schedule above (illustrative teaching values, not cited ecology), and water/soil/mycelium are drawn, not sensed. The only way to bring in real(er) data is Time → Data source → import a Wilding mosaic — and that is itself Wilding's illustrative ecological-selection model. Nothing here should be read as certified ecology or hydrology.
engine self-tests: …
Hatchling — prototype · standalone · zero dependencies. Sibling of Wilding: Wilding simulates what grows;
Hatchling represents how we draw what grows. A later build can feed Wilding's succession mosaic straight into this
grammar. Engine written as pure modules (fields · grammar · render · verify) that map 1:1 to a platform port.