maali

Your yard deserves a gardener, not an alarm clock.

Maali is a small watering computer you build once and keep forever. It lives beside your valves, watches your weather, and waters each bed only when the soil is truly getting thirsty. Then it tells you what it did, in plain words.

Nothing phones home No monthly anything No account to make About $307 in parts
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
  The idea, in one chart

It keeps a running ledger of the water in your soil.

Here is a real, brutal stretch of Sacramento weather, watered by the very code that opens the valve. Watch the deficit climb as the sun pulls water out, and drop each time Maali decides a bed has earned a drink. No calendar. Just the soil.

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 6.38" of thirst in 21 days · 0" of rain
Verdict

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

The whole yard, at a glance, in plain English.

This is the real app, served from the little box itself. No dashboard to learn. Each bed is a tub of water you can read across the kitchen, and every decision comes with a because.

The beds, told as tubsOne glance says who is holding water and who is drinking now.
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 aheadEvery run, and why. Skips say which rule.
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.'
What the sky didThe weather in the units that matter: water.
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 at the store asks you to give something up.

You have probably stood in that aisle already, which may be why you are here. Here is the honest shape of the choice, with no hard feelings toward any of them.

Dial controllers

Faithful, but deaf

  • Runs the same minutes in a heat wave and in a storm
  • Cannot tell you how much water you used
  • A valve that stuck open on Tuesday is still open
Smart controllers

Clever, but not yours

  • Every watering decision takes a trip through somebody's cloud
  • When their servers have a bad day, so does your lawn
  • Features you bought have a way of moving behind a plan
  • Your yard quietly becomes somebody's data
Open source, so far

Yours, but hard work

  • Honest ownership, with the charm of a decade ago
  • A wall of settings where a sentence should be
  • You are expected to enjoy the fiddling
Maali

Why choose?

  • Smart: it minds your soil, not the calendar
  • Local: it decides at home, even with the internet out
  • Private: your yard, and its data, stay yours
  • Kind: it 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.

  Safety

Four layers stop the water. The first one is not software.

A watering computer can make exactly one unforgivable mess: water that will not stop. So the promise that matters most here is the one that keeps working when the software has lost its wits entirely.

0hardware

The relay board closes the valve by itself

Every valve is switched on with a countdown that lives on the relay board itself. When the countdown runs out, the board shuts the valve on its own. No firmware, no network, not even controller power is needed for that to happen.

Survives A dead processor. A cut ethernet. A yanked power supply.
1supervisor

A second task watches the first

A second, stubborn little task keeps its own watch. It enforces the longest a valve may ever run, and once a second it asks the relays what they are really doing and raises a fuss if the answer does not match.

Survives Application bugs. A hung scheduler.
2constraints

Bad programs are refused at save time

Programs are checked the moment you save them, against run caps, watering rules, and beds that would quarrel. A thirsty ledger can never talk anybody into a run longer than the ceiling.

Survives Configuration mistakes. Fat fingers.
3safe states

All commands pass through one gate

Every command walks through one gate, where all the safety rules live together in one place. A rule the gate does not recognise means no. And every no is written in the daybook with its reason, in plain language, for you to read.

Survives Everything we thought of, and the shape of what we didn't.

Down the pipe, one flow meter learns what each bed normally drinks. Water moving when nothing was asked for, or far too much of it, means a burst line: everything locks shut and you are told. A trickle where a gush belongs means a clogged filter or a tired valve. We tuned those alarms to hardly ever cry wolf, because 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.

  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, ordered once ~$307
  • 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-in20
0212V DIN supply12
ESP32-S3 controller, 8-ch Modbus relay board, enclosure, terminals213
17Surge protection, three-point, DIN modules42
20Modbus pulse counter for the flow sensor20
Order-now total307

The surge protection costs $42 instead of $12 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. Worth every penny of the thirty.

  Build it

It takes an afternoon, a screwdriver, and the wires already in your wall.

If you have ever swapped a light fixture or built a computer, you can do this with a cup of tea beside you. Everything lands on screw terminals. The house current never enters the cabinet at all: the transformer is a plug-in brick, on purpose, so the scariest wire you will touch carries 24 volts.

1

Order the parts

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

~30 min
2

Clip it to the rail

Power supply, controller, relay board, surge modules, terminals. Everything clips onto one metal rail, and everything can later clip off again. No part is trapped.

~1 hr
3

Move the valve wires across

Pull the labelled wires off the old timer and land them on the new terminals. One common, one per bed. 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 see your own sprinklers pop up as you type. A swapped pair of wires shows itself at the one moment it is 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. If anything ever goes wrong, it tells you which rule said no and why.

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.2.1 · updated 2 Sep 2026
22components
762test 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