scikit-fem
Simple finite element assemblers
Decision gist · record as of 2026-08-14
Yes. Active maintenance, permissive 3-clause BSD license, low install friction, and no known vulnerabilities make it a solid choice. The pure-Python design trades some speed for accessibility and ease of modification. Install if you need finite element assembly in Python and can accept that linear solve performance will dominate for large problems—the library excels at the assembly step itself.AI-flagged interpretation of the facts on this page — verify before relying
Before you install
- Requires Python 3.10 or later.
- Low friction install with only numpy and scipy as core dependencies; pure Python with no compiled code.
- Active maintenance with latest release 70 days ago and steady repository activity.
License · maintenance · safety
permissive license (permissive) — Licensed under 3-clause BSD (permissive), allowing commercial and private use with minimal restrictions; no copyleft obligations.
last release 2026-06-05 (70 days) · last repo commit 2026-08-06 · 644 stars
0 known vulnerabilities (OSV.dev, 2026-08-14) · 288,590 downloads/mo, #8,019 on PyPI
Alternatives
Verify before relying
pip install scikit-fem
from scikit_fem import *
from scikit_fem.helpers import dot, grad
mesh = MeshTri().refined(4)
basis = Basis(mesh, ElementTriP1())
@BilinearForm
def laplace(u, v, _):
return dot(grad(u), grad(v))
A = laplace.assemble(basis)- Performance scaling characteristics for very large problems beyond 1M degrees-of-freedom.
- Availability and maturity of optional autodiff and supermeshing submodules requiring jax and shapely.
- Memory usage and solver performance characteristics for problems at the largest scales shown in benchmark.
What it is and what it does
scikit-fem is a pure Python library that converts mathematical finite element forms into sparse matrices and vectors suitable for numerical solving. It handles the core assembly task in finite element analysis—taking weak formulations of PDEs and producing the linear systems that solvers need. The library supports a wide range of element types (linear and higher-order, including specialized elements like Raviart-Thomas and Nédélec) and works with 1D, 2D, and 3D meshes.
The package is designed for researchers and engineers solving PDEs via the finite element method. It has minimal dependencies (only numpy and scipy for core functionality), contains no compiled code, and integrates with scipy's sparse solvers. Optional dependencies add mesh I/O and visualization. Assembly performance is competitive for many problem sizes, with benchmark data showing assembly times scale predictably up to large degree-of-freedom counts.
Use it for
- Solve Poisson, Laplace, and other elliptic PDEs on unstructured meshes using Python.
- Assemble stiffness and mass matrices for structural mechanics or heat transfer problems.
- Prototype finite element formulations with custom bilinear and linear forms before optimization.
- Work with specialized elements for mixed or vector-valued problems in electromagnetics or fluid dynamics.
- Load and process meshes from external formats and solve coupled multiphysics problems.
Worth the install?
AI-flagged interpretation of the facts on this page. Verify before relying on it.
Yes.
Active maintenance, permissive 3-clause BSD license, low install friction, and no known vulnerabilities make it a solid choice. The pure-Python design trades some speed for accessibility and ease of modification. Install if you need finite element assembly in Python and can accept that linear solve performance will dominate for large problems—the library excels at the assembly step itself.
Install
scikit-fem on PyPI
Before you install
Low friction install with only numpy and scipy as core dependencies; pure Python with no compiled code. Active maintenance with latest release 70 days ago and steady repository activity.
Requires Python 3.10 or later.
License in practice
Licensed under 3-clause BSD (permissive), allowing commercial and private use with minimal restrictions; no copyleft obligations.
Quickstart
pip install scikit-fem
from scikit_fem import *
from scikit_fem.helpers import dot, grad
mesh = MeshTri().refined(4)
basis = Basis(mesh, ElementTriP1())
@BilinearForm
def laplace(u, v, _):
return dot(grad(u), grad(v))
A = laplace.assemble(basis)
Verify before relying
- Performance scaling characteristics for very large problems beyond 1M degrees-of-freedom.
- Availability and maturity of optional autodiff and supermeshing submodules requiring jax and shapely.
- Memory usage and solver performance characteristics for problems at the largest scales shown in benchmark.
Package facts
| License | permissive license permissive |
| Python support | Supports the current Python release >=3.10 |
| Install friction | Low. Pure-Python wheel |
| Runtime dependencies | 2 packagesnumpyscipy |
| Maintenance | Actively maintained 70 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 288,590 / month, #8,019 on PyPI 30-day window, as of 2026-08-14 |
| Known vulnerabilities | None known OSV.dev, checked 2026-08-14 |
| Classifiers | Intended Audience :: Science/ResearchLicense :: OSI Approved :: BSD LicenseOperating System :: OS IndependentProgramming Language :: Python :: 3Programming Language :: Python :: 3.10Programming Language :: Python :: 3.11Programming Language :: Python :: 3.12Programming Language :: Python :: 3.13Programming Language :: Python :: 3.14 |
Evidence: scikit_fem-12.0.2-py3-none-any.whl
Tags
Let your AI agent find packages like this
Example. Real query, live index.
You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.
wish › “finite element assembly”
- scikit-femTransforms bilinear and linear forms into sparse matrices and vectors…
- gmshGmsh is a three-dimensional finite element mesh generator that wraps…
- openseespylinuxOpenSeesPy Linux provides a Python interface to OpenSees, an…
Give your agent the search over MCP, or paste the wish link into any chat.
More Mathematics packages
NetworkX provides data structures and algorithms for creating, analyzing, and manipulating graphs and networks, supporting everything from simple undirected graphs to complex directed and weighted networks.
kiwisolver is a Python binding to a fast C++ implementation of the Cassowary constraint solver, enabling you to solve systems of linear constraints and inequalities.
Install it if you need to solve constraint systems; skip it if you only need simple linear algebra.
SymPy is a Python library for symbolic mathematics, performing algebraic manipulation, calculus, equation solving, and mathematical expression simplification without numerical approximation.
ContourPy calculates contours of 2D quadrilateral grids using C++11 algorithms wrapped in Python, offering serial and multithreaded implementations without requiring Matplotlib as a dependency.
PyTorch provides GPU-accelerated tensor computation and automatic differentiation for building and training deep neural networks in Python.
onnxruntime loads and executes Open Neural Network Exchange (ONNX) models with a focus on inference performance across CPUs and accelerators.
Install it if you have ONNX models to run in production or development.
See also PyNiteFEA · anastruct · tetgen · gmsh · cytriangle · linear-operator · pygmsh · spglm · meshio · tabmat