New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

phaser-jsx

Package Overview
Dependencies
Maintainers
1
Versions
49
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

phaser-jsx

Use JSX in Phaser.

latest
Source
npmnpm
Version
0.13.7
Version published
Weekly downloads
357
-25.62%
Maintainers
1
Weekly downloads
 
Created
Source

phaser-jsx

NPM

NPM version build codecov

📝 Use JSX in Phaser.

Examples

Quick Start

With JSX:

// index.jsx
import Phaser from 'phaser';
import { Text, render } from 'phaser-jsx';

new Phaser.Game({
  scene: {
    create() {
      render(<Text text="Hello, world!" />, this);
    },
  },
});

Without JSX:

// index.js
import Phaser from 'phaser';
import { jsx, render } from 'phaser-jsx';

new Phaser.Game({
  scene: {
    create() {
      render(jsx(Phaser.GameObjects.Text, { text: 'Hello, world!' }), this);
    },
  },
});

Install

NPM:

npm install phaser-jsx

Yarn:

yarn add phaser-jsx

CDN:

<script src="https://unpkg.com/phaser@latest/dist/phaser.min.js"></script>
<script src="https://unpkg.com/phaser-jsx@latest/umd/phaser-jsx.min.js"></script>

Usage

ES Modules:

import { createElement, render } from 'phaser-jsx';

CommonJS:

const { createElement, render } = require('phaser-jsx');

UMD:

<script src="https://unpkg.com/phaser@latest/dist/phaser.min.js"></script>
<script src="https://unpkg.com/phaser-jsx@latest/umd/phaser-jsx.min.js"></script>
<script>
  const { render, jsx } = window.PhaserJSX;
</script>

TypeScript

For better type support, install @types/react:

npm install @types/react --save-dev

Import the GameObject from phaser-jsx instead of phaser:

import { Text } from 'phaser-jsx';

[!TIP] All GameObjects exported from phaser-jsx are aliases of the GameObjects from phaser.

Update your tsconfig.json:

{
  "compilerOptions": {
    "jsx": "react-jsx",
    "jsxImportSource": "phaser-jsx"
  }
}

Vite

Update your Vite config:

// vite.config.mjs
import { defineConfig } from 'vite';

export default defineConfig({
  esbuild: {
    jsxImportSource: 'phaser-jsx',
  },
});

JSX Pragma

If you're not using jsxImportSource, you can set a JSX pragma at the top of your file:

/** @jsx jsx */
import { jsx } from 'phaser-jsx';

How Does It Work?

This package follows React conventions like having createElement and jsx-runtime.

The render function renders game objects inside a scene.

If you need nesting and relative positioning, use Container:

<Container>
  <Text text="Child 1" />
  <Text text="Child 2" />
</Container>

Hooks

useRef

Create a ref for your game object:

import { useRef } from 'phaser-jsx';

function MyComponent() {
  const textRef = useRef<Phaser.GameObjects.Text>();
  // ...
}

Pass your ref to the JSX element:

// ...
return <Text ref={textRef} onPointerDown={handleClick} />;

Access your game object:

function handleClick() {
  textRef.current?.text = 'Clicked';
}

Alternatively, you can get the game object with a callback ref:

<Text
  ref={(gameObject) => {
    gameObject.text = 'Hello, world!';
  }}
/>

useScene

Retrieve the current Scene with the useScene hook:

import { useScene } from 'phaser-jsx';

function MyComponent() {
  const scene = useScene();
  // ...
}

[!WARNING] Don't use the useScene hook if you start multiple Scenes.

Type your Scene with TypeScript:

class MyScene extends Phaser.Scene {
  // ...
}

const scene = useScene<MyScene>();

Release

Release is automated with Release Please.

License

MIT

Keywords

phaser-jsx

FAQs

Package last updated on 26 Aug 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts