Why noma
Carbon removal runs on trust. We build for it.
A removal is only as credible as the records behind it. Five principles shape every part of noma, and you can check each one yourself.
Built for
- Biochar producersProve what you produced
- Carbon and MRV managersReport with nothing missing
- VerifiersCheck any figure at its source
Every figure has a source.
In noma, any quantity can be followed back, record by record, to the feedstock it came from. With spreadsheets and paper, that trace is done by hand. Other biochar dMRV platforms trace it too, but you rent them. noma is open source and free to run on your own servers.
Principle 2: Evidence stays with the record.
Tickets, readings and photos are attached to the record they prove, not filed in a folder. A moisture reading far from its estimate, or a lab result outside the limits, is flagged as you enter it. Before you prepare a removal, noma shows what is still missing.
Illustrative records. The registry workflow is being developed against Isometric’s data model. Production submission is not available yet.
Principle 3: The math is public.
noma is open source under the MIT licence. Every calculation it runs is code you, your team or your verifier can read, run and test.
Dry masssrc/lib/calculations/mass-dry.ts
export function deriveMassDryKg( deliveredWetMassKg: number, moisturePercent: number): number { if (deliveredWetMassKg < 0) { throw new RangeError('deliveredWetMassKg must be >= 0'); } if (moisturePercent < 0 || moisturePercent > 100) { throw new RangeError('moisturePercent must be between 0 and 100'); } return roundKg(deliveredWetMassKg * (1 - moisturePercent / 100));}1,000 kg wet at 15% moisture returns 850 kg dry.Open the file
Round tripsrc/lib/calculations/round-trip.ts
/** Multiplier on a leg's one-way distance: the vehicle returns empty. */export const ROUND_TRIP_DISTANCE_FACTOR = 2;/** The distance a leg contributes to mass·distance: one way × round trip. */export function countedRoundTripKm(oneWayKm: number): number { return oneWayKm * ROUND_TRIP_DISTANCE_FACTOR;}A 30 km delivery counts 60 km.Open the file
Durable fractionsrc/lib/calculations/biochar-removal.ts
export function computeFDurable200(input: FDurable200Input): FDurable200Result { const { a, b, c } = F_DURABLE_200_COEFFICIENTS; const rounded = roundSoilTemperatureC(input.soilTemperatureC); const temperatureFloored = input.soilTemperatureC < SOIL_TEMPERATURE_FLOOR_C; const effectiveSoilTemperatureC = temperatureFloored ? SOIL_TEMPERATURE_FLOOR_C : rounded; const raw = 1 - (c + (a + b * Math.log(effectiveSoilTemperatureC)) * input.hToCorgRatio); const durabilityCapped = raw > F_DURABLE_MAX; const fDurable = Math.min(F_DURABLE_MAX, raw); return { fDurable, effectiveSoilTemperatureC, temperatureFloored, durabilityCapped };}H/C_org of 0.3 in soil at 20 °C gives an F_durable of 0.848.Open the file
CO₂e storedsrc/lib/calculations/biochar-removal.ts
export function computeCo2eStoredTonnes(input: Co2eStoredInput): number { const carbonFraction = input.organicCarbonPercent / PERCENT_DENOMINATOR; return carbonFraction * input.dryMassTonnes * input.fDurable * CO2_C_MOLAR_RATIO;}400 kg dry at 50% organic carbon and an F_durable of 0.848 stores 0.62 t CO₂e.Open the file
Principle 4: Your data stays yours.
Run noma on your own servers, or let us host it for you. It is the same open-source code either way, and your records stay yours.
| Your servers | Our hosting | |
|---|---|---|
| Code | noma, open source under MIT | |
| Database | PostgreSQL | |
| Your records | Yours. Your team decides who sees them. | |
| Who runs it | Your team or your IT partner | We do |
| Cost | No licence fee | A hosting plan |
| Setup | Install from GitHub | Nothing to install |
| Updates | You choose when | We install them |
Principle 5: Built where biochar is made.
We’re building noma with Dark Earth Carbon in Mafinga, Tanzania, around the records a working plant keeps every day.
Follow your biochar with us.
We’ll walk through the trace and the records behind it, using an example like your operation.