Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
pixijs avatar

Pixijs Core Concepts

  • 3.1k installs
  • 293 repo stars
  • Updated June 4, 2026
  • pixijs/pixijs-skills

pixijs-core-concepts explains PixiJS v8 renderer backends, the render loop, systems-and-pipes architecture, and environment adapters.

About

PixiJS Core Concepts explains how PixiJS v8 puts pixels on screen through renderer selection, the per-frame render loop, and environment adaptation. autoDetectRenderer picks WebGLRenderer, WebGPURenderer, or CanvasRenderer based on a preference array such as webgpu then webgl, with WebGPU fastest where supported and WebGL as fallback. The TickerPlugin registers renderer.render at UPDATE_PRIORITY.LOW while user callbacks at NORMAL or HIGH run first for physics or game logic. Renderers combine Systems for textures, buffers, filters, and masks with RenderPipes per renderable type like sprites, graphics, and text. DOMAdapter abstracts canvas creation, image loading, and fetch for Web Workers or SSR when set before Application.init. The skill documents common mistakes including accessing app.renderer before await init, setting DOMAdapter too late, and treating preference as a guarantee without checking renderer.name. Related skills cover Application setup, ticker priorities, environments, custom RenderPipes, and scene graph basics.

  • autoDetectRenderer chooses webgl, webgpu, or canvas with preference hints not guarantees.
  • TickerPlugin drives renderer.render at LOW priority after NORMAL and HIGH callbacks.
  • Renderer architecture splits Systems lifecycle services from RenderPipes per renderable type.
  • DOMAdapter must be set before Application.init for Workers, SSR, or strict CSP.
  • Common mistakes cover async init, late adapter swaps, and backend-specific feature branching.

Pixijs Core Concepts by the numbers

  • 3,130 all-time installs (skills.sh)
  • +224 installs in the week ending Jul 28, 2026 (Skillselion tracking)
  • Ranked #155 of 2,277 Frontend Development skills by installs in the Skillselion catalog
  • Security screen: LOW risk (skills.sh audit)
  • Data as of Jul 28, 2026 (Skillselion catalog sync)
At a glance

pixijs-core-concepts capabilities & compatibility

Capabilities
webgl, webgpu, and canvas backend selection guid · ticker priority ordering relative to render call · systems vs renderpipes mental model · domadapter setup for worker and ssr targets · async application.init prerequisite enforcement · backend specific feature gating via renderer.nam
Use cases
frontend
npx skills add https://github.com/pixijs/pixijs-skills --skill pixijs-core-concepts

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs3.1k
repo stars293
Security audit3 / 3 scanners passed
Last updatedJune 4, 2026
Repositorypixijs/pixijs-skills

How does PixiJS v8 choose a GPU backend, schedule frames, and adapt to Workers or SSR contexts?

Understand PixiJS v8 rendering: backend selection, render loop, systems-and-pipes architecture, and environment adapters.

Who is it for?

Developers learning PixiJS v8 rendering fundamentals before Application, ticker, or custom pipe work.

Skip if: Skip when you only need scene graph Container basics; use pixijs-scene-core-concepts instead.

When should I use this skill?

User asks about PixiJS renderer, WebGL, WebGPU, render loop, systems, pipes, autoDetectRenderer, or environments.

What you get

Correct Application.init flow, renderer.name checks, ticker priority ordering, and pre-init DOMAdapter setup.

  • Renderer backend decision
  • Render loop integration plan
  • Environment adapter configuration

By the numbers

  • Covers 3 PixiJS v8 renderer backends: WebGLRenderer, WebGPURenderer, and CanvasRenderer

Files

SKILL.mdMarkdownGitHub ↗

Foundational model for how PixiJS v8 gets pixels on the screen: the renderer decides which GPU backend to use, the render loop drives per-frame work, and the environment layer adapts the library to browser, Web Worker, or SSR contexts. For the scene graph itself (Containers, transforms, destroy), see pixijs-scene-core-concepts.

Quick Start

console.log(app.renderer.name); // 'webgl' | 'webgpu' | 'canvas'

app.ticker.add((ticker) => {
  sprite.rotation += 0.01 * ticker.deltaTime;
});

const tex = app.renderer.extract.texture({ target: app.stage });

app.renderer.render({ container: app.stage });

app.renderer is the WebGLRenderer, WebGPURenderer, or CanvasRenderer chosen by autoDetectRenderer. The TickerPlugin drives renderer.render() automatically; call it manually only with autoStart: false. Backend selection happens in Application.init({ preference }); see pixijs-application for setup.

Related skills: pixijs-application (Application construction and lifecycle), pixijs-ticker (per-frame logic, priorities, FPS capping), pixijs-environments (Web Worker, SSR, strict CSP), pixijs-custom-rendering (writing a RenderPipe), pixijs-scene-core-concepts (scene graph basics).

Topics

TopicReferenceWhen
Choosing a backendreferences/renderers.mdPreference forms, per-renderer options, systems and pipes
Per-frame executionreferences/render-loop.mdPriority order, time units, manual rendering

For deep dives into any single topic, open the corresponding reference file. Non-browser targets (DOMAdapter, WebWorkerAdapter, custom adapters, strict CSP) are covered in the pixijs-environments skill.

Decision guide

  • Setting up an Application? Start with pixijs-application. This skill explains what the renderer does under the hood.
  • Choosing between WebGL and WebGPU? Use ['webgpu', 'webgl'] as your preference array. WebGPU is fastest where available; WebGL is the reliable fallback. See references/renderers.md.
  • Running in a Web Worker? Set DOMAdapter.set(WebWorkerAdapter) before app.init. See the pixijs-environments skill for complete setup.
  • Need manual control over when rendering happens? Set autoStart: false and call app.renderer.render(app.stage) from your own loop. See references/render-loop.md.
  • Integrating with a physics library? Add your update at UPDATE_PRIORITY.HIGH so physics runs before the render at LOW. See references/render-loop.md.
  • Writing a custom renderable? Implement a RenderPipe. See pixijs-custom-rendering skill.
  • Running under strict CSP? Import 'pixi.js/unsafe-eval'. See the pixijs-environments skill.

Quick concepts

Renderer = systems + pipes

Each renderer is composed of Systems (lifecycle services: textures, buffers, state, filters, masks) and RenderPipes (per-renderable instruction builders: sprite, graphics, mesh, particle, text, tiling). Writing a custom renderable means implementing a RenderPipe and registering it via extensions.

The render loop

app.ticker.add(fn) registers a callback that runs every frame. The TickerPlugin registers app.render() at UPDATE_PRIORITY.LOW, so ticker callbacks at NORMAL or HIGH run before the draw. Disable the plugin with autoStart: false for manual control.

Environments

DOMAdapter abstracts every DOM call PixiJS makes (canvas creation, image loading, fetch, XML parsing). Swap with DOMAdapter.set(WebWorkerAdapter) for Workers or implement a custom Adapter for Node/SSR. Must be done before Application.init.

Common Mistakes

[HIGH] Accessing app.renderer before init() resolves

Wrong:

const app = new Application();
app.init({ width: 800, height: 600 });
console.log(app.renderer.name); // undefined — init() is async

Correct:

const app = new Application();
await app.init({ width: 800, height: 600 });
console.log(app.renderer.name); // 'webgl' | 'webgpu' | 'canvas'

Application.init() is async. app.renderer, app.canvas, and app.screen do not exist until after the promise resolves.

[HIGH] Setting DOMAdapter after Application.init

Wrong:

const app = new Application();
await app.init({ width: 800, height: 600 });
DOMAdapter.set(WebWorkerAdapter); // too late — init already allocated resources

Correct:

DOMAdapter.set(WebWorkerAdapter);
const app = new Application();
await app.init({ width: 800, height: 600 });

The adapter abstracts DOM calls the renderer makes during construction (canvas creation, image loading, fetch). Swap it before init() or the wrong adapter is baked into the renderer.

[MEDIUM] Treating preference as a guarantee

Wrong:

await app.init({ preference: "webgpu" });
// assume WebGPU is active
useWebGPUOnlyFeature(app.renderer);

Correct:

await app.init({ preference: "webgpu" });
if (app.renderer.name === "webgpu") {
  useWebGPUOnlyFeature(app.renderer);
}

preference is a hint, not a demand. If the browser lacks WebGPU support, PixiJS falls back to WebGL (or Canvas). Always branch on renderer.name for backend-specific code.

API Reference

Related skills

How it compares

Pick pixijs-core-concepts over animation or sprite skills when the problem is renderer backend choice or frame pipeline behavior, not asset loading or tweening.

FAQ

Who is pixijs-core-concepts for?

Frontend developers implementing PixiJS v8 apps who need renderer and loop fundamentals first.

When is WebGPU guaranteed?

Never. preference is a hint; always branch on app.renderer.name after await init().

When must DOMAdapter be set?

Before Application.init so canvas creation and fetch use the Worker or SSR adapter.

Is Pixijs Core Concepts safe to install?

skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.