# pixi-graph
**Repository Path**: baopengdu/pixi-graph
## Basic Information
- **Project Name**: pixi-graph
- **Description**: Graph visualization library using PIXI.js and Graphology
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2025-08-11
- **Last Updated**: 2025-08-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# pixi-graph
[](https://www.npmjs.com/package/pixi-graph)
[](https://www.npmjs.com/package/pixi-graph)
[](https://www.npmjs.com/package/pixi-graph)
Graph visualization library using [PIXI.js](https://www.pixijs.com/) and [Graphology](https://graphology.github.io/).
⚠️ **This is a pre-release, use at your own risk!** Upcoming features can introduce breaking changes in the API.
Developing a full-featured graph visualization library is a significant effort. I'd appreciate your feedback to prioritize new features by filling in a [survey](https://link.zakjan.cz/pixi-graph-survey).
[Demo](https://zakjan.github.io/pixi-graph/)
## Install
```
npm install graphology pixi.js pixi-graph
```
or
```html
```
## Usage
### Basic
```ts
const graph = new graphology.Graph();
// populate Graphology graph with data
// assign layout positions as `x`, `y` node attributes
const pixiGraph = new PixiGraph.PixiGraph({
container: document.getElementById('graph'),
graph
});
```
### Layouts
In its simplicity, a graph layout is a function `nodes => positions`. Therefore a layout from any other library can be used. Run the layout separately, and assign layout positions as `x`, `y` node attributes.
[graphology-layout-forceatlas2](https://github.com/graphology/graphology-layout-forceatlas2) example:
```ts
const graph = new graphology.Graph();
// populate Graphology graph with data
graph.forEachNode(node => {
graph.setNodeAttribute(node, 'x', Math.random());
graph.setNodeAttribute(node, 'y', Math.random());
});
forceAtlas2.assign(graph, { iterations: 300, settings: { ...forceAtlas2.inferSettings(graph), scalingRatio: 80 }});
const pixiGraph = new PixiGraph.PixiGraph({ ..., graph });
```
### Style
```ts
const style = {
node: {
color: '#000000',
},
edge: {
color: '#000000',
},
};
const pixiGraph = new PixiGraph.PixiGraph({ ..., style });
```
#### Colors
Colors are resolved with [color-rgba](https://github.com/colorjs/color-rgba). The following CSS colors strings are supported: named colors, hex, short-hand hex, RGB, RGBA, HSL, HSLA.
#### Webfonts
Preload fonts before creating PixiGraph with [FontFaceObserver](https://github.com/bramstein/fontfaceobserver).
[Material Icons](https://google.github.io/material-design-icons/) example:
```html
```
```ts
const style = {
node: {
icon: {
content: 'person',
fontFamily: 'Material Icons',
},
},
};
await new FontFaceObserver('Material Icons').load();
const pixiGraph = new PixiGraph.PixiGraph({ ..., style });
```
#### Bitmap fonts
Register bitmap fonts as [resource-loader](https://github.com/englercj/resource-loader) external resource.
```ts
const style = {
node: {
label: {
content: node => node.id,
type: PixiGraph.TextType.BITMAP_TEXT,
fontFamily: 'HelveticaRegular',
},
},
};
const resources = [
{ name: 'HelveticaRegular', url: 'https://gist.githubusercontent.com/zakjan/b61c0a26d297edf0c09a066712680f37/raw/8cdda3c21ba3668c3dd022efac6d7f740c9f1e18/HelveticaRegular.fnt' },
];
const pixiGraph = new PixiGraph.PixiGraph({ ..., style, resources });
```
#### Hover style
Hover style values override style values when node/edge is hovered.
```ts
const style = {
node: {
color: '#000000',
},
edge: {
color: '#000000',
},
};
const hoverStyle = {
node: {
color: '#ff0000',
},
edge: {
color: '#ff0000',
},
};
const pixiGraph = new PixiGraph.PixiGraph({ ..., style, hoverStyle });
```
⚠️ subject to change with the implementation of other states
## API
```ts
export interface GraphOptions {
container: HTMLElement;
graph: Graphology.AbstractGraph;
style: GraphStyleDefinition;
hoverStyle: GraphStyleDefinition;
resources?: ResourceLoader.IAddOptions[];
}
export class PixiGraph {
constructor(options: GraphOptions);
}
```
- `container` - HTML element to use as a container
- `graph` - [Graphology](https://graphology.github.io/) graph
- `style` - style definition
- `hoverStyle` - additional style definition for hover state
- ⚠️ subject to change with the implementation of other states
- `resources` - [resource-loader](https://github.com/englercj/resource-loader) external resource definitions
- resources are passed to loader.add function
- currently used only for external bitmap fonts
### Style definition
`GraphStyle` interface represents a resolved style, all values are mandatory.
`GraphStyleDefinition` interface allows functions or missing values at any key. Functions are resolved, missing values fall back to a previous definition, or default values.
```ts
export interface GraphStyle {
node: {
size: number;
color: string;
border: {
width: number;
color: string;
};
icon: {
content: string;
type: TextType;
fontFamily: string;
fontSize: number;
color: string;
};
label: {
content: string;
type: TextType;
fontFamily: string;
fontSize: number;
color: string;
backgroundColor: string;
padding: number;
};
};
edge: {
width: number;
color: string;
};
}
export type NodeStyle = GraphStyle['node'];
export type EdgeStyle = GraphStyle['edge'];
export type StyleDefinition