Skip to content

Surface parity matrix ​

Every public capability must exist in all four surfaces, or have a recorded and justified exception. Status values: todo, wip, done, n/a (with the reason in the exceptions table). scripts/check-parity.sh (Task 0.5.6) compares this table with the symbols each surface actually exports.

CapabilityPhaseRustCLIPythonWASMNotes
version0donedonedonedoneHello-world slice (Task 0.5.7)
cell_volume0donedonedonedoneHello-world slice (Task 0.5.7)
element_info1donedonedonedoneElement data (Task 1.1.4)
lattice_info1donedonedonedoneLattice (Task 1.2.5)
lattice_minimum_image1donen/adonedoneRust, Python and WASM; the CLI reports geometry through cell
limits_bounds1donen/adonedoneLimits (Task 1.3.3); the CLI has the global --limits flag
limits_check1donen/adonedoneLimits (Task 1.3.3); the CLI has the global --limits flag
structure_info1donedonedonedoneStructure summary (Task 1.4.5); reads any registered format
read_cif1donedonedonedoneCIF reader (Task 1.15); CLI info and convert
read_structure1donedonedonedoneFormat dispatch (Task 1.16.3); empty hint auto-detects
supercell1donedonedonedoneSupercells (Task 1.7); WASM supercell_info
slab1donedonedonedoneSlabs (Task 1.8); WASM slab_info
bonds1donedonedonedoneBond graph (Task 1.11)
rings1donedonedonedonePrimitive rings (Task 1.12)
ring_paths1donedonedonedonePeriodic ring paths with lattice images (Task 1.12)
groups1donedonedonedoneFunctional groups (Task 1.13)
neighbors1donedonedonedonePeriodic neighbors (Task 1.10)
distance1donedonedonedoneMeasures (Task 1.14)
angle1donedonedonedoneMeasures (Task 1.14)
torsion1donedonedonedoneMeasures (Task 1.14)
detect_symmetry2donedonedonedoneSymmetry search (Task 2.1.4); CLI symmetry detect
asymmetrize2donedonedonedoneWorkflow (Task 2.3.3); WASM asymmetrize_info
to_p12donedonedonedoneWorkflow (Task 2.3.4); WASM to_p1_info
set_space_group2donedonedonedoneWorkflow (Task 2.3.2); WASM set_space_group_info
subgroups2donedonedonedoneEnumeration (Task 2.7.1/2.7.4); WASM subgroups_info
lower_to_subgroup2donedonedonedoneLowering (Task 2.7.3/2.7.4); WASM lower_to_subgroup_info
standardize2donedonedonedoneTask 2.5.1
primitive_cell2donedonedonedoneTask 2.5.2
reduce_structure2donedonedonedoneTask 2.6.3
wyckoff_assignments2donedonedonedoneTask 2.4.2
tolerance_ladder2donedonedonedoneTask 2.9.1
diagnose2donedonedonedoneTask 2.9.2
brillouin_zone2donedonedonedoneTask 2.10.1
detect_layer_symmetry2donedonedonedoneLayer groups (Task 2.8.1); WASM layer_group_info
detect_magnetic_symmetry2donedonedonedoneMagnetic groups (Task 2.8.2, experimental); WASM magnetic_group_info
change_setting2donedonedonedoneSetting change (Task 2.3.5); WASM change_setting_info
band_path2donedonedonedoneBravais/k-path (Task 2.10.2-2.10.4); WASM kpath_info
molecular_point_group2donedonedonedonePoint groups (Task 2.8.3); WASM pointgroup_info
scene_summary3donedonedonedoneView data (Task 3.14.4); CLI mesh
scene_data3donedonedonedoneFull scene geometry for a viewer (Task 3.14.4); CLI mesh --scene
mesh_stl3donedonedonedoneASCII STL (Task 3.15.1); CLI mesh
pxrd5donedonedonedoneCalculated PXRD (Task 5.1); Rust calculate_pxrd, WASM pxrd_info
param_schema3donedonedonedoneParameter presets (Task 3.8.2); Rust preset, CLI params
project_pack3donedonedonedoneProject archives (Task 3.7); Rust write_project, CLI project
workspace_archive3donen/adonedoneIn-memory workspace (Task 3.12.3); the CLI reads run.json directly
prepare4donedonedonedonePreparation pipeline (Task 4.7); Python ff_prepare, WASM ff_prepare_info
add_hydrogens4donedonedonedoneHydrogen placement (Task 4.6)
porosity5donedonedonedoneDistance grid (Task 5.2/5.3); Rust distance_grid
net_invariants5donedonedonedoneQuotient graphs and the full RCSR fingerprint identification (Task 5.6/5.7); Rust quotient_graph and RcsrIndex
zeo_parse5donedonedonedoneZeo++ output parser (Task 5.5); Rust parse_zeo_channels
build_graphene6donedonedonedoneCarbon builders (Task 6.5); Rust graphene, WASM build_graphene_info
build_nanotube6donedonedonedoneCarbon builders (Task 6.6); Rust nanotube, WASM build_nanotube_info
build_c606donedonedonedoneC60 (Task 6.7); CLI build c60, WASM build_c60_info
build_c206donedonedonedoneC20 (Task 6.7); Rust face_spiral(20), CLI build c20
build_mof6donedonedonedoneMOF assembly (Task 6.12-6.16); WASM build_mof_info
twist6donedonedonedoneCommensurate twist (Task 6.5.3); CLI build twist
ribbon6donedonedonedoneNanoribbon (Task 6.8.3); CLI build ribbon
build_ztc6donedonedonedoneGyroid carbon model (Task 6.8); CLI build ztc
build_schwarzite6donedonedonedoneSchwarz P carbon model (Task 6.8); CLI build schwarzite
build_carbon6donedonedonedoneDisordered carbon recipe with convolution surface, remesh, ribbons and termination (Task 6.8); CLI build carbon, Python build_carbon, WASM build_carbon_recipe_info
build_polymer6donedonedonedonePolymer chain (Task 6.9); CLI build polymer
run_automatic7donedonedonedoneAutomatic run with the Le Bail-BIC extinction-class ranking and the Pawley-ranked (cell, class) table (Task 7.10); Python powder_automatic
refine_phase7donedonedonedoneMcCusker-order structural refinement with esds and stages (Task 7.8); Python powder_refine
powder_index7donedonedonedoneGeneral metric-family indexing with M20/F_N (Task 7.5); Python powder_index, WASM powder_index_info
powder_lebail7donedonedonedoneLe Bail intensity extraction with a SNIP background (Task 7.6.1; Python/WASM added by the 2026-11-11 audit); Rust le_bail, CLI powder lebail, WASM powder_lebail_info
powder_pawley7donedonedonedonePawley fit with esds and free cell/instrument parameters (Task 7.6.2); Python powder_pawley, WASM powder_pawley_info and powder_pawley_width_info (size/strain refinement, added by the 2026-11-11 audit)
agent_capabilities8donedonedonedoneRuntime feature, engine, bundle and verb report (Task 8.1.1); Rust capability_report, CLI capabilities
agent_verbs8donedonedonedoneThe shared verb catalogue (Task 8.1.1); Rust catalogue, CLI capabilities
agent_run8donedonedonedoneBatch session over a JSON script (Task 8.1.2); Rust run_verbs, CLI agent
ml_backends8n/adonedonen/aThe ML bridge is Python-only by the Task 4.11 decision; the CLI models command lists the catalogue (Task 8.4)
models8donedonen/an/aModel cache with SHA-256 and license (Task 8.4.2); Rust fetch, CLI models
match_structures9donedonedonedoneStructure matcher (Task 9.1.1); Rust match_structures, CLI compare
periodic_rmsd9donedonedonedonePeriodic RMSD under a mapping (Task 9.1.2)
kabsch_alignment9donedonedonedoneKabsch alignment (Task 9.1.2)
group_structures9donedonedonedoneEquality classes (Task 9.1.3); CLI group
deform9donedonedonedoneStrain, gradient, volume and density (Task 9.2.1); CLI deform
rattle9donedonedonedoneSeeded displacements (Task 9.2.2)
edit_structure9donedonedonedoneSite edits and species maps (Task 9.2.3); Rust replace_species and the site helpers, Python edit_structure
interpolate9donedonedonedoneMatched interpolation (Task 9.2.4); Python interpolate_structures
optimal_supercell9donedonedonedoneCube-like supercell (Task 9.2.5)
voronoi9donedonedonedonePeriodic Voronoi cells (Task 9.3.1)
coordination9donedonedonedoneCoordination shells and shape measures (Task 9.3.2)
bond_valence_sums9donedonedonedoneBond-valence sums (Task 9.3.3)
oxidation_states9donedonedonedoneOxidation-state estimation (Task 9.3.3)
radial_distribution9donedonedonedoneTotal and partial RDF (Task 9.3.4)
structure_fingerprint9donedonedonedoneComposition, cell and RDF fingerprint (Task 9.3.4); Rust fingerprint, Python structure_fingerprint
unique_miller_indices9donedonedonedoneSymmetry-unique Miller indices (Task 9.4.1)
slab_terminations9donedonedonedoneAll slab terminations (Task 9.4.2)
wulff9donedonedonedoneWulff construction (Task 9.4.3)
adsorption_sites9donedonedonedoneTop, bridge and hollow sites (Task 9.4.4)
vacancies9donedonedonedoneSymmetry-unique vacancies (Task 9.5.1)
substitutions9donedonedonedoneSymmetry-unique substitutions (Task 9.5.1)
interstitials9donedonedonedoneInterstitial candidates (Task 9.5.1)
orderings9donedonedonedoneOrdered decorations ranked by Ewald energy (Task 9.5.2)
special_quasirandom9donedonedonedoneSQS generation with pair and triplet correlations (Task 9.5.3)
lattice_matches9donedonedonedoneZur-McGill 2D lattice matching (Task 9.5.4)
stack_slabs9donedonedonedoneHeterostructure stacking (Task 9.5.4)
elastic_tensor9donedonedonedoneStress finite differences, Voigt-Reuss-Hill moduli (Task 9.6.1)
eos_fit9donedonedonedoneBirch-Murnaghan, Vinet and Murnaghan fits (Task 9.6.2); Rust fit_eos, CLI features eos
convex_hull9donedonedonedoneFormation energies and hull distances (Task 9.6.3)
mof_check10donedonedonedoneMOF quality checker (Task 10.1.1); CLI mof check
mof_solvent_remove10donedonedonedoneSolvent/counter-ion removal (Task 10.1.2); CLI mof solvent-remove
mof_disorder10donedonedonedoneDisorder resolution (Task 10.1.3); CLI mof disorder-resolve
mof_charge_balance10donedonedonedoneMetal states and charge balance (Task 10.1.4); CLI mof charge-balance
mof_deconstruct10donedonedonedoneBuilding-unit deconstruction and contracted net (Task 10.2.1-10.2.2); CLI mof deconstruct
mof_mofid10donedonedonedoneMOFid and MOFkey (Task 10.2.3); CLI mof mofid
mof_open_metal_sites10donedonedonedoneOpen metal sites (Task 10.2.4); CLI mof open-metal-sites
mof_descriptors10donedonedonedoneLinker/node/framework descriptors (Task 10.2.5); CLI mof descriptors
mof_pores10donedonedonedoneNative PLD, LCD, ASA, AV and channel dimension (Task 10.3.1-10.3.3); CLI mof pores
mof_guests10donedonedonedoneTraPPE guest table (Task 10.4.1); CLI mof adsorption guests
mof_forcefield10donedonedonedoneHost UFF/EQeq and guest mixing (Task 10.4.1); CLI mof adsorption force-field
mof_widom10donedonedonedoneWidom insertion and Henry coefficient (Task 10.4.2); CLI mof adsorption widom
mof_gcmc10donedonedonedoneSingle-component GCMC isotherm (Task 10.4.3); CLI mof adsorption gcmc
mof_energy_grid10donedonedonedoneGuest energy grid (Task 10.4.4); CLI mof adsorption grid
mof_raspa10donedonedonedoneRASPA input export (Task 10.4.5); CLI mof adsorption raspa
mof_functionalize10donedonedonedonePost-synthetic functionalisation (Task 10.5.3); CLI mof modify functionalize
mof_defects10donedonedonedoneMissing linker/cluster defects (Task 10.5.4); CLI mof modify defects
mof_interpenetrate10donedonedonedoneInterpenetrated variants (Task 10.5.5); CLI mof modify interpenetrate
mof_stack_layers10donedonedonedoneLayered variants (Task 10.5.5); CLI mof modify stack-layers
mof_mixed10donedonedonedoneMixed-metal/linker frameworks (Task 10.5.6); CLI mof modify mixed
mof_read_database10donedonedonen/aCoRE MOF/QMOF directory readers (Task 10.6.1); no filesystem in WASM
mof_screen10donedonedonen/aScreening pipeline (Task 10.6.2); no filesystem in WASM
mof_deduplicate10donedonedonen/aMOFkey + matcher deduplication (Task 10.6.3); no filesystem in the browser

Recorded exceptions ​

CapabilitySurfaceReasonAlternative offered
Reading and writing paths, atomic writesWASMNo filesystem in the browserString and Uint8Array APIs
On-disk workspace of runsWASMNo filesystemIn-memory workspace exported as a zip
External engines (DFTB+, xtb, Zeo++) and process probesWASMNo subprocesses in the browserNative engines (UFF, QEq, EQeq, grid porosity)
In-process GFN0/GFN1/GFN2 (sci-form feature)CLI, Python, WASMOptional build-time feature whose methods are molecular only; the Rust Calculator and the registry listing are the supported surface, and no binding negotiation for the feature exists yetRust quantum::adapter; CLI ff engines lists the registry entries
Multi-threadingWASMThreads need cross-origin isolationOptional threaded build
MCP server over stdioPython, WASMIt is a process, served by the CLIxtalforge mcp
Machine-learning potentials (MlCalculator, ml_backends)Rust, CLI, WASMThe Task 4.11 decision is the Python/ASE bridge; torch is not a WASM target and the Rust ml feature is a declared no-opPython MlCalculator; the CLI models command manages weights
Plugins (Plugins, runtime registries)CLI, WASMPython callables and Rust registries are host-side extension points; a browser has no dynamic library or Python runtimeRust FormatRegistry, ScalarRegistry, StyleRegistry, CalculatorRegistry, ModuleRegistry; Python Plugins
Model cache (models)Python, WASMIt is a filesystem command with curl; the browser and Python package leave the download to the userCLI models; xtalforge_ff::models
Full MOF topology bundleWASMPackage sizeThe builder carries the curated six-topology/eight-block subset (Tasks 6.11-6.16); the RCSR fingerprint index (35 KB) is embedded on every surface
lattice_minimum_image, limits_bounds, limits_checkCLIThe CLI exposes geometry through cell and the global --limits flagUse cell and --limits
workspace_archiveCLIThe CLI has no modules/run command; the workspace is a library APIRust Workspace and Python workspace_*; project for archives

Open gaps: Rust-only capabilities ​

These capabilities exist in the Rust API but have no CLI, Python or WASM surface and no justification in the table above, so under rule 4 of AGENTS.md they are not finished. They are recorded here instead of being hidden; closing them is post-1.0 work.

CapabilityRustCLIPythonWASM
SMILES parser (parse_smiles) and 3D embedding (embed_smiles), Tasks 6.1.1-6.1.3doneopenopenopen
Sketch data model (Sketch, from_smiles, to_smiles), Task 6.1.6doneopenopenopen
Fragment library (find_fragment), Task 6.2doneopenopenopen
Substitution and clearance (substitute), Task 6.3doneopenopenopen
Guest placement (guest module), Task 6.4doneopenopenopen