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

ts-matrix

v2.0.0

Published

A Vector and Matrix math utility library.

Readme

ts-matrix: A Typescript vector and matrix math library

ts-matrix is a collection of vector, matrix and quaternion classes written in Typescript with no dependencies.

How to install it

Using npm or yarn

npm install --save ts-matrix
yarn add ts-matrix

Or add the unpkg cdn link to your html

<script src="https://unpkg.com/ts-matrix">

The library is built as an ECMAScript module (.mjs file), but it also exports a UMD version if needed.

Usage

Import the module, from Typescript or ES6 javascript.

import { Vector, Matrix, Quat, EPSILON } from 'ts-matrix';

Then use the methods as you want :)

const v1 = new Vector([1, 2]);
const v2 = new Vector([3, 1]);
v1.add(v2);
// ==> [4, 3]

Vector, Matrix and Quat are all immutable: every arithmetic operation returns a new instance rather than mutating the receiver (the only exceptions are the explicitly in-place helpers reset(), setAsIdentity()/setIdentity()).

If you use typescript, the declarations files are available with self documentation.


Documentation

Vectors

Instance methods

| method | description | |--------|-------------| | at(row: number) | Get the value of a cell | | rows | Returns Vector's size | | values | Returns Vector values as an array | | indexOf(value: number) | Returns the index of the value within the Vector, or -1 if it's not found. | | reset() | Sets all vector values to 0, in place | | addValues(count?: number) | Add zero values to the Vector (default: 1). Returns a new instance. | | copy() | Returns a new vector with the same values | | equals(vector: Vector, threshold?: number) | Checks equality between two vectors, optionally within a threshold (default: 0, i.e. exact equality) | | negate() | Negates the Vector (change all cells arithmetic sign). Returns a new instance. | | length() | Returns the vectors length | | squaredLength() | Returns the vectors squared length | | add(vector: Vector) | Adds all given values to the current Vector instance. Both vectors must have the same dimension. Returns a new instance. | | subtract(vector: Vector) | Subtracts all given values to the current Vector instance. Both vectors must have the same dimension. Returns a new instance. | | multiply(vector: Vector) | Multiplies all given values to the current Vector instance. Both vectors must have the same dimension. Returns a new instance. | | divide(vector: Vector) | Divides all given values to the current Vector instance. Both vectors must have the same dimension. Returns a new instance. | | multiplyMatrix(matrix: Matrix) | Computes the product of this vector (as a row vector) with a matrix. Returns a new instance. | | scale(scale: number) | Multiply all vector values by the given scale. | | normalize() | Computes the normalized Vector. Returns a zero vector if this vector has a length of 0. | | dot(vector: Vector) | Computes the dot product between two Vectors. | | cross(vector: Vector) | Computes the cross product between two Vectors. Returns new instance | | mix(vector: Vector, time: number) | Computes the mix product between two Vectors. Returns new instance | | angle(vector: Vector) | Returns the angle between two Vectors between 0 and +π inclusive | | distance(vector: Vector) | Returns the distance (absolute value) between two Vectors | | min() | Returns the lowest value from the Vector | | max() | Returns the highest value from the Vector | | round() | Rounds all vector values to the nearest integer | | toString() | Returns a visual representation of the Vector as a string |

Static methods

| method | description | |--------|-------------| | signedAngle(VectorA: Vector, VectorB: Vector) | Compute the signed angle in radians between two 3D Vectors, in the range -π to +π |


Matrices

Instance methods

| method | description | |--------|-------------| | at(row: number, col: number) | Get the value of a cell | | rows | Returns the number of rows | | columns | Returns the number of columns | | values | Returns matrix values as a bi-dimentional array | | indexOf(value: number) | Returns the position - as a tuple - of the value within the Matrix, or [-1, -1] if it's not found. | | reset() | Sets all matrix values to 0, in place | | copy() | Returns a new matrix with the same values | | addColumns(count?: number) | Add empty columns to the Matrix (default: 1). Returns a new instance. | | addRows(count?: number) | Add empty rows to the Matrix (default: 1). Returns a new instance. | | equals(matrix: Matrix, threshold?: number) | Checks equality between two matrices, optionally within a threshold (default: 0, i.e. exact equality) | | setIdentity() | Fills a squared matrix with the identity values (diagonal 1), in place | | add(matrix: Matrix) | Adds two matrices. Both must have the same dimensions. Returns a new instance. | | subtract(matrix: Matrix) | Subtracts two matrices. Both must have the same dimensions. Returns a new instance. | | scale(scale: number) | Multiply all matrix values by the given scale. Returns a new instance. | | multiply(matrix: Matrix) | Multiply two matrices. Returns a new instance. | | multiplyVector(vector: Vector) | Computes the product of this matrix with a vector. Returns a new instance. | | determinant() | Compute the determinant of the matrix. | | trace() | Compute the sum of the diagonal values. Throws if the matrix isn't squared. | | cofactor(row: number, col: number) | Compute the cofactor of the matrix. Returns a new instance. | | transpose() | Transpose the matrix. Returns a new instance. | | inverse() | Inverse the matrix. Returns a new instance. Throws if the matrix isn't squared, or is singular. | | min() | Returns the lowest value from the Matrix | | max() | Returns the highest value from the Matrix | | round() | Rounds all matrix values to the nearest integer | | toString() | Returns a visual representation of the Matrix as a string |

Static methods

| method | description | |--------|-------------| | identity(dimension: number) | Returns a new squared identity Matrix | | fromArray(values: number[], rows: number, columns: number) | Builds a new Matrix from a flat, row-major array of values |


Quaternions

Quat represents a rotation in 3D space as [x, y, z, w], and follows the same immutability convention as Vector and Matrix.

Instance methods

| method | description | |--------|-------------| | at(index: number) | Get the value at index 0-3 | | values | Returns the quaternion values as an array [x, y, z, w] | | x, y, z, w | The individual components | | xy, xyz, xyzw | Tuples of the first 2, 3, or all 4 components | | reset() | Sets all quaternion values to 0, in place | | copy() | Returns a new quaternion with the same values | | equals(quat: Quat, threshold?: number) | Checks equality between two quaternions within a threshold (defaults to EPSILON) | | setIdentity() | Sets this quaternion to the identity rotation, in place | | calculateW() | Computes w from x, y, z, assuming a unit quaternion. Returns a new instance. | | inverse() | Computes the inverse of the quaternion. Returns a new instance. | | conjugate() | Computes the conjugate of the quaternion. Returns a new instance. | | length() | Returns the magnitude of the quaternion | | normalize() | Computes the normalized quaternion. Returns a zero quaternion if this quaternion has a length of 0. | | add(other: Quat) | Adds two quaternions. Returns a new instance. | | multiply(other: Quat) | Computes the Hamilton product of two quaternions. Returns a new instance. | | roll() | Rotation angle around the x-axis, in radians | | pitch() | Rotation angle around the y-axis, in radians | | yaw() | Rotation angle around the z-axis, in radians | | toString() | Returns a visual representation of the quaternion as a string |

Static methods

| method | description | |--------|-------------| | identity() | Returns a new identity quaternion | | dot(q1: Quat, q2: Quat) | Computes the dot product of two quaternions | | sum(q1: Quat, q2: Quat) | Computes the sum of two quaternions | | product(q1: Quat, q2: Quat) | Computes the Hamilton product of two quaternions | | cross(q1: Quat, q2: Quat) | Computes (q1 * q2 - q2 * q1) / 2, which reduces to the vector cross product of q1 and q2's [x, y, z] parts when both have a 0 w | | mix(q1: Quat, q2: Quat, time: number) | Spherical linear interpolation (slerp) between two quaternions | | shortMix(q1: Quat, q2: Quat, time: number) | Slerp between two quaternions, always taking the shortest path around the hypersphere | | fromAxisAngle(axis: Vector, angle: number) | Builds a quaternion representing a rotation of angle radians around a 3D axis |

Contributing

Any contribution is welcome, whether it is an issue, PullRequest, or just a comment!

Made with love by Florent Catiau-Tristant (@kapcash)