BMA is a client-side block model inspector. Drop a CSV (or zipped CSV) exported from Isatis, Vulcan, Surpac, Leapfrog, or any other mining package and get instant summary statistics, geometry detection, and categorical breakdowns — all without uploading anything to a server.
Everything runs in your browser using streaming File API and Web Workers. Files are parsed row by row, never fully loaded into memory, so multi-gigabyte models work fine on modest hardware.
Columns are classified as numeric or categorical automatically. The preflight panel lets you override types, select coordinate axes, enable/disable columns, and set per-column value filters before analysis. Filter expressions use JavaScript syntax on row objects: r.LITO === 'BIF' && r.fe_pct > 30.
Compare a second dataset against your block model — drill-hole composites, a previous estimate, or a check run. It rides through Statistics, CDF, and Swath under its own prefix, held up beside the model. Comparison is statistical and spatial only — no geometry, export, or per-row joins.
Row object: r — mutate it to create columns: r.name = expr; (in Aux mode the row object is aux)
Access columns: r.col or r["col name"]
Math: abs sqrt pow log log10 exp min max round floor ceil PI
Helpers: cap(v, hi) · clamp(v, lo, hi) · ifnull(v, d) · ifnum(v, d) · isnum(v) · between(v, lo, hi) · remap(v, map) · fn.round(v, n)
Loops & conditionals: for, if/else, ternary — full JS
String: r.LITO.startsWith("BIF") · r.LITO.includes("x")
Type forcing: r.META.cat.push('name') force categorical · r.META.num.push('name') force numeric