kWh/m²·yr is an in-browser hourly building-energy model — 8,760 hours a year, computed live in your browser as you edit. It is the sister tool to W/m²·K: bring an envelope over, add a climate, and watch annual heating, cooling, and carbon respond. These are simplified educational calculations — a way to build intuition, not a compliance check or a certified rating.
How it works
Under the hood is a simple hourly thermal network — a handful of heat-flow resistances (through the opaque envelope, the windows, the thermal bridges, and the air changes) wrapped around a single heat store for the building's thermal mass. Every hour it balances the heat leaving through that network against the heat arriving from the sun through the glazing and from people, lights, and equipment inside, then works out how much heating or cooling the systems must add to hold your comfort setpoints. Repeat 8,760 times and you have a year.
Nothing is uploaded and nothing is stored on a server — the weather file, the engine, and every number stay in your browser. The model is deliberately a single zone: the whole building is averaged into one temperature. That keeps it fast and legible, and it is honest about what it can and can't say (see below).
Take a 100 m² wall at U = 0.30 W/m²·K. Its heat-loss coefficient is
UA = 0.30 × 100 = 30 W/K
If it's 20 °C inside and 0 °C outside, that wall loses
30 × (20 − 0) = 600 W → over one hour, 0.6 kWh
The engine does exactly this for every surface, window, thermal bridge, and air-change path — every hour — while adding the solar gain through the glazing and the internal gains from occupancy, then letting the thermal mass delay and smooth the response. Summed across the year and divided by the floor area, that becomes your kWh/m²·yr.
Shown in SI. The whole app flips to IP (kBtu/ft²·yr, °F) with the SI / IP toggle in the header.
The workflow
What this is — and isn't
- Educational, not certified. These are simplified calculations for learning and early-design intuition — never a compliance demonstration, energy rating, or a substitute for a full dynamic simulation.
- One zone. The whole building is a single averaged temperature, so room-by-room differences and local overheating are invisible here.
- Typical weather. A typical-year climate shows how a building behaves on average; a specific dropped EPW reflects that one year, not a long-run norm.
- Simplified physics. Ground floors are treated against outside air and the thermal-mass model is coarse — results are indicative, and comparisons between designs are more trustworthy than any single absolute number.
Drop an .epw file here, or choose one — it’s parsed entirely in your browser, nothing is uploaded.
Opaque surfaces, windows, and linear and point thermal bridges, plus the floor area and volume of the modeled zone. Together they set the envelope's total heat-loss coefficient (UA) that feeds the hourly simulation — windows also carry the solar gain that drives cooling and free heating. Airtightness / shelter / thermal-mass tiers, and importing a W/m²·K file, arrive in later work packages — see the note below.
Opaque surfaces
Windows
Rough-opening area and U-value set the window's heat loss (Uw); frame fraction nets the opaque frame out of the glazed area used for solar gain. Orientation determines how much sun each window sees through the year.
Movable shading is used by the simulation: a window marked movable gets its solar gain cut by the shading factor above once the seasonal threshold set on the Comfort tab engages. Overhang projection is captured here but not yet used — there's no geometry model for cast shadows yet.
Linear thermal bridges (ψ · length)
Point thermal bridges (χ · count)
Airtightness, shelter & thermal mass
Quality-word tiers standing in for the detailing that actually determines these numbers — pick the word that matches the build, the implied value is what feeds the simulation.
Import from W/m²·K
Load an envelope or window file exported from the sister app — surfaces, bridges, and windows are added to this envelope below. A project file (several saved constructions) shows a picker so you choose which ones to bring in.
Sketch the building footprint in plan and give each volume a height. The drawing derives a floor area and volume below.
Total floor area, total volume, walls (grouped by orientation), roof, floor and windows are written into the Envelope Table when you press Build areas — the Table stays the source of truth, so edits there survive until you build again. Building replaces the Table’s surfaces and windows. Plan up is North — use the North control for a building drawn off-north. Grid: 0.5 m.
People
Paint each hour of a typical weekday and a typical weekend day 0 / 50 / 100% occupied. Drag across cells to paint a run — mouse or touch. The two rows are independent; every week of the simulated year repeats this same pattern.
Hot-water draw scales with occupant count and the schedule above; a storage tank — and, if present, a recirculation loop — also loses a little heat around the clock, whether or not anyone is drawing water.
Default 45 L/person·day sits centrally inside published field-study ranges (≈20–65 L/person·day across different metering conventions) — see the DHW method doc for the full source comparison.
How well insulated the hot-water tank is — a leakier tank loses more heat to standby, all day, regardless of use.
Adds a flat, always-on loop loss on top of the tank's own standby loss — a small pump keeping hot water ready at distant fixtures instead of running the tap until it warms up.
How air moves through the building, hour by hour: a fan system that trades stale air for fresh, an optional heat-recovery step that reclaims some of that exchange's warmth, and the passive habit of opening windows or airing the building out overnight.
A fan system that steadily swaps indoor air for outdoor air, sized either by occupant count alone or by floor area plus occupants — two common, generic ways to size a ventilation rate. "Off" means the building relies only on natural leakage through the envelope.
Share of the outgoing stale air's heat that's captured and given back to the incoming fresh air. Capped at 90%: even good real installations lose some of their catalogue rating to duct losses, imbalance, and defrost cycles, so 90% is already a generous ceiling for what a system actually delivers. Has no effect while mechanical ventilation is "Off".
Normally the incoming fresh air is treated as outdoor air, tempered by the heat-recovery share above. If your ventilation air instead passes through something that delivers it at a known, fixed temperature — a pre-heating coil, a buried supply pipe, a stated system setpoint — enter that temperature here. It replaces the heat-recovery calculation above rather than adding to it, so warmth isn't counted twice.
Extra outdoor air let in through open windows when it helps — never colder outside than the low limit below, and only once the indoors has warmed past the high limit. Pauses automatically whenever a mechanical cooling system is configured, so open windows are never modeled fighting the air conditioning.
A scheduled overnight airflow boost, running only while it's actually cooler outside than in, that stops once the indoor air has cooled to the target below.
The indoor temperatures the simulation heats and cools to hold, and an optional overnight/away relaxation that widens the target band on a schedule to save energy while nobody would notice.
Below the heating setpoint the simulation adds heat; above the cooling setpoint it adds cooling. Between the two, the building free-floats with no added energy.
A relaxed pair of setpoints that applies automatically during the scheduled hours below — heating is allowed to drift lower, cooling is allowed to drift higher, cutting energy use while the building is asleep or empty.
An end hour before the start hour (e.g. 23 → 6) crosses midnight — the setback stays active overnight. Setting start and end to the same hour turns the setback off entirely.
Air movement lets the space feel comfortable a bit warmer, so the cooling setpoint relaxes by the offset below whenever the space is occupied — but the fans themselves draw power and add a little heat, so a small envelope with a generous offset can occasionally see cooling energy go up rather than down. That's a real physical tradeoff, not a bug.
Which windows have movable shading (blinds, shutters, awnings) is set per-window on the Envelope tab. This sets when that shading engages for the year: once yesterday's average outdoor temperature crossed the threshold below, a "summer is here" heuristic — it disengages again once outdoor temperatures drop back below it.
How much carbon each unit of purchased energy carries — this depends on where the electricity grid gets its power and what heats the gas supply. Pick a starting point, then fine-tune either number.
Annual and monthly energy by end use, and the carbon that comes with it — computed live from every other tab. These are simplified educational estimates, not a certified rating.
Every hour of the simulated year as a line you can zoom and scrub. Drag to pan; hover or use the arrow keys to read the exact value at any hour. These are simplified educational estimates, not a certified rating.
Enter your own twelve months of metered energy, per fuel, and compare them against what the model predicts. Values are converted from your bill's units to kWh using documented factors — helpful for a reality check, but these remain simplified educational estimates, not a certified rating.
Add one entry per fuel you're billed for, then type each month's usage in the units printed on that bill. Electricity compares against the model's electric total; combustion fuels (gas, oil, propane) compare against the model's delivered heat.
Search for the combination of airtightness, internal gains, and envelope heat loss that best reproduces your bills — a way to ask “what would my building have to be like for the model to match?”. This only suggests a diagnosis; it never changes your inputs.
Save the current model to this browser for quick recall later, group saves into projects, or export/import a whole model as a file to share or back up. Library saves live only in this browser — clearing site data removes them. The current model also autosaves as you work and restores automatically next time you open the app.
Save the whole model to a JSON file — to share it or back it up outside the browser — or load one back. A real W/m²·K export loads through the import stub rather than erroring.