Updated Nov 11, 2026

Shadow Priest

PvE guide, updated for Patch 12.1.5

DPS Rotation & Cooldowns

How to play Shadow Priest in each rotation style: the full rotation SimulationCraft sims play by default, and the game’s Assisted Highlight and One Button rotations beside it.

Rotation style comparison

How Shadow Priest’s DPS compares when using the game’s assisted modes instead of the full rotation, based on Single Target simulations.

  • Full rotationBaseline
  • Assisted Highlight-28.8%
  • One Button-33.6%
Compare in rankings

The full rotation is the one SimulationCraft’s sims play by default. Its priority list is SimC’s own for the spec, read here for one build and one kind of fight.

Rotation

Beta

Shadow Priest’s list reads best as SimC writes it

With this build, 11 of its 29 rows would show an expression as SimC writes it, which is too many to follow as steps. The abilities it uses are below in the order the list first uses them, and the list itself under them.

Abilities the list uses

16 abilities

Before the pull

Things to do before entering combat.

  1. 1ShadowformShadowform not active
  2. 2Racial abilityWhen ready
  3. 3Mind BlastWith the 4-piece set bonus
  4. 4Tentacle SlamWhen ready

Cooldowns

When each cooldown was used across the sample fight, so you can see how often each comes back and which ones line up.

  • Shadow Word: PainShadow Word: Pain: 5 casts, at 0:01, 1:37, 3:00, 3:59, 5:145
  • HaloHalo: 6 casts, at 0:02, 1:03, 2:04, 3:06, 4:07, 5:086
  • VoidformVoidform: 3 casts, at 0:03, 2:05, 4:083
  • Light's PotentialLight's Potential: 2 casts, at 0:04, 5:242
  • Power InfusionPower Infusion: 3 casts, at 0:04, 2:06, 4:093
  • On-use itemsOn-use items: 4 casts, at 0:04, 2:06, 4:09, 5:394

Sample opener

One simulated fight from the start, played by this list on the profile in the Gear section with the guide’s Single target build, whichever build the list above is read for. Procs and timing change the order from fight to fight, so use it to get a feel for the start rather than as a script.

Time
Ability
New
Gone
Up
Pre-pull
0:00.000
0:00.000
Pull
0:00.000
0:01.744
0:02.615
0:03.484

The full priority list

simc@de11f57

Everything above is read from this SimulationCraft list, including the steps the page hides (the potion and on-use items) and the branches your build and fight leave out.

priest_shadow.simc, 99 lines
# This default action priority list is automatically created based on your character.
# It is a attempt to provide you with a action list that is both simple and practicable,
# while resulting in a meaningful and good simulation. It may not result in the absolutely highest possible dps.
# Feel free to edit, adapt and improve it to your own needs.
# SimulationCraft is always looking for updates and improvements to the default action lists.

# Executed before combat begins. Accepts non-harmful actions only.
actions.precombat=snapshot_stats
actions.precombat+=/shadowform,if=!buff.shadowform.up
actions.precombat+=/variable,name=trinket_1_buffs,value=(trinket.1.has_buff.intellect|trinket.1.has_buff.mastery|trinket.1.has_buff.versatility|trinket.1.has_buff.haste|trinket.1.has_buff.crit|trinket.1.is.signet_of_the_priory)&(trinket.1.cooldown.duration>=20)
actions.precombat+=/variable,name=trinket_2_buffs,value=(trinket.2.has_buff.intellect|trinket.2.has_buff.mastery|trinket.2.has_buff.versatility|trinket.2.has_buff.haste|trinket.2.has_buff.crit|trinket.2.is.signet_of_the_priory)&(trinket.2.cooldown.duration>=20)
actions.precombat+=/variable,name=dr_force_prio,default=0,op=reset
actions.precombat+=/variable,name=me_force_prio,default=0,op=reset
actions.precombat+=/variable,name=max_vts,default=12,op=reset
actions.precombat+=/variable,name=is_vt_possible,default=0,op=reset
actions.precombat+=/arcane_torrent
actions.precombat+=/potion,if=potion.liquid_luster
# Crushing Void from Tentacle Slam is reset on pull, open with Mind Blast instead.
actions.precombat+=/mind_blast,if=set_bonus.mid2_4pc
actions.precombat+=/tentacle_slam

# Executed every time the actor is available.
actions=variable,name=holding_tentacle_slam,op=set,value=raid_event.adds.in<15
actions+=/call_action_list,name=aoe,if=active_enemies>2
actions+=/run_action_list,name=main

actions.aoe=call_action_list,name=aoe_variables

actions.aoe_variables=variable,name=max_vts,op=set,default=12,value=spell_targets.vampiric_touch>?12
actions.aoe_variables+=/variable,name=is_vt_possible,op=set,value=0,default=1
actions.aoe_variables+=/variable,name=is_vt_possible,op=set,value=1,target_if=max:(target.time_to_die*dot.vampiric_touch.refreshable),if=target.time_to_die>=18
# TODO: Revamp to fix undesired behavior with unstacked fights
actions.aoe_variables+=/variable,name=dots_up,op=set,value=(active_dot.vampiric_touch>=variable.max_vts|!variable.is_vt_possible)&(active_dot.shadow_word_pain>=active_dot.vampiric_touch)
actions.aoe_variables+=/variable,name=holding_tentacle_slam,op=set,value=(variable.max_vts-active_dot.vampiric_touch)<4&raid_event.adds.in>15|raid_event.adds.in<10&raid_event.adds.count>(variable.max_vts-active_dot.vampiric_touch),if=variable.holding_tentacle_slam&action.tentacle_slam.enabled&raid_event.adds.exists
actions.aoe_variables+=/variable,name=manual_vts_applied,op=set,value=(active_dot.vampiric_touch+6*!variable.holding_tentacle_slam)>=variable.max_vts|!variable.is_vt_possible

# TODO: Add holding condition for weird fight times to potion with execute
actions.cds=potion,if=(((buff.voidform.up|!talent.voidform)&buff.power_infusion.up)&(fight_remains>=320|time_to_bloodlust>=320|buff.bloodlust.react)|fight_remains<=30)
actions.cds+=/fireblood,if=((buff.voidform.up|!talent.voidform)&buff.power_infusion.up)|fight_remains<=8
actions.cds+=/berserking,if=((buff.voidform.up|!talent.voidform)&buff.power_infusion.up)|fight_remains<=12
actions.cds+=/blood_fury,if=((buff.voidform.up|!talent.voidform)&buff.power_infusion.up)|fight_remains<=15
actions.cds+=/ancestral_call,if=((buff.voidform.up|!talent.voidform)&buff.power_infusion.up)|fight_remains<=15
actions.cds+=/invoke_external_buff,name=power_infusion,if=(buff.voidform.up|!talent.voidform)&!buff.power_infusion.up
actions.cds+=/invoke_external_buff,name=bloodlust,if=buff.power_infusion.up&fight_remains<120|fight_remains<=40
# Sync Power Infusion with Voidform
actions.cds+=/power_infusion,if=(buff.voidform.up|!talent.voidform)&!buff.power_infusion.up
actions.cds+=/halo
actions.cds+=/use_item,name=stormbound_emblem_of_dazar,if=cooldown.voidform.remains<=2&active_dot.shadow_word_pain>=active_dot.vampiric_touch&!buff.crushing_void.up
actions.cds+=/voidform,if=active_dot.shadow_word_pain>=active_dot.vampiric_touch
actions.cds+=/call_action_list,name=trinkets
# Use Desperate Prayer to heal up should Shadow Word: Death or other damage bring you below 75%
actions.cds+=/desperate_prayer,if=health.pct<=75

# Use Holy Nova during Halo to acquire Twist of Fate when Lightburst can heal an ally and Twist of Fate is not active.
actions.heal_for_tof=holy_nova,if=talent.lightburst

actions.main=variable,name=dots_up,op=set,value=active_dot.vampiric_touch=active_enemies&active_dot.shadow_word_pain>=active_dot.vampiric_touch,if=active_enemies<3
actions.main+=/call_action_list,name=cds,if=fight_remains<30|target.time_to_die>15&(!variable.holding_tentacle_slam|active_enemies>2)&variable.dots_up
# High Priority Shadow Word: Death when Devour Matter is active (target shielded or forced)
actions.main+=/shadow_word_death,target_if=max:(target.health.pct<=20)*100+dot.shadow_word_madness.ticking,if=(priest.force_devour_matter|target.has_absorb)&talent.devour_matter
actions.main+=/tentacle_slam,target_if=min:dot.vampiric_touch.remains,if=!dot.vampiric_touch.ticking&target.time_to_die>=10&active_dot.vampiric_touch<5
actions.main+=/vampiric_touch,target_if=min:dot.vampiric_touch.remains,if=!dot.vampiric_touch.ticking&target.time_to_die>=10&active_dot.vampiric_touch<5
actions.main+=/shadow_word_madness,target_if=max:target.time_to_die*(dot.shadow_word_madness.remains<=gcd.max*2|variable.dr_force_prio|!talent.distorted_reality&variable.me_force_prio),if=active_dot.shadow_word_madness<=1&dot.shadow_word_madness.remains<=gcd.max|insanity.deficit<=35&(cooldown.voidform.remains>25|target.time_to_die<25|active_enemies>1|insanity.deficit<=5)|buff.mind_devourer.react|!raid_event.adds.exists&target.time_to_die<=10|buff.entropic_rift.up&(cooldown.voidform.remains>=75|!talent.ancient_madness)|buff.voidform.up
actions.main+=/tentacle_slam,target_if=min:dot.vampiric_touch.remains,if=dot.vampiric_touch.refreshable&(!in_flight|active_dot.vampiric_touch+6<active_enemies)|cooldown.tentacle_slam.full_recharge_time<=gcd.max*2
# Use Void Torrent if it will get near full Mastery Value
actions.main+=/void_torrent,target_if=max:(dot.shadow_word_madness.remains*1000+target.time_to_die),if=!variable.holding_tentacle_slam&variable.dots_up
# Put out Shadow Word: Pain on enemies that will live at least 12s as a filler when talented into Invoked Nightmare.
actions.main+=/shadow_word_pain,target_if=max:(refreshable*100000+target.time_to_die+dot.vampiric_touch.ticking*10000),if=talent.invoked_nightmare&refreshable&target.time_to_die>12&(dot.vampiric_touch.ticking|action.tentacle_slam.in_flight)
actions.main+=/void_volley,if=cooldown.voidform.up
actions.main+=/void_blast,target_if=max:(dot.shadow_word_madness.remains*1000+target.time_to_die)
actions.main+=/mind_blast,target_if=max:dot.shadow_word_madness.remains,if=(!buff.mind_devourer.react|!talent.mind_devourer)&(!talent.void_blast|!talent.thought_harvester|cooldown.void_torrent.remains>=gcd.max*2|variable.holding_tentacle_slam|!variable.dots_up)
actions.main+=/mind_flay_insanity,target_if=max:dot.shadow_word_madness.remains
# Use Tentacle Slam for Void Apparitions or Maddening Tentacles value, holding for adds if needed
actions.main+=/tentacle_slam,target_if=min:dot.vampiric_touch.remains,if=(talent.void_apparitions|talent.maddening_tentacles)&(raid_event.adds.in>30|raid_event.adds.in>5&cooldown.tentacle_slam.full_recharge_time<=gcd.max*2)
# Put out Vampiric Touch on enemies that will live at least 12s and Tentacle Slam is not available soon
actions.main+=/vampiric_touch,target_if=max:(refreshable*10000+target.time_to_die)*(dot.vampiric_touch.ticking|!variable.dots_up),if=refreshable&target.time_to_die>12&(dot.vampiric_touch.ticking|!variable.dots_up)&(variable.max_vts>0|active_enemies=1)&(action.tentacle_slam.usable_in>=dot.vampiric_touch.remains|variable.holding_tentacle_slam|!action.tentacle_slam.enabled)
# Healing spell action list for proccing Twist of Fate. Set priest.twist_of_fate_heal_rppm=<rppm> to make this be used.
actions.main+=/call_action_list,name=heal_for_tof,if=!buff.twist_of_fate.up&buff.twist_of_fate_can_trigger_on_ally_heal.up&talent.halo
# Put out Vampiric Touch on enemies that will live at least 12s as a filler action.
actions.main+=/vampiric_touch,target_if=max:(refreshable*10000+target.time_to_die),if=refreshable&target.time_to_die>12
actions.main+=/shadow_word_death,target_if=min:target.health.pct,if=(pet.mindbender.active|pet.voidwraith.active|pet.shadowfiend.active)&talent.inescapable_torment|target.health.pct<(20+15*talent.deathspeaker)&talent.shadowfiend&talent.idol_of_yshaarj
actions.main+=/shadow_word_death,target_if=min:target.health.pct,if=(target.health.pct<(20+15*talent.deathspeaker))
# Bank Void Volley charges for Resonant Energy, spending them after the proc is reaction-ready, during Voidform, near the next Voidform, at four Crushing Void stacks, or near fight end
actions.main+=/void_volley,if=!talent.resonant_energy|cooldown.voidform.remains<60|buff.voidform.up|buff.resonant_energy_damage.react|buff.crushing_void.stack>=4|fight_remains<45
actions.main+=/mind_flay,target_if=max:dot.shadow_word_madness.remains,chain=1,interrupt_immediate=1,interrupt_if=ticks>=2,interrupt_global=1
# Use Tentacle Slam while moving as a low-priority action when adds will not spawn in 20 seconds.
actions.main+=/tentacle_slam,if=raid_event.adds.in>20
# Use Shadow Word: Death while moving as a low-priority action in execute
actions.main+=/shadow_word_death,target_if=target.health.pct<20
# Use Shadow Word: Death while moving as a low-priority action
actions.main+=/shadow_word_death,target_if=max:dot.shadow_word_madness.remains
# Use Shadow Word: Pain while moving as a low-priority action
actions.main+=/shadow_word_pain,target_if=min:remains

actions.trinkets=use_item,name=galactic_gladiators_badge_of_ferocity,if=(buff.voidform.up|buff.power_infusion.remains>=10|(talent.voidform&cooldown.voidform.remains>10))|fight_remains<20
actions.trinkets+=/use_item,name=hex_lords_dooming_idol,if=buff.power_infusion.up&buff.hex_lords_doom.stack>5|fight_remains<=30
actions.trinkets+=/use_item,name=font_of_venomous_rage
actions.trinkets+=/use_item,name=vexhuls_everflowing_gland
actions.trinkets+=/use_items,if=(buff.voidform.up|buff.power_infusion.remains>=10|equipped.neural_synapse_enhancer&buff.entropic_rift.up)|fight_remains<20

Is this rotation built for your talents?

The rotation follows your talent build. Sim your highest-DPS build on your own gear, for the mode and rotation style you play.