Quick answer: A GPUParticles2D needs Emitting on and a Process Material (a ParticleProcessMaterial) to draw anything. If it emits once and stops, One Shot is on. If it disappears when the node moves off-screen, enlarge the Visibility Rect. If it works on desktop but not on web or old devices, convert it to CPUParticles2D.

Particles have more required settings than most nodes, and missing any one of them produces the same result: nothing on screen. Check them in this order.

1. Emitting and the process material

2. Particles that exist but cannot be seen

3. One shot and explosiveness

With One Shot on, the system emits amount particles once. For an explosion, also set Explosiveness near 1. To retrigger:

$Explosion.restart()

Changing amount or lifetime at runtime restarts the system, which can cut off particles already alive.

4. Visibility rect culling

GPUParticles2D is culled using its Visibility Rect, not its particles' real positions. If particles travel outside that rectangle, the whole system disappears when the rect goes off-screen. Select the node and use Particles > Generate Visibility Rect in the toolbar, or enlarge it manually.

5. Local vs world coordinates

With Local Coords off (the default), particles stay where they were emitted as the node moves — a trail. With it on, they move with the node. If particles seem to be "somewhere else", this is often why.

6. Renderer and platform support

GPU particles depend on renderer support. If particles work in Forward+ but not with the Compatibility renderer or on certain web/mobile devices, select the node and use Convert to CPUParticles2D. CPUParticles2D supports nearly all the same settings and runs everywhere.

7. Hidden behind something

Particles obey normal draw order: z_index, tree order and canvas layers. A background drawn later in the tree, or on a higher CanvasLayer, hides them.

First-emission stutter in exports

If particles appear but cause a hitch the first time they play in an exported build, it is shader compilation. Emit each effect once off-screen during a loading screen to warm it up.

Related fixes