Interactive 2D finite element analysis (FEA) sandbox with a Rust physics engine compiled to WebAssembly.
A compact interactive FEA sandbox that combines a performant physics core (Rust → WebAssembly) with a responsive web UI (React + TypeScript) and PixiJS for high-performance 2D rendering and visualization.
- Static FEA solver (plane stress) implemented in Rust and compiled to WebAssembly
- Automatic mesh generation (Delaunay-based) from user-defined boundary points
- Apply forces to nodes or along boundary edges; distribute edge forces to nearby nodes
- Boundary condition editor: fix/unfix nodes and clear/set BCs programmatically
- Material property editor (Young's modulus, Poisson's ratio, density, thickness) with sliders and presets (Steel, Plastic, Custom)
- Real-time auto-solve when material properties or forces change; von Mises stress and strain visualization
- Node/edge editing tools: add/move nodes, connect edges, selection box, and drag-to-move
- Visual overlays: mesh, nodes, edges, stress/strain heatmap, deformed shape, force arrows, constraints
- Background demo generation for landing pages (random polygons, time-varying forces/materials)
Open the app locally with bun run dev and try:
- Add and move boundary points to shape objects
- Regenerate mesh and toggle the mesh visibility
- Apply forces to nodes or edges and solve static equilibrium
- Adjust material properties using sliders and try presets
- Inspect stress/strain visualizations and deformed shapes
- Rust and wasm-pack
- Bun or Node.js
bun run build:rust
# or
npm run build:rusttbun run dev
# or
npm run devvbun run build
# or
npm run buildd- Rust + wasm-bindgen for the physics engine
- React + TypeScript for the UI, TailwindCSS for styling, PixiJS for rendering
MIT
notaroomba.dev · GitHub GitHub @NotARoomba