🌌 Cosmos
GPU-accelerated Force Graph
Cosmos is a WebGL Force Graph layout algorithm and rendering engine. All the computations and drawing are happening on the GPU in fragment and vertex shaders, avoiding expensive memory operations.
It enables real-time simulation of network graphs consisting of hundreds of thousands of points and links on modern hardware.
📺 Comparison with other libraries
🎮 Try Cosmos on StackBlitz
Quick Start
Install the package:
npm install @cosmograph/cosmos
Configure the graph, set data, and run the simulation:
import { Graph } from '@cosmograph/cosmos'
const div = document.querySelector('div')
const config = {
simulationFriction: 0.1,
simulationGravity: 0,
simulationRepulsion: 0.5,
curvedLinks: true,
fitViewPadding: 0.3,
onClick: pointIndex => { console.log('Clicked point index: ', pointIndex) },
}
const graph = new Graph(div, config)
const pointPositions = new Float32Array([
0.0, 0.0,
1.0, 0.0,
0.5, 1.0,
]);
graph.setPointPositions(pointPositions)
const links = new Float32Array([
0, 1,
1, 2,
2, 0,
]);
graph.setLinks(links)
graph.render()
pointPositions
: A Float32Array of [x1, y1, x2, y2, ..., xN, yN]
.links
: A Float32Array of [sourceIndex1, targetIndex1, ..., sourceIndexN, targetIndexN]
.
What's New in v2.0?
Cosmos v2.0 introduces significant improvements in performance and data handling:
- Enhanced data structures with WebGL-compatible formats.
- Methods like
setPointPositions
and setLinks
replace setData
for improved efficiency. - Direct control over point and link attributes via Float32Array (e.g., colors, sizes, widths).
- Updated event handling based on indices instead of objects.
- New Clustering Feature (
setPointClusters
, setClusterPositions
and setPointClusterStrength
). - Ability to drag points.
Check the Migration Guide for details.
Examples
Known Issues
- Starting from version 15.4, iOS has stopped supporting the key WebGL extension powering our Many-Body force implementation (
EXT_float_blend
). We're investigating this issue and exploring solutions.
Documentation
License
MIT
Contact
📩 hi@cosmograph.app