FEAScript is a lightweight finite element simulation library built in JavaScript. It empowers users to create and execute simulations for physics and engineering applications in both browser-based and server-side environments. This is the core library of FEAScript.
🚧 FEAScript is currently under heavy development. Functionality and interfaces may change rapidly as new features and enhancements are introduced. 🚧
FEAScript is entirely implemented in pure JavaScript and can run in two environments:
- In the browser with a simple HTML page, where all simulations are executed locally without any installations or using any cloud services
- Via Node.js with plain JavaScript files, for server-side simulations
You can use FEAScript in browser environments in two ways:
Direct Import from CDN: Add this to your HTML file:
<script type="module"> import { FEAScriptModel } from "https://core.feascript.com/dist/feascript.esm.js"; </script>
Download and Use Locally:
- Download the latest release from GitHub Releases
- Include it in your HTML file:
<script type="module"> import { FEAScriptModel } from "./path/to/dist/feascript.esm.js"; </script>
For browser-based examples and use cases, visit our website tutorials.
# Install FEAScript and its peer dependencies npm install feascript mathjs plotly.js
Then import it in your JavaScript/TypeScript file:
import { FEAScriptModel } from "feascript";
Important: FEAScript is built as an ES module. If you're starting a completely new project (outside this repository), make sure to configure it to use ES modules by (when running examples from within this repository, this step is not needed as the root package.json already has the proper configuration):
# Create package.json with type=module for ES modules support echo '{"type":"module"}' > package.json
Explore various Node.js examples and use cases here.
Browser Import:
// Import FEAScript library in browser import { FEAScriptModel } from "https://core.feascript.com/dist/feascript.esm.js";
Node.js Import:
// Import FEAScript library in Node.js import { FEAScriptModel } from "feascript";
// Create and configure model const model = new FEAScriptModel(); model.setSolverConfig("solverType"); // e.g., "solidHeatTransfer" for a stationary solid heat transfer case model.setMeshConfig({ meshDimension: "1D" | "2D", // Mesh dimension elementOrder: "linear" | "quadratic", // Element order numElementsX: number, // Number of elements in x-direction numElementsY: number, // Number of elements in y-direction (for 2D) maxX: number, // Domain length in x-direction maxY: number, // Domain length in y-direction (for 2D) }); // Apply boundary conditions model.addBoundaryCondition("boundaryIndex", ["conditionType", /* parameters */]); // Solve model.setSolverMethod("linearSolver"); // lusolve (via mathjs) or jacobi const { solutionVector, nodesCoordinates } = model.solve();
We warmly welcome contributors to help expand and refine FEAScript. Please see the CONTRIBUTING.md file for detailed guidance on how to contribute.
The core library of FEAScript is released under the MIT license. © 2023-2025 FEAScript.