check2d is a feature-complete 2D collision detection library for JavaScript, designed for real-time games and simulations.
It combines a Bounding Volume Hierarchy (BVH) broad phase with Separating Axis Theorem (SAT) narrow phase detection, providing fast and accurate collision checks across many shape types.
const { System } = require('check2d')
const system = new System()
const { Box, Circle, Polygon } = require('check2d')
const box = system.createBox({ x: 0, y: 0 }, 10, 10)
const circle = new Circle({ x: 5, y: 0 }, 5)
system.insert(circle)
Bodies can be transformed freely. Changes are batched and applied once.
box.setPosition(10, 5, false)
box.setAngle(Math.PI / 4, false)
box.setScale(2, 1, false)
box.move(1, false)
box.updateBody()
Supported features include:
system.checkAll((result) => {
console.log(result)
})
system.checkOne(box, (result) => {
console.log(result)
})
// optional automatic separation
system.separate()
const points = system.getCollisionPoints(result.a, result.b)
const hit = system.raycast(
{ x: 0, y: 0 },
{ x: 0, y: -10 },
(body) => true
)
if (hit) {
const { point, body } = hit
console.log(point, body)
}
Draw bodies directly to a <canvas> context:
context.beginPath()
system.draw(context)
context.stroke()
Draw BVH bounding boxes:
context.beginPath()
system.drawBVH(context)
context.stroke()
import { System } from 'https://esm.sh/check2d'
Test Suites: 12 passed, 12 total
Tests: 84 passed, 84 total
Run benchmarks and stress tests:
git clone https://github.com/nenjack/check2d.git
cd check2d
npm i
npm run benchmark
yarn add check2d
API reference and guides: https://nenjack.github.io/check2d/
Physics engines like Matter.js or Planck.js are excellent when full simulation is required, but they often introduce unnecessary overhead when only collision detection is needed.
check2d focuses purely on collision detection:
This makes it ideal as a standalone collision system or as the foundation of a custom physics engine.
Contributions are welcome.
npm run precommitanyMIT