maali
Maali ·  the gardener

Hand your garden to someone who truly knows it.

A gardener who knows your soil by heart, reads the sky before dawn, and gives every bed exactly the drink it needs. Then asks you for nothing at all.

4:41 am Read the sky 1.42″ gone since the rain
5:00 am Watered lawn 2 35 min — it had earned it
5:35 am Went quiet Nothing you need to know
The Maali app watering the back lawn: a live card reading 'Watering the lawn 2, cycle 1 of 3, the pump is up, the master is open,' nine minutes remaining, above an animated vessel filling with water.
Watering nowthe pump is up
1.42″ usedsince the last rain
Never a billParts once. No subscription, ever.No bill
Never a loginOpen the page. It already knows you.No login
Never the cloudThe box by your valves is all of it.No cloud
Yours for goodYou own it outright. No end-of-life switch.Yours
●  You know the feeling

You wanted a garden. Not a second job.

A box on the wall keeps its own counsel. It waters by the clock, never the weather, and the yard pays for the difference.

It waters in the rain. The timer never looks up at the sky.
The corner still burns. Full sun and deep shade, watered the same.
The August bill stings. Paid for water the soil never drank.
An app to run a hose. An account, a login, a monthly fee.

None of that is gardening. It is assisting a timer.

What you wanted is older and plainer. Someone who knows your ground, reads the morning, gives the thirsty bed a long drink and the shaded one a sip, and asks for nothing back.

That is what Maali means. Gardener. Hand it the yard, and the watering stops being yours to carry.

●  The receipt

Twenty-one days of heat. It chose to water eight times.

Real Sacramento weather from July 2024, replayed through the very code that opens your valve. Watch it let the soil dry, sit out the cooler days, then decide a bed has earned a long drink.

114°Fthe hottest afternoon in the window
0.00″rain, across all twenty-one days
13 of 21days it looked at the soil and waited
8 runs356 minutes, every one with a reason
Back lawn · cool-season turf, spray, loam Sacramento · 5–25 July 2024
deficit, inches waters at 0.60″, half of the 1.20″ this soil holds 8 runs, 356 minutes total
Every day, and what it decided water left in the bed · tap a day

Tomorrow

This is not a picture we drew to look nice. It is real Sacramento weather from July 2024, the meanest stretch we have on file, replayed through the very same water_balance and schedule_engine code that opens the valve. We picked the hard week on purpose.
●  A day with Maali

No number to decode.

The app is served from the box itself, and it speaks plainly. These are its own screens, and its own words.

The beds

Every bed is a tub of water.

One glance from across the kitchen: this one is holding, that one is drinking now. The fill is the water left in the soil, nothing to read, nothing to convert.

Two garden beds shown as tubs of water. Lawn 1 is nearly full and holding; Lawn 2 is low and labelled 'Watering now.'
The week

The week is already decided.

Each run is laid out with the reason beside it. When a day is skipped, the app says which rule skipped it, in a sentence you would say yourself.

A calendar strip of the coming week with small filling-tub day cells, followed by each planned run labelled 'Watering as usual' and rest days labelled 'Not a watering day under your district's rules.'
The weather

Weather, in the unit that matters.

Not degrees and percentages, but water. Lately the sky drank 1.42 inches from the yard. That is the number the beds are measured against.

The weather page reading 'Lately the sky drank 1.42 inches from the yard,' with a row of recent days shown as sunny cards.
●  The trouble with timers

Every box asks you to give something up.

Three kinds sit on the shelf. Each solves the problem by making another.

  • The dial is faithful, but deaf.The same minutes in a heat wave and a downpour. A valve that stuck open on Tuesday is open still.
  • The smart one is clever, but not yours.Every decision routes through a cloud, paid features drift behind a plan, and the yard becomes somebody’s data.
  • The open one is yours, but hard work.Honest ownership, a decade-old feel, and a wall of settings where a sentence should be.
Maali

Nothing to give up.

  • Minds the soil, not the calendar
  • Decides at home, even with the internet out
  • Your yard, and its data, stay yours
  • Explains itself in plain sentences
●  How it thinks

A timer knows the day. Maali knows the soil.

A timer knows what day it is. Your lawn does not care what day it is. It cares how much water is left in the soil. So every bed in Maali carries a running ledger: the sun and wind and thirsty roots take water out, the rain and the sprinklers put water back. That ledger is the whole brain.

One quiet idea, and you feel it everywhere. Four hot days with the power out earn a long drink when it wakes. Four cool days with rain earn nothing at all. Nobody wrote a catch-up rule for either one. The ledger simply still knew what the soil was owed. Nothing was missed, so there is no missed-run setting to fuss over.

Maali reads the daily thirst number from a free public weather service, the same number the chart above is drawn from. During setup it looks up the actual soil under your yard from the public soil survey, and it asks what is planted in words you would use over a fence: lawn, shrubs, natives. Nobody will ask you for a crop coefficient. If the weather feed goes quiet, it waters carefully from your local averages and says so right on the screen.

And then it tells you, in a sentence. You get minutes, and a because. Never inches, never coefficients, unless you go looking. And if you do like the numbers, they are all there, honest and editable, one tap deeper. Both kinds of gardener are welcome here.

Our one house rule

If you cannot guess what your controller will do tomorrow morning, we have failed you. No pile of settings makes up for that.

sun & wind take it outthe balance is the whole brainrain & runs put it back
●  Safety

However it fails, the water stops.

A watering computer can make exactly one unforgivable mess: water that will not stop. So pick a disaster, and watch which of the four layers is still standing when it lands.

Pick a disaster
0hardware

The relay board closes the valve by itself

Every valve is switched on with a countdown that lives on the relay board. When it runs out, the board shuts the valve — no firmware, no network, not even controller power.

1supervisor

A second task watches the first

It enforces the longest a valve may ever run, and once a second asks the relays what they are really doing.

2constraints

Bad programs are refused at save time

Checked the moment you save them against run caps, watering rules, and beds that would quarrel — before they can ever run.

3safe states

Every command passes one gate

All the rules live together in one place. A rule the gate does not recognise means no, and every no is written down in plain language.

flow meter
Down the pipe, one meter learns what each bed normally drinks. Water moving when nothing was asked for means a burst line; a trickle where a gush belongs means a clogged filter or a tired valve.
Why the order matters

The layer that survives the most is the one with the least software in it. We tuned the alarms to hardly ever cry wolf, too — a false alarm that stops the water in a hot week hurts more than a small leak found a day later.

●  What you own

The whole thing lives in the little box by your valves.

That is not a slogan. The code is held to it as a rule: nothing outside your house can put water on your ground. Everything below follows from it.

No account

There is nothing to sign up for. You choose a password for the box during setup, and that is the entire ceremony.

No cloud

It makes exactly two calls out: one for the weather, one to ask if an update exists. Both optional. Nothing else ever leaves the building.

No telemetry

Your watering history, your soil, your bed names. They stay in the box. Nobody studies them, nobody bundles them, nobody sells them.

Its own web app

The whole app is served from the controller itself. No outside scripts, no borrowed fonts, nothing fetched from anywhere. It works with the internet unplugged.

Home Assistant

If you run Home Assistant, Maali introduces itself and your beds, programs, and faults all appear on their own. Entirely optional; nothing leans on it.

Your calendar

The week's waterings come as a calendar feed any calendar app can subscribe to. The lawn's drink shows up right next to soccer practice.

A real API

Plain, honest web calls over your own network. Script it, poke it, wire it into whatever you already run. It is your controller, after all.

Signed updates

New firmware is signature-checked, tried in a spare slot, and quietly rolled back if it fails to wake up properly. Nothing installs itself unless you ask it to.

Never stranded

Keep a one-file backup of your whole setup. If a board ever dies, flash a fresh off-the-shelf one from your browser and restore the file. No waiting on us, and no yard to rebuild by hand.

●  What it costs

You pay once, for parts, and then you are done paying.

The number that matters is the one you never pay again. No subscription, no per-feature tier, no cloud that has to keep running for your grass to get watered. You pay for good hardware once, and after that the only running cost is the water itself.

A store timer, over ten years $150–300 + whatever comes later
  • 01Hardware you own, running software you rent
  • 02Features that came in the box, later moved to a plan
  • 03A retirement announcement you do not get a vote on
  • 04A server somewhere that has to stay alive for your grass
Maali, eight zones, the parts that water $179
  • 01Ordinary electrical-cabinet parts, every one replaceable
  • 02Not one part needs soldering, ever
  • 03No subscription and no per-feature tier, now or later
  • 04Eight more zones costs one more relay board
LinePartUSD
0124VAC transformer, Class 2, plug-in, and a 12V brick beside it29
—ESP32-S3 controller, 8-ch Modbus relay board, antenna58
—Enclosure, rail, terminal blocks, glands, wire, labels92
Required, and it waters179
—Flow sensor, its counter module, a rain gauge, the terminals they land on72
—Surge protection, two combined-mode DIN modules102
Everything, senses and storm353

That $179 is the tier you cannot skip. Sensors add $72 and surge adds $102, which is where the $353 comes from. Surge is $102, not the $12 a parts catalogue suggests, because the cheap kind needs soldering and nothing in this build is allowed to. It is also the part that decides whether your controller shrugs off a lightning-season jolt arriving on 200 feet of buried valve wire. It is the last thing you should buy and the first thing you will be glad you did.

●  Build it

One afternoon, a screwdriver, and the wires already in your wall.

Everything lands on screw terminals. Everything clips onto one metal rail, and everything can later clip off again. No part is trapped, and no part is ours alone.

What is inside the box one DIN rail · five modules · no soldering
plug-in 24 V mains stops here THE CABINET, BY YOUR VALVES one 35 mm rail — every part clips on, every part clips off PSU 24 V dc 1 maali the whole brain esp32 · wi-fi 2 8-channel relays 3 · keeps its own countdown surge 4 5 · terminals the valves already in your garden one common, one wire per bed — unchanged The scariest wire you will touch carries 24 volts. A plug-in brick, on purpose: mains never enters the cabinet.
Every module is an off-the-shelf part with a second source listed, and the enclosure is a standard one you can buy anywhere. Nothing in here is ours alone.
The whole job, to scale 3 h 15 m
1:00 pm2:003:004:15 pm
1

Order the parts

One list, supplier links, a spare source for every line.and a note on the three choices that change the price

~30 min
2

Clip it to the rail

Power supply, controller, relays, surge, terminals. All five snap onto the one rail.no soldering, no drilling, no part trapped

~1 hr
3

Move the valve wires across

Pull the labelled wires off the old timer and land them on the new terminals.the old box comes off the wall last, once you are sure

~1 hr
4

Walk through setup

Your town, your soil, then bed by bed. Each bed runs for thirty seconds while you name it, so you watch your own sprinklers pop up as you type.a swapped pair of wires shows itself when it is still cheap to fix

~45 min
5

Stop thinking about it

Set your district’s watering days once and go live your life. It waters, it explains, it emails nobody.and if anything ever goes wrong, it tells you which rule said no

the rest
●  Where this actually is

It is on a bench, not yet in a yard. Here is the whole truth.

You are going to build this with your own hands, so you deserve the honest state of it rather than a launch page. The firmware is finished, and the safety promises have now been proven with real wires on a real bench. But it has not yet watered a real yard through a whole season, and this page will keep saying so until it has.

● Project status firmware v0.6.5 · updated 18 Sep 2026
22components
854test cases
100%branch coverage
640zone types × 4 real years
Layer 0The wires were pulled mid-run on the bench. The contact opened on schedule, at 1.1% timer tolerance.
Power lossPower cut mid-energize. The contact opened instantly and stayed open when power came back.
UpdatesA signed release downloaded, verified and installed by the device itself, then booted and self-validated.
RollbackA deliberately broken build installed itself, failed at boot, and the bootloader rolled back unaided.
EnduranceAn hour of live abuse, a thousand-plus requests, and a hard reset mid-watering. Nothing stuck, nothing leaked.
The modelEvery mix of climate, soil, plant and sprinkler replayed against four years of real California weather, through the 2022 drought and the 2023 atmospheric rivers, checking that no bed is ever drowned, starved, or asked for a run past its cap.
DocsThe build guide, the wiring pictures, and a friendly first-day walkthrough. Honestly, the longest remaining chore.In progress
A seasonA whole season on a real yard with not one drop running longer than asked. That one cannot be earned on a bench, only outdoors.Not yet
Straight with you

This is early. The firmware is finished and the safety is proven on the bench, but Maali has not yet watered a real yard through a whole season. We would rather tell you that plainly than dress it up, and this page will keep saying so until the season is behind us.

●  Come on in

A greener yard, and a smaller water bill, on your terms.

Deep, infrequent watering grows deep roots. The ledger waits after rain, splits long runs into soaks so nothing runs down the driveway, and never once asks you to log in. Everyone is happy, especially the worms.

Start with the parts list