{#- About Zakat & Methodology. Deliberately a Jinja template rather than a string inside JavaScript or Python, so the educational content stays reviewable in diffs and testable by the template checks in tests/test_templates.py. Facts that are universally agreed are stated as such. Everything this tool *chooses* -- above all the layered pro-rata model -- is labelled as a choice. -#}
Zakat is the obligatory annual charitable due on qualifying wealth, one of the five pillars of Islam. It is a transfer of a defined share of accumulated wealth to defined categories of recipients, not a voluntary donation and not a tax on income. The Qur’an pairs it repeatedly with prayer (for example al-Baqarah 2:110) and sets out its recipients in al-Tawbah 9:60.
| Quantity | Value | Status |
|---|---|---|
| Zakat rate | {{ ctx.constants.rate }} (one fortieth) | Universally agreed |
| Hawl | one complete lunar year | Universally agreed |
| Gold nisab | {{ ctx.constants.gold_grams }} g = {{ ctx.constants.gold_tola }} tola | Common standard; gram figure varies by institution |
| Silver nisab | {{ ctx.constants.silver_grams }} g = {{ ctx.constants.silver_tola }} tola | Common standard; gram figure varies by institution |
| Tola | {{ ctx.constants.tola_grams }} g | Definition used here, consistent across both weights |
| Mean lunar year | {{ ctx.constants.lunar_year_days }} days | Calculation constant — see Methodology step 6 |
The nisab is classically given either as a weight of gold or as a weight of silver. Because the metals have diverged enormously in relative price since those weights were set, the two thresholds are now very far apart — in this ledger, {{ m(gold.nisab) }} against {{ m(silver.nisab) }}.
This extension therefore computes both, completely independently, from the same wealth history, and presents them side by side. It does not pick one for you, and the two figures must never be added together. The silver basis is lower, so it captures more people and yields a larger liability; the gold basis is higher and yields a smaller one. Both positions are held by recognised scholarship, and which applies to you depends on your madhab and your own scholar’s guidance.
Read this section carefully. The layered, pro-rata model below is this tool’s method for reconstructing historical liability from a ledger. It is not a standard scholarly formula, and most zakat guidance instead has you value your wealth once a year on your zakat anniversary and pay 2.5% of that. See Limitations.
Open directive take part — as an asset,
a liability, or an expense (zakat payments).
Classification is exact: sub-accounts are not pulled in automatically.sum(assets) + sum(liabilities). Liabilities keep their natural
negative Beancount sign, so a debt reduces wealth by simple addition.price directives in your own ledger. A day with no price of its
own reuses the last known price. If no price exists at or before a
date, the nisab is unknown and the report says so loudly — it is never
quietly treated as zero.(end − start) + 1, converted to lunar years by dividing by
{{ ctx.constants.lunar_year_days }} days.zakat_due = marginal_amount × elapsed_lunar_years × {{ ctx.constants.rate }}
The stated position of this tool: the hawl is the condition that makes wealth zakatable — wealth must sit at or above the nisab for one complete lunar year before anything is owed on it — and not a restriction limiting liability to whole years. Once that condition is met, liability accrues in proportion to the time the wealth has been held. A slice held 3.34 lunar years is therefore charged 8.35% of that slice, not 7.5% for three completed anniversaries.
This is a deliberate interpretive choice, and it is the single point on which this tool most clearly differs from the common practice of valuing wealth once a year on a fixed anniversary and paying 2.5% of that figure. It is well suited to paying accumulated zakat in Ramadan across however many years are outstanding. Raise the method itself with your scholar, not only the numbers. Year-by-year figures are on the Yearly Summary tab.
Every amount is computed in exact decimal arithmetic — never binary floating point. Each period’s zakat is rounded to {{ cur }} 0.01 using round-half-up at the moment it is computed; those rounded figures are what get summed. Only chart pixel coordinates are ever converted to floating point.
A reporting year on the Yearly Summary tab is a Hijri calendar year, 1 Muharram to the day before the next 1 Muharram, with exact Gregorian bounds from the Umm al-Qura calendar. A qualifying period that spans several years has its liability split across them pro rata by overlapping days, with the rounding residual placed on the period’s final year. The rows therefore sum to the cumulative total exactly; this is enforced by an automated test.
Two different notions of “lunar year” are deliberately kept apart. The calculation uses only the mean lunar-year length of {{ ctx.constants.lunar_year_days }} days — pure arithmetic on day counts. The Umm al-Qura calendar is used only to label reporting years and show their Gregorian ranges. The choice of calendar library therefore cannot change a zakat amount. Exact conversion is supported for Hijri years 1343–1500 (1924-08-01 to 2077-11-16); a date outside that range is refused rather than silently approximated.
as of dateThe report cutoff is {{ report.as_of }}{% if ctx.filter_active %}, taken from Fava’s time filter{% else %}, which is today{% endif %}. Setting Fava’s time filter changes the cutoff: a filter ending 2026-10-01 gives you the position as at 2026-10-01. The filter moves the end only — the timeline always starts at inception, because hawl has to be measured from when wealth was actually acquired.
Two consequences matter. First, nothing dated after the cutoff can affect the result, so a forward-dated entry cannot inflate today’s figure. Second, your final balances are carried forward to the cutoff and keep accruing hawl even if your ledger has had no entry for years — a quiet ledger is not a zakat-free ledger.
2020-01-01 open Assets:Bank:Savings {{ cur }}
beancount_zakat: "asset"
2020-01-01 open Liabilities:Loan-Payable {{ cur }}
beancount_zakat: "liability"
2020-01-01 open Expenses:Donations:Zakat {{ cur }}
beancount_zakat: "expense"
Metadata anywhere in your ledger tree works, including inside
included files. Untagged accounts are ignored entirely, which is how
you exclude personal-use assets such as a home or a car.
2026-01-01 price GLDTOLA 280000.00 {{ cur }}
2026-01-01 price SLVTOLA 3300.00 {{ cur }}
GLDTOLA and SLVTOLA are understood out of the box as a
price per tola. To quote per gram, or to use different symbols, declare
them explicitly — being unambiguous about the unit is required:
2020-01-01 custom "fava-extension" "beancount_zakat.fava_extension" "{
'metal_commodities': {'XAUGRAM': ['gold', 'gram'],
'XAGGRAM': ['silver', 'gram']},
}"
Other options: zakat_rate (write it as '2.5%' or
0.025), gold_nisab_grams,
silver_nisab_grams, price_staleness_days.
liability and nothing else.
Scholars differ sharply on long-term debt, mortgages and future instalments.
Tagging is where that judgement is expressed.Cited for the factual and religious claims above. The methodology in the previous section is not drawn from these sources — it is this software’s own construction, as stated. Web sources retrieved 2026-08-19.
This tool is for informational and record-keeping purposes only. Zakat rulings can vary by school of jurisprudence, asset type, debt treatment, personal circumstances, locality, and scholar. The software may contain errors and does not constitute religious, legal, tax, accounting, or financial advice. Verify the inputs and calculations and consult a qualified Islamic scholar and appropriate professional before acting.