Datapack Codex

Vanilla particles

Every particle the game registers, animated from its own texture frames — so you can see what is available, pick one, and leave with the identifier and a command that runs.

115 particles with a definition: 54 animate across multiple frames and 61 are a single frame. Sprites are scaled 2× and drawn with nearest-neighbour sampling, so a 16×16 texture stays 16×16.

ambient_entity_effect8 frames · 8px
angry_villagersingle frame · 8px
ashsingle frame · 8px
bubblesingle frame · 8px
bubble_column_upsingle frame · 8px
bubble_pop5 frames · 16px
campfire_cosy_smoke12 frames · 16px
campfire_signal_smoke12 frames · 16px
cherry_leaves12 frames · 3px
cloud8 frames · 8px
compostersingle frame · 8px
copper_fire_flamesingle frame · 8px
crimson_sporesingle frame · 8px
critsingle frame · 8px
current_downsingle frame · 8px
damage_indicatorsingle frame · 8px
dolphinsingle frame · 8px
dragon_breath3 frames · 8px
dripping_dripstone_lavasingle frame · 8px
dripping_dripstone_watersingle frame · 8px
dripping_honeysingle frame · 8px
dripping_lavasingle frame · 8px
dripping_obsidian_tearsingle frame · 8px
dripping_watersingle frame · 8px
dust8 frames · 8px
dust_color_transition8 frames · 8px
dust_plume8 frames · 8px
effect8 frames · 8px
egg_cracksingle frame · 8px
electric_sparksingle frame · 8px
enchant26 frames · 8px
enchanted_hitsingle frame · 8px
end_rod8 frames · 8px
entity_effect8 frames · 8px
explosion16 frames · 32px
falling_dripstone_lavasingle frame · 8px
falling_dripstone_watersingle frame · 8px
falling_dust8 frames · 8px
falling_honeysingle frame · 8px
falling_lavasingle frame · 8px
falling_nectarsingle frame · 8px
falling_obsidian_tearsingle frame · 8px
falling_spore_blossomsingle frame · 8px
falling_watersingle frame · 8px
fireflysingle frame · 8px
firework8 frames · 8px
fishing4 frames · 8px
flamesingle frame · 8px
flashsingle frame · 32px
geyser_base8 frames · 16px
geyser_plume8 frames · 16px
geyser_poof8 frames · 16px
glowsingle frame · 8px
glow_squid_ink8 frames · 8px
gust12 frames · 32px
happy_villagersingle frame · 8px
heartsingle frame · 8px
infestedsingle frame · 8px
instant_effect8 frames · 8px
landing_honeysingle frame · 8px
landing_lavasingle frame · 8px
landing_obsidian_tearsingle frame · 8px
large_smoke8 frames · 8px
lavasingle frame · 8px
myceliumsingle frame · 8px
nautilussingle frame · 8px
notesingle frame · 8px
noxious_gas8 frames · 16px
ominous_spawningsingle frame · 16px
orange_poplar_leaves4 frames · 5px
pale_oak_leaves12 frames · 5px
pause_mob_growthsingle frame · 8px
poof8 frames · 8px
portal8 frames · 8px
raid_omensingle frame · 5px
rain4 frames · 8px
red_poplar_leaves4 frames · 5px
reset_mob_growthsingle frame · 8px
reverse_portal8 frames · 8px
scrapesingle frame · 8px
sculk_charge7 frames · 16px
sculk_charge_pop4 frames · 16px
sculk_soul11 frames · 16px
shrieksingle frame · 13px
small_flamesingle frame · 8px
small_gust7 frames · 8px
smoke8 frames · 8px
sneeze8 frames · 8px
snowflake8 frames · 8px
sonic_boom16 frames · 32px
soul11 frames · 16px
soul_fire_flamesingle frame · 8px
spit8 frames · 8px
splash4 frames · 8px
spore_blossom_airsingle frame · 8px
squid_ink8 frames · 8px
sulfur_bubblessingle frame · 8px
sulfur_cube_goosingle frame · 16px
sweep_attack8 frames · 32px
tinted_leaves12 frames · 5px
totem_of_undying8 frames · 8px
trailsingle frame · 8px
trial_omensingle frame · 5px
trial_spawner_detection5 frames · 8px
trial_spawner_detection_ominous5 frames · 8px
underwatersingle frame · 8px
vault_connectionsingle frame · 8px
vibration7 frames · 18px
warped_sporesingle frame · 8px
wax_offsingle frame · 8px
wax_onsingle frame · 8px
white_ashsingle frame · 8px
white_smoke8 frames · 8px
witch8 frames · 8px
yellow_poplar_leaves4 frames · 5px

What this shows, and what it does not

Each loop is the particle's own frame sequence, read from assets/minecraft/particles/<id>.json in the game files. That list is the animation the game plays, so the frames here are reproduced rather than approximated.

⚠ Not the effect

Only the frames are data. A particle's motion, gravity, colour tint, size and lifetime are hardcoded in Java and are not represented anywhere in the game's files. So this page shows what a particle's texture does; it does not show what the effect looks like in the world. A particle that drifts, fades or is tinted by an argument will look different in game, and several are drawn tinted at runtime from a colour you pass in.

Particles with no texture of their own

14 of the 128 registered particles have no definition file, because their appearance is supplied when they are spawned — from a block state, an item stack, or a colour. There is nothing to animate here, which is why they are listed rather than drawn:

Using one in a pack

The copy button on each card gives a /particle line that runs as written, including the extra argument for the particles that require one. Paste it into a function to see the real thing in the world, which is the only place the behaviour actually exists.

data/<namespace>/function/demo.mcfunction

# count 0 with a non-zero speed makes delta a DIRECTION rather than a spread
particle minecraft:flame ~ ~1 ~ 0 1 0 0.1 0
# count above 0 makes delta a box to scatter within, and speed random per particle
particle minecraft:flame ~ ~1 ~ 0.3 0.3 0.3 0.02 40
💡 Best practice

The two forms above are the thing worth knowing about /particle: with count at zero the delta arguments stop meaning “spread” and start meaning “direction”, and speed becomes the magnitude. It is the same command with the same argument names doing two different jobs.

Block particles take their state as options

Five particles carry a block state, and the field they carry it in was renamed at 1.20.5. Passing the old form does not merely draw the wrong particle — the game refuses the whole command, and in a function that means the function never loads.

ParticleUp to 1.20.4From 1.20.5
block, falling_dust, block_marker, dust_pillar, block_crumble valueblock_state
Wrong on 26.2 — the pre-1.20.5 form
particle minecraft:block minecraft:stone ~ ~ ~ 0.5 0.5 0.5 0 10
Correct up to 26.2 — the state is an option map
particle minecraft:block{block_state:{Name:"minecraft:stone"}} ~ ~ ~ 0.5 0.5 0.5 0 10
Correct from 26.3 Snapshot 7 — the keys were renamed
particle minecraft:block{block_state:{id:"minecraft:stone"}} ~ ~ ~ 0.5 0.5 0.5 0 10
⚠ Block states were renamed in 26.3 Snapshot 7

Everywhere a block state is written as a compound — not just in particles — the keys changed in 26.3 Snapshot 7, and stayed that way through release:

Up to 26.2From 26.3
Nameid
Propertiesproperties

26.3 also accepts a bare block id in place of the compound entirely. A pack carrying the old keys on 26.3 fails to load the file that holds them, so this bites the same way the 1.20.5 rename did — reported from production during the 26.3 port of a structure pack, where eleven functions stopped loading at once.

💡 The short form is legal too

Since 1.20.5 block_state accepts either a plain block id or a full block state, so minecraft:block{block_state:"minecraft:stone"} is valid and the compound is only needed when you are setting properties.

⚠ It kills the whole function, silently

The old form parses as an empty option map, so the failure is a hard one:

Can't parse particle options: No key block_state in MapLike[{}]

A function that fails to parse is never registered, so it is not that one particle line misbehaves — nothing in the file runs, and anything calling it silently does nothing. Reported from production by a sibling pack, where two functions had been dead since the day they were written. Field names and version boundary confirmed against vanilla-mcdoc @ eea955a6afdb.

Sources