Accessory Dwelling Unit Size Limit Calculator
ANA›Life Services Authority›National Calculator Authority›Accessory Dwelling Unit Size Limit Calculator
.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }
Accessory Dwelling Unit Size Limit Calculator
Estimate the maximum allowable size of an Accessory Dwelling Unit (ADU) based on your primary dwelling size, lot size, and common regulatory standards.
Primary Dwelling Size (sq ft)
Lot Size (sq ft)
ADU Type
Detached ADU Attached ADU Junior ADU (JADU)
Jurisdiction Standard
California (AB 68 / AB 881) Oregon Statewide Washington State General / Model Code
Current Lot Coverage by Existing Structures (%)
Calculate ADU Size Limit
function accCalc() { var resultDiv = document.getElementById('acc-result'); resultDiv.style.display = 'block'; resultDiv.className = 'calc-result';
var primarySqft = parseFloat(document.getElementById('acc-primary-sqft').value); var lotSqft = parseFloat(document.getElementById('acc-lot-sqft').value); var aduType = document.getElementById('acc-adu-type').value; var jurisdiction = document.getElementById('acc-jurisdiction').value; var lotCoveragePct= parseFloat(document.getElementById('acc-lot-coverage').value);
// --- Validation --- var errors = []; if (isNaN(primarySqft) || primarySqft 80) errors.push("Current lot coverage must be between 0% and 80%."); if (lotCoveragePct >= 60) errors.push("Existing lot coverage of 60% or more typically leaves insufficient room for an ADU.");
if (errors.length > 0) { resultDiv.className = 'calc-result calc-error'; resultDiv.innerHTML = 'Please fix the following errors:' + errors.map(function(e){ return ''; }).join('') + ''; return; }
// --------------------------------------------------------------- // CORE FORMULAS // --------------------------------------------------------------- // 1. Percentage-of-primary cap (varies by jurisdiction & type) // 2. Absolute maximum cap (varies by jurisdiction & type) // 3. Lot-coverage-based cap // 4. Final limit = min(percentage cap, absolute cap, coverage cap) // ---------------------------------------------------------------
var pctCap, absCap, coverageMaxPct, absoluteFloor;
if (aduType === 'junior') { // JADUs are carved from existing primary structure pctCap = 0.50 * primarySqft; // 50% of primary absCap = 500; // universal JADU cap (CA AB 68) coverageMaxPct = 0; // no new footprint absoluteFloor = 150; } else if (aduType === 'attached') { if (jurisdiction === 'california') { pctCap = 0.50 * primarySqft; absCap = 1200; coverageMaxPct = 0.50; absoluteFloor = 150; } else if (jurisdiction === 'oregon') { pctCap = 0.75 * primarySqft; absCap = 900; coverageMaxPct = 0.45; absoluteFloor = 200; } else if (jurisdiction === 'washington') { pctCap = 0.40 * primarySqft; absCap = 1000; coverageMaxPct = 0.45; absoluteFloor = 200; } else { // General / Model Code (IRC-based guidance) pctCap = 0.35 * primarySqft; absCap = 1000; coverageMaxPct = 0.40; absoluteFloor = 150; } } else { // Detached ADU if (jurisdiction === 'california') { pctCap = 0.50 * primarySqft; absCap = 1200; coverageMaxPct = 0.50; absoluteFloor = 150; } else if (jurisdiction === 'oregon') { pctCap = 0.75 * primarySqft; absCap = 900; coverageMaxPct = 0.45; absoluteFloor = 200; } else if (jurisdiction === 'washington') { pctCap = 0.50 * primarySqft; absCap = 1000; coverageMaxPct = 0.45; absoluteFloor = 200; } else { pctCap = 0.35 * primarySqft; absCap = 1000; coverageMaxPct = 0.40; absoluteFloor = 150; } }
// Lot-coverage cap: remaining buildable area // remainingCoverageAllowed = (coverageMaxPct - currentCoverageFraction) * lotSqft var currentCoverageFraction = lotCoveragePct / 100; var coverageCap; if (aduType === 'junior') { coverageCap = Infinity; // no new footprint for JADU } else { var remainingCoverage = (coverageMaxPct - currentCoverageFraction) * lotSqft; coverageCap = Math.max(0, remainingCoverage); }
// Final limit = min of all three caps, but at least absoluteFloor if coverage allows var limitFromPct = Math.round(pctCap); var limitFromAbs = absCap; var limitFromCoverage = (coverageCap === Infinity) ? Infinity : Math.round(coverageCap);
var finalLimit = Math.min(limitFromPct, limitFromAbs, limitFromCoverage);
// Enforce absolute floor only if coverage allows it if (finalLimit = absoluteFloor) { finalLimit = absoluteFloor; }
var feasible = finalLimit >= absoluteFloor && (coverageCap === Infinity || coverageCap >= absoluteFloor);
// --------------------------------------------------------------- // Build output // --------------------------------------------------------------- var jurisdictionLabel = { california: 'California (AB 68 / AB 881)', oregon: 'Oregon Statewide', washington: 'Washington State', general: 'General / Model Code' }[jurisdiction];
var typeLabel = { detached: 'Detached ADU', attached: 'Attached ADU', junior: 'Junior ADU (JADU)' }[aduType];
- var coverageNote = (aduType === 'junior')
- ? 'N/A (no new footprint)'
- (coverageCap === Infinity ? 'Unlimited' : coverageCap.toLocaleString() + ' sq ft');
if (!feasible) { resultDiv.className = 'calc-result calc-error'; resultDiv.innerHTML = '⚠ ADU May Not Be Feasible' + 'Based on your current lot coverage and the selected jurisdiction, there may not be enough remaining buildable area to construct an ADU meeting the minimum size of ' + absoluteFloor + ' sq ft.
' + 'Consider reducing existing structures, consulting a local planner, or exploring a Junior ADU option.
'; return; }
resultDiv.innerHTML = '### ✓ Estimated ADU Size Limit ' + '' + 'ADU Type' + typeLabel + '' + 'Jurisdiction' + jurisdictionLabel + '' + '% of Primary Cap' + limitFromPct.toLocaleString() + ' sq ft' + 'Absolute Maximum Cap' + limitFromAbs.toLocaleString() + ' sq ft' + 'Lot Coverage Cap' + coverageNote + '' + '▶ Maximum ADU Size' + finalLimit.toLocaleString() + ' sq ft' + '' + 'ⓘ This is an estimate. Always verify with your local planning department before designing or permitting an ADU.
'; }
#### Formulas Used
Step 1 — Percentage-of-Primary Cap: Cap₁ = Primary Dwelling Size (sq ft) × Percentage Factor Percentage factors: Detached/Attached: 35%–75% | JADU: 50% (jurisdiction-dependent)
Step 2 — Absolute Maximum Cap: Cap₂ = Jurisdiction & Type Absolute Limit Ranges from 500 sq ft (JADU) to 1,200 sq ft (CA Detached/Attached)
Step 3 — Lot Coverage Cap: Cap₃ = (Max Coverage % − Current Coverage %) × Lot Size (sq ft) Max coverage: 40%–50% depending on jurisdiction and type
Step 4 — Final Limit: ADU Size Limit = min(Cap₁, Cap₂, Cap₃) Subject to an absolute minimum floor (150–200 sq ft)
#### Assumptions & References
- California limits based on AB 68, AB 881, AB 3182 (effective 2020) and AB 2221 / SB 897 (2023): detached/attached ADUs up to 1,200 sq ft; JADUs up to 500 sq ft.
- Oregon limits based on HB 2001 (2019) statewide ADU mandate: up to 900 sq ft or 75% of primary, whichever is less.
- Washington limits based on HB 1337 (2023): up to 1,000 sq ft or 50% of primary dwelling.
More Calculators
- Painting Labor Cost Calculator
- Paint Thinner Ratio Calculator
- Online Privacy Exposure Score Calculator
- Resident-to-Staff Ratio Calculator
- Number of Coats and Drying Time Calculator
- Child Screen Time Safety Calculator
- Spray Gun CFM and Air Compressor Sizing Calculator
- Weed Control & Herbicide Dosage Calculator
- Lawn Mowing Frequency Calculator
- Lawn Aeration Schedule Calculator
- Class Action Settlement Per-Member Payout Estimator
- Contingency Fee vs. Hourly Fee Cost Comparator
Read Next
Contingency Fee Vs Hourly Fee Cost Comparator ANA › Life Services Authority › National Calculator Authority › Contingency Fee vs.
Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...