skills/pixijs-create/SKILL.md
Use this skill when scaffolding a new PixiJS v8 project with the create-pixi CLI or adding PixiJS to an existing project. Covers npm/yarn/pnpm/bun create commands, interactive vs non-interactive flows, bundler vs creation template categories, available template presets (bundler-vite, bundler-webpack, bundler-esbuild, bundler-import-map, creation-web, framework-react, extension-default), Node version requirements, `npm install pixi.js` for existing projects, post-scaffold dev flow, and the Vite top-level-await production-build gotcha. Triggers on: create pixi.js, npm create, npm install pixi.js, scaffold, template, bundler-vite, bundler-webpack, creation-web, framework-react, new project, existing project, getting started, quick start.
npx skillsauth add pixijs/pixijs-skills pixijs-createInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
create pixi.js is the official CLI for scaffolding a new PixiJS v8 project. Run it with any package manager (npm, yarn, pnpm, bun) and pick a template from the interactive menu, or pass --template to skip prompts. It writes a self-contained project folder; you then cd in, install dependencies, and run the dev script.
Scaffold a new project with interactive prompts:
npm create pixi.js@latest
Or skip prompts by passing a project name and template:
npm create pixi.js@latest my-game -- --template bundler-vite
Then:
cd my-game
npm install
npm run dev
Requires Node.js 18+ or 20+. Some templates (notably creation-web and framework-react) may require a newer Node version; the package manager will warn if so.
If you already have a bundler, framework, or project set up, skip the CLI and install the package directly:
npm install pixi.js
Then import from pixi.js and construct an Application as shown in pixijs-application. The CLI templates are a convenience for new projects; they don't add anything to the library that npm install pixi.js can't give you.
Related skills: pixijs-application (how the scaffolded new Application() + app.init() entry point works), pixijs-core-concepts (renderers and the render loop), pixijs-scene-core-concepts (scene graph fundamentals for the first things you'll add to the stage), pixijs-assets (loading textures, fonts, and bundles the template expects you to drop into public/ or src/assets/).
The command is the same shape for every package manager:
npm create pixi.js@latest
yarn create pixi.js
pnpm create pixi.js
bun create pixi.js
Under npm 7+ you must pass a -- before CLI flags so npm doesn't consume them:
npm create pixi.js@latest my-game -- --template bundler-vite
Yarn, pnpm, and bun don't need the extra separator:
yarn create pixi.js my-game --template bundler-vite
pnpm create pixi.js my-game --template bundler-vite
bun create pixi.js my-game --template bundler-vite
Use . as the project name to scaffold into the current directory.
Running with no arguments walks through prompts:
pixi-project).At the end, the CLI prints the cd + install + dev commands for the manager you invoked it with.
Pass a project name and --template to skip all prompts. This is the form you want for scripts, CI, and quickstart docs:
npm create pixi.js@latest my-game -- --template bundler-vite
Templates fall into two categories:
bundler-*): generic PixiJS setup wired up with your bundler of choice. Use one of these when you want to pick your own structure.creation-*): platform-tailored starters with extras already wired in (AssetPack, sound, UI, scene routing). Use one of these when you want batteries included.framework-*): PixiJS embedded inside a host framework like React.extension-*): scaffolding for building a reusable PixiJS package.For most new projects, bundler-vite is the recommended starting point.
| Template | What you get |
| -------------------- | ------------------------------------------------------------------------------------------------------------ |
| bundler-vite | Vite + TypeScript PixiJS project. The default first-stop template. |
| bundler-vite-js | Vite + plain JavaScript. |
| bundler-webpack | Webpack + TypeScript. |
| bundler-webpack-js | Webpack + plain JavaScript. |
| bundler-esbuild | esbuild + TypeScript. |
| bundler-esbuild-js | esbuild + plain JavaScript. |
| bundler-import-map | No-bundler setup using a browser import map (good for learning / demos). |
| creation-web | PixiJS Creation Engine web template with scene-based game scaffolding, AssetPack, sound, and UI integration. |
| framework-react | React + TypeScript + PixiJS via the @pixi/react package. |
| framework-react-js | React + plain JavaScript + PixiJS. |
| extension-default | Starter for building a reusable PixiJS extension/package. |
The live list is maintained in the create-pixi repo; run npm create pixi.js@latest without arguments to see the current menu if you need to confirm.
Every template ships with the same three-step onboarding:
cd my-game
npm install
npm run dev
npm run dev starts the local dev server on the default port (Vite 5173, webpack 8080, etc.; the template's README has the exact number). Changes to src/ hot-reload without reloading the whole page.
Other scripts every template exposes (names may vary slightly by preset):
npm run build: produce a production build in dist/.npm run preview / npm run serve: serve the production build locally.npm run lint: run the template's configured linter if it ships one.Use . as the project name to write into the current working directory. The CLI refuses to run if non-empty and conflicting files exist unless you confirm the prompt.
mkdir my-game
cd my-game
npm create pixi.js@latest . -- --template bundler-vite
After npm run dev starts, the template opens on a blank or bunny-sprite scene. The usual progression is:
pixijs-application to understand how the template's entry point constructs new Application() and calls await app.init(...), how app.stage / app.renderer / app.canvas hang together, and how the ResizePlugin and TickerPlugin behave by default.pixijs-core-concepts for the renderer and render-loop mental model.pixijs-scene-core-concepts before adding your first non-trivial scene so you know the container-vs-leaf rule upfront.pixijs-assets once you're ready to load real art.-- separator on npm 7+Wrong:
npm create pixi.js@latest my-game --template bundler-vite
Correct:
npm create pixi.js@latest my-game -- --template bundler-vite
npm 7+ consumes flags after the package spec unless you pass -- to forward them. Without the separator, the CLI ignores --template and drops back to the interactive prompt. Yarn, pnpm, and bun don't need the separator.
PixiJS requires Node 18+ or 20+. Some templates (framework-react, creation-web) expect a newer Node for their tooling. Upgrade Node before re-running the CLI if you see an "engines" warning from your package manager.
await app.init() broken in Vite production buildsOn Vite versions <=6.0.6, top-level await works in dev but breaks in production builds, so a bundler-vite project that does this at module scope will fail after npm run build:
const app = new Application();
await app.init({ resizeTo: window }); // broken at module top level in prod
Wrap the init in an async IIFE instead:
(async () => {
const app = new Application();
await app.init({ resizeTo: window });
document.body.appendChild(app.canvas);
})();
Upgrading Vite past 6.0.6 also resolves it, but the IIFE pattern is safe on every version and matches the PixiJS quick-start guide.
development
Use this skill when rendering live HTML/DOM elements (or frozen snapshots of them) as PixiJS v8 textures via the EXPERIMENTAL HTML-in-Canvas browser APIs. Covers the pixi.js/html-source side-effect import, feature-detection with canvas.requestPaint, HTMLSource for a live, repainting element kept interactive in the browser (autoLayout/autoUpdate/autoRequestPaint, requestPaint, isReady, the direct-child-of-canvas + layoutsubtree requirement), ElementImageSource for an immutable captureElementImage() snapshot (autoClose, ready immediately), using the source on a Sprite/Texture/Mesh, fallback-only auto-detection via Texture.from at priority -10, and destroy/cleanup. Triggers on: HTMLSource, ElementImageSource, pixi.js/html-source, requestPaint, captureElementImage, ElementImage, layoutsubtree, autoRequestPaint, autoUpdate, autoClose, HTML in canvas, render DOM to texture, HTMLSourceOptions, ElementImageSourceOptions, HTMLSourceCanvas, experimental.
development
Use this skill first for ANY PixiJS v8 task; it routes to the right specialized skill for the job. Covers the full PixiJS surface: Application setup, the scene graph (Container, Sprite, Graphics, Text, Mesh, ParticleContainer, DOMContainer, GifSprite), rendering (WebGL/WebGPU/Canvas, render loop, custom shaders, filters, blend modes), assets, events, color, math, ticker, accessibility, performance, environments, migration from v7, and project scaffolding. Triggers on: pixi, pixi.js, pixijs, PixiJS, v8, Application, app.init, Sprite, Container, Graphics, Text, Mesh, ParticleContainer, DOMContainer, GifSprite, Assets, Ticker, renderer, WebGL, WebGPU, scene graph, filter, shader, blend mode, texture, BitmapText, create-pixi, how do I draw, how do I render, how do I animate in pixi.
development
Use this skill when rendering text in PixiJS v8. Covers Text for canvas-quality styled labels, BitmapText for cheap per-frame updates via glyph atlas, HTMLText for HTML/CSS markup via SVG, SplitText and SplitBitmapText for per-character animation, TextStyle, tagStyles, constructor options, TextOptions, HTMLTextOptions, BitmapText, SplitTextOptions, SplitBitmapTextOptions. Triggers on: Text, BitmapText, HTMLText, SplitText, SplitBitmapText, TextStyle, HTMLTextStyle, BitmapFont.install, tagStyles, fontFamily, wordWrap.
data-ai
Use this skill when rendering thousands of lightweight sprites in PixiJS v8. Covers ParticleContainer with Particle instances, addParticle/removeParticle, particleChildren array, dynamicProperties (vertex, position, rotation, uvs, color), boundsArea, roundPixels, update. Triggers on: ParticleContainer, Particle, IParticle, addParticle, particleChildren, dynamicProperties, boundsArea, particle effects, constructor options, ParticleContainerOptions, ParticleOptions.