React integration for PixiJS enabling declarative 2D graphics programming with JSX and React patterns.
npx @tessl/cli install tessl/npm-pixi--react@8.0.0@pixi/react is a React integration library for PixiJS that enables declarative 2D graphics programming using JSX. It bridges React's component-based architecture with PixiJS's high-performance 2D graphics rendering, providing hooks, components, and a type-safe API for building interactive graphics applications.
npm install pixi.js@^8.2.6 @pixi/reactimport { Application, createRoot, extend } from "@pixi/react";
import { useApplication, useTick, useExtend } from "@pixi/react";For CommonJS:
const { Application, createRoot, extend, useApplication, useTick, useExtend } = require("@pixi/react");Type imports:
import type { ApplicationRef, PixiElements, PixiReactElementProps, UnprefixedPixiElements } from "@pixi/react";import { Application, extend } from "@pixi/react";
import { Container, Graphics } from "pixi.js";
import { useCallback } from "react";
// Register PixiJS components for JSX usage
extend({ Container, Graphics });
const MyComponent = () => {
const drawCallback = useCallback((graphics) => {
graphics.clear();
graphics.setFillStyle({ color: "red" });
graphics.rect(0, 0, 100, 100);
graphics.fill();
}, []);
return (
<Application>
<pixiContainer x={100} y={100}>
<pixiGraphics draw={drawCallback} />
</pixiContainer>
</Application>
);
};@pixi/react is built around several key components:
extend() function registers PixiJS classes for JSX usage, enabling selective importsRoot component that creates and manages a PixiJS Application with React lifecycle integration. Handles canvas creation, application initialization, and context provision.
interface ApplicationProps extends BaseApplicationProps, Partial<ApplicationOptions> {
className?: string;
children?: PixiReactChildNode;
defaultTextStyle?: TextStyle | TextStyleOptions;
extensions?: (ExtensionFormatLoose | any)[];
onInit?: (app: Application) => void;
resizeTo?: HTMLElement | Window | RefObject<HTMLElement | null>;
}
const Application: React.ForwardRefExoticComponent<ApplicationProps & React.RefAttributes<ApplicationRef>>;Imperative API for creating PixiJS React roots, useful for custom integration scenarios and programmatic application management.
function createRoot(
target: HTMLElement | HTMLCanvasElement,
options?: CreateRootOptions
): Root;
interface CreateRootOptions {
onInit?: (app: PixiApplication) => void;
}
interface Root {
render(children: ReactNode, applicationOptions: ApplicationOptions): Promise<PixiApplication>;
}System for registering PixiJS components for JSX usage, enabling selective imports and bundle size optimization.
function extend(objects: { [key: string]: new (...args: any) => any }): void;Collection of hooks for accessing PixiJS application state, integrating with the ticker system, and dynamically extending components.
function useApplication(): ApplicationState;
function useTick<T>(options: TickerCallback<T> | UseTickOptions<T>): void;
function useExtend(objects: Parameters<typeof extend>[0]): void;Type-safe JSX elements for all PixiJS components, supporting both prefixed (pixiContainer) and unprefixed (container) usage patterns.
interface PixiElements extends PrefixedPixiElements {}
type PixiReactElementProps<T extends new (...args: any) => any> =
BaseNodeProps<InstanceType<T>>
& GraphicsProps<InstanceType<T>>
& EventHandlers
& ConstructorOptions<T>;interface ApplicationRef {
getApplication(): PixiApplication | null;
getCanvas(): HTMLCanvasElement | null;
}
interface ApplicationState {
app: PixiApplication;
isInitialised: boolean;
isInitialising: boolean;
}
interface UseTickOptions<T> {
callback: TickerCallback<T>;
context?: T;
isEnabled?: boolean;
priority?: number;
}
type PixiReactChildNode = BasePixiReactNode | Iterable<BasePixiReactNode> | ReactNode;