is the official CLI for scaffolding a new PixiJS v8 project. Run it with any package manager (
,
,
,
) and pick a template from the interactive menu, or pass
to skip prompts. It writes a self-contained project folder; you then
in, install dependencies, and run the dev script.
Quick Start
Scaffold a new project with interactive prompts:
bash
npm create pixi.js@latest
Or skip prompts by passing a project name and template:
bash
npm create pixi.js@latest my-game -- --template bundler-vite
Then:
bash
cd my-game
npm install
npm run dev
Requires Node.js 18+ or 20+. Some templates (notably
and
) may require a newer Node version; the package manager will warn if so.
Adding PixiJS to an existing project
If you already have a bundler, framework, or project set up, skip the CLI and install the package directly:
Then import from
and construct an
as shown in
. The CLI templates are a convenience for new projects; they don't add anything to the library that
can't give you.
Related skills: (how the scaffolded
+
entry point works),
(renderers and the render loop),
pixijs-scene-core-concepts
(scene graph fundamentals for the first things you'll add to the stage),
(loading textures, fonts, and bundles the template expects you to drop into
or
).
Core Patterns
Choose a package manager
The command is the same shape for every package manager:
bash
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:
bash
npm create pixi.js@latest my-game -- --template bundler-vite
Yarn, pnpm, and bun don't need the extra separator:
bash
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.
Interactive flow
Running with no arguments walks through prompts:
- Project name (defaults to ).
- Framework / template category.
- Variant (TypeScript vs JavaScript where applicable).
- Whether to install dependencies immediately (some runners).
At the end, the CLI prints the
+ install + dev commands for the manager you invoked it with.
Non-interactive flow
Pass a project name and
to skip all prompts. This is the form you want for scripts, CI, and quickstart docs:
bash
npm create pixi.js@latest my-game -- --template bundler-vite
Available template presets
Templates fall into two categories:
- Bundler templates (): generic PixiJS setup wired up with your bundler of choice. Use one of these when you want to pick your own structure.
- Creation templates (): platform-tailored starters with extras already wired in (AssetPack, sound, UI, scene routing). Use one of these when you want batteries included.
- Framework templates (): PixiJS embedded inside a host framework like React.
- Extension templates (): scaffolding for building a reusable PixiJS package.
For most new projects,
is the recommended starting point.
| Template | What you get |
|---|
| Vite + TypeScript PixiJS project. The default first-stop template. |
| Vite + plain JavaScript. |
| Webpack + TypeScript. |
| Webpack + plain JavaScript. |
| esbuild + TypeScript. |
| esbuild + plain JavaScript. |
| No-bundler setup using a browser import map (good for learning / demos). |
| PixiJS Creation Engine web template with scene-based game scaffolding, AssetPack, sound, and UI integration. |
| React + TypeScript + PixiJS via the package. |
| React + plain JavaScript + PixiJS. |
| Starter for building a reusable PixiJS extension/package. |
The live list is maintained in the
repo; run
npm create pixi.js@latest
without arguments to see the current menu if you need to confirm.
Post-scaffold flow
Every template ships with the same three-step onboarding:
bash
cd my-game
npm install
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
hot-reload without reloading the whole page.
Other scripts every template exposes (names may vary slightly by preset):
- : produce a production build in .
- / : serve the production build locally.
- : run the template's configured linter if it ships one.
Scaffolding into an existing directory
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.
bash
mkdir my-game
cd my-game
npm create pixi.js@latest . -- --template bundler-vite
Next steps
After
starts, the template opens on a blank or bunny-sprite scene. The usual progression is:
- Read to understand how the template's entry point constructs and calls , how / / hang together, and how the ResizePlugin and TickerPlugin behave by default.
- Read for the renderer and render-loop mental model.
- Read
pixijs-scene-core-concepts
before adding your first non-trivial scene so you know the container-vs-leaf rule upfront.
- Drop in textures via once you're ready to load real art.
Common Mistakes
[HIGH] Missing separator on npm 7+
Wrong:
bash
npm create pixi.js@latest my-game --template bundler-vite
Correct:
bash
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
and drops back to the interactive prompt. Yarn, pnpm, and bun don't need the separator.
[MEDIUM] Running with an old Node version
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.
[MEDIUM] Top-level broken in Vite production builds
On Vite versions
, top-level
works in dev but breaks in production builds, so a
project that does this at module scope will fail after
:
ts
const app = new Application();
await app.init({ resizeTo: window }); // broken at module top level in prod
Wrap the init in an async IIFE instead:
ts
(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.
API Reference