npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@jtgtools/xsparse

v0.0.1

Published

Pure TypeScript sparse linear algebra toolkit for finite element methods

Readme

@jtgtools/xsparse

Sparse linear algebra for TypeScript. xsparse is ESM-only, has no runtime dependencies, and uses Float64 CSR/CSC matrices with Int32 indices.

Install

npm install @jtgtools/xsparse

The package works with Bun, Node, TypeScript, and browser bundlers.

Example

import { TripletMatrix, applyDirichlet, backwardError, cg, ichol } from "@jtgtools/xsparse";

const K = new TripletMatrix(5, 5);
const ke = new Float64Array([1, -1, -1, 1]);

for (let e = 0; e < 4; e++) K.element([e, e + 1], ke);

const { A, b } = applyDirichlet(K.csr(), new Float64Array(5), [0, 4], [0, 2]);
const result = cg(A, b, {
  preconditioner: ichol(A),
  rtol: 1e-10,
  maxIterations: 100,
});

if (!result.converged || backwardError(A, result.x, b) > 1e-11) {
  throw new Error("solve failed");
}

API

  • Matrices: TripletMatrix, csr, csc, fromTriplets, fromDense, sparse products, scaling, permutations, block assembly, and Matrix Market I/O.
  • Direct methods: Cholesky, pivoted LU, sparse Householder QR, triangular solves, least squares, minimum norm, refinement, and automatic solve dispatch.
  • Iterative methods: CG, MINRES, GMRES, FGMRES, BiCGSTAB, CGNR, Richardson, Jacobi, Gauss-Seidel, and SOR.
  • Preconditioners: Jacobi, Gauss-Seidel, SOR/SSOR, exact, IC(0), ILU(0), ILUT, ILUTP, and block forms.
  • Multigrid: Galerkin coarsening, V/W cycles, geometric helpers, and smoothed-aggregation AMG.
  • FEM: assembly, Dirichlet constraints, affine reduction, static condensation, Schur complements, and saddle-point systems.
  • Eigenproblems: symmetric and generalized symmetric eigenpairs.
  • Graphs: components, matching, structural rank, Dulmage-Mendelsohn, RCM, minimum-degree orderings, coloring, and nested dissection.

Contracts

  • Stored matrix entries and solver inputs are finite real numbers.
  • Matrix dimensions and sparse metadata must fit signed 32-bit indexing.
  • Matrix factories copy input storage, combine duplicates, sort indices, and remove exact zeros.
  • Iterative solvers set converged: true only after checking the documented residual. Reaching the iteration limit returns converged: false; invalid input or algorithmic breakdown raises RangeError.
  • CG requires SPD input, MINRES requires symmetric input, and generalized eigenproblems require an SPD mass matrix.

See QUALIFICATION.md for the full numerical contract. Applications must still check model-level quantities such as equilibrium, energy, conditioning, and mesh convergence.

Development

The release gate requires Bun, Node/npm, Python 3, NumPy, SciPy, and NetworkX.

bun install
bun run verify

See VERIFICATION.md for pinned versions and the checks run before publication.