@peterspackman/occjs
v0.9.3
Published
JavaScript/WebAssembly bindings for OCC - a quantum chemistry and crystallography library
Maintainers
Readme
@occ/core
JavaScript/WebAssembly bindings for OCC - a quantum chemistry and crystallography library.
Installation
npm install @occ/coreQuick Start
const { loadOCC, createMolecule, Elements } = require('@occ/core');
// Initialize the WASM module
const Module = await loadOCC();
// Create a water molecule
const water = await createMolecule(
[Elements.O, Elements.H, Elements.H],
[
[0.0, 0.0, 0.0],
[0.757, 0.586, 0.0],
[-0.757, 0.586, 0.0]
]
);
console.log(`Molecule: ${water.name}`);
console.log(`Atoms: ${water.size()}`);
console.log(`Molar mass: ${water.molarMass()} g/mol`);Features
- Molecular Structure Manipulation: Create and manipulate molecular structures
- Quantum Chemistry Calculations: Hartree-Fock, DFT, and post-HF methods
- Crystallography: Space groups, symmetry operations, and crystal structure analysis
- Partial Charges: EEM and EEQ charge models
- Geometry Analysis: Point groups, molecular properties, and transformations
- Isosurface Generation: Electron density and promolecule density visualization
- Custom Logging: Flexible logging system with callbacks and buffering
Command-line interface (WASM)
The full occ CLI ships as a WebAssembly ES module (dist/occ.wasm + dist/occ.js).
Under node it runs directly against your working directory (inputs are read from, and outputs written to, the current directory):
npx occ scf water.xyz "ccsd(t)" 6-31gProgrammatic use (node, browser, or a { type: 'module' } worker):
import createOccCliModule from '@peterspackman/occjs/cli';
const M = await createOccCliModule({ noInitialRun: true, locateFile: ... });
M.FS.writeFile('/water.xyz', xyzContents);
const exitCode = M.callMain(['scf', 'water.xyz', 'ccsd(t)', '6-31g']);Migrating from ≤0.9.x:
occ.jsused to be a classic script configured through a globalModuleobject and loaded withimportScripts(). It is now a modularized ES module with a default-exportedcreateOccCliModulefactory — pass your configuration as its argument and spawn workers with{ type: 'module' }. Seeexamples/occ-run-worker.jsfor the pattern.
Development
Building from Source
- Prerequisites: Ensure you have Emscripten installed
- Build WASM module:
npm run build:wasm - Build JavaScript wrapper:
npm run build:wrapper - Run tests:
npm test
Testing
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage
npm run test:coverage
# Run linting
npm run lint
# Run type checking
npm run typecheckAvailable Test Suites
- Core functionality: Basic module loading and error handling
- Logging: Log level management and message handling
- Molecular structure: Molecule creation and property access
- Quantum chemistry: Hartree-Fock, DFT calculations, and property analysis
- Crystallography: Space groups, symmetry operations, unit cells
- Isosurfaces: Surface generation and cube file export
- Basis sets: Built-in and custom JSON basis set loading
Documentation
For complete API documentation, examples, and usage guides, see the main OCC repository.
