SMRFORGE

Reactor-physics evidence

A simulation output is a claim. A reviewer has to be able to check it.

Reactor physics
you can prove.

Your physicists own the physics. SMRFORGE seals every result they produce as an evidence bundle anyone can verify offline and re-derive from scratch on the free, open engine. When a number was built from another sealed result, it says so by hash, and a reviewer walks the whole derivation. We don’t compute your reactor; we make its numbers checkable.

Not “trust us.” Check us.

Engagements are open now. The Community engine is open source (MIT) and available today; Pro, the assurance layer, is in commercial beta. The physics is free and stays free.

Illustrative. The IAEA-2D closure is code verification against a published reference, not validation against a measured experiment. The seal proves custody, not correctness.

How you check it

Three ways to catch us. All on your machine.

Integrity is one command. Re-deriving the number is a deeper one. Walking a derivation is a third. None needs a network, and none trusts us.

$ smrforge verify <bundle>

Verify offline

A standalone checker confirms the record is intact, complete and signed, and it imports none of our physics, so a pass isn’t us grading our own work. The in-browser version is a from-scratch RFC 8032 Ed25519 verifier with no crypto library behind it. Run it on a real bundle.

$ smrforge reproduce <bundle>

Reproduce the number

A signature can’t catch a signed lie. This re-runs the open engine on the bundle’s own recorded inputs and checks the number comes back: exact for deterministic solvers, within the sealed band for Monte Carlo.

$ smrforge verify --chain <bundle> --from <dir>

Walk the derivation

A result built from another sealed result cites it by content hash. The walker checks every link offline, from the upstream constants to the final number, with the upstream bundles you hand it. Custody, end to end.

Sealed cross-bundle chaining

A number that remembers where it came from.

Every bundle pins its inputs and outputs by SHA-256, names the nuclear data it read by content hash, and seals the toolchain that minted it, machine and solver. When one sealed result feeds the next, the downstream bundle binds the upstream by hash in a sealed derived_from link. Alter anything upstream and the chain breaks where it was altered.

illustrative · air-gapped walk
$ smrforge verify --chain nodal.bundle.json --from ./upstream
root     nodal.bundle.json              integrity ok  signature ok
link 1   homogenization  sha-256 3b9f…  verified      consumed few_group matches
chain    verified · 1 link · no unresolved upstreams
note     custody, not correctness · fidelity: screening · advisory

A link carries facts, never a verdict.

The sealed link holds digests of what was consumed. Whether the chain is sound is decided by the verifier that walks it, on your machine, every time. No bundle gets to grade its own upstream.

Re-run the cheap step, not the whole pipeline.

With the upstream constants sealed and verified, a reviewer can re-derive the deterministic step on them directly, without repeating the expensive calculation that produced them.

Binding, not decoration.

The consumed value sits in the downstream bundle’s own sealed inputs and is pinned to the upstream seal, so a swapped upstream, a laundered key, or an edited constant each fail where they were touched.

Any computation, one seal

The seal doesn’t care what the number is.

A bundle seals whatever the computation outputs. Inputs, result, provenance, one SHA-256 manifest, one Ed25519 signature. A single k_eff is the easiest thing to show, so it is the demo. The same record now holds a full-core flux field, a single depletion step, a measured rod-worth comparison and a USL applicability analysis, each sealed and checked the same way.

ed25519 signature sha-256 manifest one manifest · one signature · verifies offline the demo k = 1.00522 k_eff · scalar flux map · array time → burnup · step D C B rod worth · per bank USL margin USL · margin to limit
One sealed boundary, five shapes of result. Illustrative. The seal proves custody of what was computed, not that the physics is right.
sealed today

Power / flux field

The full 52-assembly power array is sealed as the array, re-derived exactly on reproduce.

sealed today

Burnup / depletion

A single depletion step's isotopics, sealed. Screening-grade on a synthetic network, not an irradiated-fuel assay.

sealed today

Rod worth

The BEAVRS D-bank worth, 811 pcm, sealed with its uncertainty and compared to the measured 788 (C/E 1.03).

sealed today

USL / applicability

An applicability analysis and subcritical-limit margin. The v1 result honestly seals a null defensible USL on screening c_k.

When a result is an array or a stochastic number rather than one value, the bundle carries the full inputs and, where the number is stochastic, a sealed reproduce tolerance, so a reviewer re-runs the open engine and checks the result the same way, not just a headline number.

The seal proves custody of the computation, whatever its shape. k_eff is the demo, not the limit.

Browse the sealed results, one card per shape →

The Proof Layer AI can produce the number. It can’t make it defensible. Whoever acts on an AI-computed result has to defend it later, to an auditor or a regulator, and “the model said so” won’t hold. The Proof Layer seals the result so anyone can re-run and verify it. Explore → Break the Seal · a standing public dare We published a signed reactor calculation. Change the number and get it past our verifier. The verifier is open, dependency-free, and runs offline. Our production key is cross-checkable from two channels. Every reproducing attempt gets credited. Take the dare →

Work with us

Build the evidence where your reactor numbers are computed.

Most of our work starts as a scoped engagement. We wire the SMRFORGE engine into the analysis pipeline your team already runs, so every criticality, shutdown-margin, and depletion number comes out sealed and re-runnable, not only the one you send in afterward. For an SMR developer heading to the NRC, that’s the work.

Flagship engagement

Pipeline integration

We wire the engine into the workflow your physicists already run, over the local MCP and REST surface. Sealing a result becomes one call, and a signed, re-runnable evidence bundle comes back per call, on every number your pipeline computes. Your physicists own the physics. We do not compute your reactor.

How integration works →
You bringa workflow you already run
We wire inthe engine over local MCP & REST
Every resulta sealed, re-runnable bundle

Also: independent confirmatory analysis (send one number, we re-derive and sign it), evidence packaging, and pre-submission V&V. Lab and academic collaborations welcome. All engagement types → support@smrforge.io

Verification, honestly labeled

Numbers you can look up.

These are code-verification closures: the engine checked against analytic solutions and published benchmark references, not against measured experiments. The IAEA-2D −3 pcm and the CE Monte-Carlo +108 pcm floor are our numbers of record; the analytic rows are method-verification tolerances and the OpenMC row is a reproducibility band, not accuracy claims. Screening-grade by design, and every row re-runs from its own bundle.

AnchorCompared againstResultFidelity
IAEA-2D full corek = 1.029585C−E ≈ −3 pcmscreening
Bare-cylinder R-Zanalytic k(B²)< 2 pcmscreening
Infinite-medium k∞closed-form 2-group≤ 1 pcmscreening
In-tree CE Monte CarloOpenMC (matched free-gas)≈ +108 pcmscreening
Criticality (OpenMC)continuous-energy MCre-derives in ±3σlab
What a seal proves, and what it doesn’t. A sealed bundle proves the number is unaltered and can be re-derived from its own recorded inputs: custody, not correctness. A sealed number from a badly specified core is a faithfully preserved wrong answer. SMRFORGE results are screening-to-reference grade and advisory, labeled on every result. Nobody should license a reactor on a SMRFORGE number alone.

pcm = per cent mille (10−5 Δk/k). Verification (vs analytic and published references) is not validation (vs measured experiments). Screening k-eff is a trend, not a validated absolute. Nuclear data cited on this site is openly distributable (ENDF/B-VIII.0 and VIII.1).

The fidelity ladder

Screen fast, escalate the same inputs.

Every method here runs today. The in-tree engine is screening-grade by design; the graded reference tier is the sealed OpenMC escalation, a field-validated code, cited, reproduced through our evidence spine. Accuracy is OpenMC’s; the auditable evidence is ours. Reference is earned per domain, live today for LWR-lattice and LEU-solution criticality.

rung 1 · screening
Nodal / NEM

Full-core diffusion, in-tree.

rung 2 · screening
SN / SP3

Transport on the same inputs.

rung 3 · screening
CE Monte Carlo

Continuous-energy, in-tree, screening-grade.

rung 4 · reference / lab · free
OpenMC

Same inputs, an eigenvalue from a field-validated code, sealed and reproduced through our spine. Reference lives here, earned per domain.

Run it yourself

The engine behind the work: free, and yours.

Community is the whole physics engine and the whole evidence spine, the same tools we use in an engagement. Pro is the assurance layer around them. No physics is ever Pro-only.

Community
MIT · open source · v0.15

Screen a core, escalate it to OpenMC, and ship every result sealed. Free, MIT, source-only.

  • Full-core diffusion, NEM, SN/SP3, CE Monte Carlo, burnup, kinetics
  • One-step OpenMC escalation, free
  • Sealed bundles: SHA-256 manifest, Ed25519 signature, toolchain recorded
  • verify, reproduce, and verify --chain, all offline
  • Sealed cross-bundle chaining (derived_from)
  • Verifiable redaction, data-library provenance
Pro
FSL-1.1-MIT · commercial beta · the assurance layer

Our engagement work, productized: the assurance package a regulator reads, run in-house.

  • Signed assess: PASS / FAIL against the safety floor, chained to the sealed reference bundle it consumed
  • Coverage: ck trending against measured anchors
  • Watch: flags when a sealed result stops reproducing, or the library or toolchain beneath it changes
  • Report: signed, shareable, renders the lineage
  • Evidence Console: one signed portfolio view, one row per bundle, verify state recomputed, never “approved”
  • Support, and the engagement path above

The seam: physics fidelity, geometry, solvers and the evidence spine ship free in the open core. Pro composes them; it never contains them.

Install
$ git clone https://gitlab.com/smrforge/smrforge.git && cd smrforge && pip install -e .

Source-only, by design. Python 3.11+, pure standard library, no dependencies. It is not on PyPI, on purpose: the engine is built for air-gapped and regulated environments, so what you install is the source tree you can read, never a package index. Getting started →

$ smrforge run physics:nodal --preset lwr-smr-2g --enrichment-pct 4.5 --core-size-cm 200

Command line

One flag per declared input. smrforge tools lists the open capabilities and smrforge schema <card> prints one card’s inputs; a missing or misspelled input is a named error, not a stack trace. The output is a sealed evidence bundle.

run_capability("physics:nodal", inputs)

Python

Register the open cards, call run_capability(name, inputs), and get the result and the same sealed bundle back: the same input checks, the same record.

$ smrforge serve

REST + MCP, on your machine

A standard-library HTTP server bound to 127.0.0.1. POST a JSON body to run a card and the response is the bundle; the same server speaks MCP to an AI agent. No web framework, no network fetches.

What runs where. The in-tree engine runs anywhere Python does. The lab-grade OpenMC path needs a real OpenMC install and a continuous-energy cross-section library on your host; without them those cards refuse, rather than fabricate a number.

Questions

The short answers.

Longer ones on the info sheet and in the open repository.

What is SMRFORGE?
The evidence layer for reactor physics. The free open core (MIT) is a screening-grade reactor-physics engine, full-core nodal diffusion and NEM through an in-tree continuous-energy Monte Carlo, with one-step escalation to OpenMC. Every result becomes a sealed evidence bundle anyone can verify offline and re-derive by re-running the open engine on its recorded inputs. Pro (FSL-1.1-MIT) adds the assurance layer a regulator reads. Physics is free and stays free; Pro is never physics.
What does the seal prove, and what doesn’t it?
Custody: the number in front of you is the number the engine produced, nothing altered it, and the run can be re-derived from the inputs in the bundle. Under our pinned production key it also proves origin. It does not prove the physics is right; a sealed number from a badly specified core is a faithfully preserved wrong answer. Results are screening-to-reference grade and advisory, labeled on every result. Nobody should license a reactor on a SMRFORGE number alone.
How do reproducibility and chaining work?
Every bundle carries a SHA-256 manifest of inputs and outputs, a reproducibility block (engine version, the nuclear-data library by content hash, the RNG seed, a determinism statement, and the minting toolchain: machine and solver), and a derivation lineage. smrforge verify checks integrity offline with a checker that imports none of our physics. smrforge reproduce re-runs the open engine on the bundle’s own inputs. When a result was built from another sealed result, its bundle binds the upstream by hash in a sealed derived_from link, and smrforge verify --chain <bundle> --from <dir> walks every link offline. The link carries facts, never a verdict: the verifier that walks the chain decides.
What’s the difference between Community and Pro?
Community (MIT) is the whole screening engine and the whole evidence spine: nodal diffusion and NEM, SN/SP3, continuous-energy Monte Carlo, the OpenMC escalation path, sealed bundles, the standalone verifier, reproduce, chain walking, verifiable redaction, and data-library and toolchain provenance. Pro (FSL-1.1-MIT) adds the assurance layer: the signed assess deliverable with a PASS/FAIL verdict against the safety floor, chained to the sealed reference bundle it consumed; coverage; watch; signed reports with lineage; the Evidence Console; and support.
Does SMRFORGE run air-gapped?
Yes. The open core is pure Python standard library with zero dependencies and no network fetches at runtime, so it runs fully offline: a laptop with no internet, an air-gapped environment, an enterprise firewall. The verifier, reproduce, and the chain walker are all offline; the walker takes upstream bundles from a directory or archive you supply, never from a network.
How do I install it?
From source, at gitlab.com/smrforge/smrforge: clone, then pip install -e . (Python 3.11+). Not on PyPI, by design. Also public: the Evidence Envelope standard, its single-file reference verifier with no SMRFORGE import, and the reviewer kit. Pro is source-available (FSL-1.1) and licensed, in commercial beta.
Is there a REST / MCP server?
Yes. smrforge serve starts a standard-library HTTP server on 127.0.0.1 (port 8765 by default) fronting a REST API (POST /v1/run/<capability> returns the signed bundle; /v1/tools and /openapi.json describe it) and an MCP endpoint (JSON-RPC 2.0 at /mcp) for AI agents. No web framework, no network fetches. Pro cards are not served by the open server; they need an entitlement token.

Talk to us

Wire the evidence into the pipeline you already run.

Tell us which codes your reactor numbers come out of and we scope the integration from there. Or bring us a single number and we hand it back as a signed confirmation your reviewer re-runs offline. Engagements, pilots and Pro, all at support@smrforge.io.