Updated Nov 11, 2026

Balance Druid

PvE guide, updated for Patch 12.1.5

DPS Rotation & Cooldowns

How to play Balance Druid 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 Balance Druid’s DPS compares when using the game’s assisted modes instead of the full rotation, based on Single Target simulations.

  • Full rotationBaseline
  • Assisted Highlight-9.3%
  • One Button-17.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

Balance Druid’s list reads best as SimC writes it

With this build, 11 of its 30 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

15 abilities

Before the pull

Things to do before entering combat.

  1. 1Moonkin FormWhen ready
  2. 2WrathWhen ready
  3. 3WrathSimC enemies<=2
  4. 4StarfireSimC enemies>2

Cooldowns

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

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
0:00.000
0:00.000
Pull
0:00.000
0:00.975
0:01.951
0:02.454

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.

druid_balance.simc, 123 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.

# Balance APL can be found at https://github.com/dreamgrove/dreamgrove/blob/master/sims/owl/balance.txt

# Executed before combat begins. Accepts non-harmful actions only.
# Snapshot raid buffed stats before combat begins and pre-potting is done.
actions.precombat=snapshot_stats
# Executed before combat begins. Accepts non-harmful actions only.
actions.precombat+=/variable,name=Starfall_talents,value=(spell_targets<3&(talent.starweaver&!talent.aetherial_kindling&!talent.meteorites&(talent.stellar_amplification&talent.power_of_goldrinn|talent.stellar_amplification&talent.power_of_goldrinn&talent.meteor_storm|talent.power_of_goldrinn&!talent.meteor_storm))|(talent.rattle_the_stars&!talent.meteorites&((talent.stellar_amplification|talent.power_of_goldrinn)&!talent.aetherial_kindling)))
actions.precombat+=/variable,name=no_cd_talent,value=!talent.celestial_alignment&!talent.incarnation_chosen_of_elune|druid.no_cds
actions.precombat+=/variable,name=ca_opener,op=set,value=1
actions.precombat+=/variable,name=opener,op=set,value=1
actions.precombat+=/variable,name=on_use_trinket,op=add,value=trinket.1.has_use_buff
actions.precombat+=/variable,name=on_use_trinket,op=add,value=(trinket.2.has_use_buff)*2
actions.precombat+=/moonkin_form
actions.precombat+=/wrath
actions.precombat+=/wrath
actions.precombat+=/wrath,if=talent.dream_surge&enemies<=2
actions.precombat+=/starfire,if=hero_tree.elunes_chosen|enemies>2

# Executed every time the actor is available.
# Executed every time the actor is available.
actions=potion,if=((variable.opener|variable.cds)&((prev_gcd.1.force_of_nature&hero_tree.keeper_of_the_grove|prev_gcd.1.fury_of_elune&hero_tree.elunes_chosen)|!talent.force_of_nature&!talent.fury_of_elune))|fight_remains<=30
actions+=/use_items,if=!trinket.1.is.wraps_of_cosmic_madness&!trinket.2.is.wraps_of_cosmic_madness&!trinket.1.is.font_of_venomous_rage&!trinket.2.is.font_of_venomous_rage&((variable.opener|variable.cds)&((prev_gcd.1.force_of_nature&hero_tree.keeper_of_the_grove|prev_gcd.1.fury_of_elune&hero_tree.elunes_chosen)|!talent.force_of_nature&!talent.fury_of_elune))&(buff.harmony_of_the_grove.up|hero_tree.elunes_chosen)|fight_remains<20
actions+=/use_item,name=wraps_of_cosmic_madness,if=!buff.eclipse.up
actions+=/use_item,name=font_of_venomous_rage,if=!buff.eclipse.up
actions+=/variable,name=cd_overflow,op=set,value=1,if=cooldown.ca_inc.charges_fractional>1.9|fight_remains<trinket.1.cooldown.remains
actions+=/variable,name=cd_overflow,op=set,value=0,if=cooldown.ca_inc.charges_fractional<1
actions+=/berserking,if=buff.ca_inc.up&(buff.harmony_of_the_grove.up|!talent.dream_surge)|fight_remains<cooldown.ca_inc.remains
actions+=/invoke_external_buff,name=power_infusion,if=buff.ca_inc.up
actions+=/variable,name=eclipse_timings,value=((cooldown.eclipse.full_recharge_time<((cooldown.force_of_nature.remains*hero_tree.keeper_of_the_grove)<?(cooldown.fury_of_elune.remains)<?((buff.eclipse.duration+2)))|((trinket.1.cooldown.remains*!variable.cd_overflow*hero_tree.keeper_of_the_grove)<?cooldown.ca_inc.remains)<((cooldown.force_of_nature.remains*hero_tree.keeper_of_the_grove)<?(cooldown.fury_of_elune.remains)<?(buff.eclipse.duration+2)))&(buff.eclipse.duration<=(cooldown.ca_inc.remains<?cooldown.fury_of_elune.remains<?cooldown.force_of_nature.remains)|!talent.fury_of_elune|hero_tree.elunes_chosen|talent.radiant_moonlight)|fight_remains<buff.eclipse.duration)&(buff.eclipse.remains<2&fight_style.dungeonroute|!fight_style.dungeonroute)
actions+=/variable,name=opener,op=set,value=0,if=buff.ca_inc.up
actions+=/variable,name=starfall_cosmos,value=(talent.starweaver&(talent.meteorites&(talent.incarnation_chosen_of_elune&talent.meteor_storm&!talent.power_of_goldrinn|buff.ca_inc.down&(talent.incarnation_chosen_of_elune|talent.stellar_amplification|!talent.power_of_goldrinn))|buff.eclipse.down&(talent.meteorites|talent.aetherial_kindling|talent.stellar_amplification&!talent.power_of_goldrinn))|buff.ca_inc.down&talent.meteorites&talent.aetherial_kindling&talent.stellar_amplification&!talent.power_of_goldrinn|buff.eclipse.down&talent.meteorites&(talent.aetherial_kindling|talent.stellar_amplification|!talent.power_of_goldrinn))&buff.touch_the_cosmos.react&!buff.starweavers_weft.react
actions+=/variable,name=cds,op=set,value=1,if=((((cooldown.force_of_nature.remains*hero_tree.keeper_of_the_grove)<?(cooldown.fury_of_elune.remains)<?((trinket.1.cooldown.remains*!variable.cd_overflow*hero_tree.keeper_of_the_grove)<?cooldown.ca_inc.remains)<?(buff.eclipse.remains-(10*(buff.bloodlust.up*buff.ascendant_stars.down)))<?buff.ca_inc.remains)<1)&(active_dot.moonfire>=active_enemies|active_dots.moonfire>=10|spell_targets=1&hero_tree.keeper_of_the_grove|hero_tree.elunes_chosen&spell_targets=1))&target.time_to_die>20
actions+=/variable,name=cds,op=set,value=0,if=buff.ca_inc.up
actions+=/variable,name=mini,op=set,value=1,if=(((cooldown.eclipse.remains<?cooldown.force_of_nature.remains<?cooldown.fury_of_elune.remains<?buff.eclipse.remains)<1)&((((trinket.1.cooldown.remains*!variable.cd_overflow)<?cooldown.ca_inc.remains)+10)>(cooldown.force_of_nature.duration<?cooldown.fury_of_elune.duration-15)))&hero_tree.keeper_of_the_grove
actions+=/variable,name=mini,op=set,value=0,if=prev_gcd.1.eclipse
actions+=/run_action_list,name=opener,if=variable.opener
actions+=/run_action_list,name=mini,if=variable.mini&!variable.opener
actions+=/run_action_list,name=cooldowns,if=variable.cds&!variable.opener
actions+=/run_action_list,name=ec_st,if=hero_tree.elunes_chosen&spell_targets=1
actions+=/run_action_list,name=kotg_st,if=spell_targets=1
actions+=/run_action_list,name=aoe,if=spell_targets>1

actions.aoe=celestial_alignment,if=fight_remains<20
actions.aoe+=/wrath,if=eclipse.lunar&spell_targets<=2&hero_tree.keeper_of_the_grove&buff.eclipse.down
actions.aoe+=/starfire,if=eclipse.solar&spell_targets>2&hero_tree.keeper_of_the_grove&buff.eclipse.down
actions.aoe+=/eclipse,if=!variable.opener&(cooldown.eclipse.full_recharge_time<gcd.max)
actions.aoe+=/moonfire,target_if=refreshable&(target.time_to_die-remains)>6&active_dots.moonfire<10&buff.eclipse.down
actions.aoe+=/sunfire,target_if=(remains<2|refreshable&buff.eclipse.down)&target.time_to_die>5
actions.aoe+=/fury_of_elune,if=fight_remains<10|cooldown.ca_inc.remains>10|talent.lunation
actions.aoe+=/force_of_nature,if=hero_tree.elunes_chosen&astral_power<50&cooldown.ca_inc.remains>10&buff.eclipse.up|fight_remains<15
actions.aoe+=/eclipse,if=variable.eclipse_timings
actions.aoe+=/convoke_the_spirits,if=(buff.ca_inc.up&astral_power<40|cooldown.ca_inc.remains>50&buff.harmony_of_the_grove.up&buff.ca_inc.down)&(buff.orbit_breaker.stack<10|hero_tree.keeper_of_the_grove)
actions.aoe+=/starsurge,if=(astral_power>80|buff.eclipse.up&action.starsurge.cost>1)&variable.Starfall_talents&!buff.starweavers_warp.react&!buff.touch_the_cosmos.react|buff.starweavers_weft.react
actions.aoe+=/starfall,if=((astral_power>80-79*hero_tree.elunes_chosen|buff.eclipse.up&action.starfall.cost>1)&spell_targets>=2|buff.starweavers_warp.react|buff.touch_the_cosmos.react)&target.time_to_die>5
actions.aoe+=/starfire,if=buff.ascendant_fires.up&buff.eclipse_lunar.up
actions.aoe+=/new_moon,if=astral_power.deficit>energize_amount&debuff.atmospheric_exposure.remains<execute_time+0.5
actions.aoe+=/half_moon,if=astral_power.deficit>energize_amount&debuff.atmospheric_exposure.remains<execute_time+0.5
actions.aoe+=/full_moon,if=astral_power.deficit>energize_amount&debuff.atmospheric_exposure.remains<execute_time+0.5
actions.aoe+=/wild_mushroom,if=buff.eclipse_solar.up|cooldown.wild_mushroom.full_recharge_time<cooldown.ca_inc.remains
actions.aoe+=/starfire,if=hero_tree.elunes_chosen|buff.eclipse.down&spell_targets.starfire>2|buff.eclipse_lunar.up&spell_targets.starfire>2
actions.aoe+=/wrath,if=spell_targets<=2

actions.cooldowns=moonfire,target_if=hero_tree.elunes_chosen&dot.moonfire.remains<12&spell_targets=1&cooldown.fury_of_elune.remains<1,line_cd=20
actions.cooldowns+=/moonfire,target_if=refreshable&(target.time_to_die-remains)>6&active_dots.moonfire<10&spell_targets>1
actions.cooldowns+=/sunfire,if=dot.sunfire.remains<18&cooldown.fury_of_elune.remains<1&(cooldown.force_of_nature.remains<1&hero_tree.keeper_of_the_grove|!hero_tree.keeper_of_the_grove),line_cd=10
actions.cooldowns+=/fury_of_elune
actions.cooldowns+=/force_of_nature,if=hero_tree.keeper_of_the_grove
actions.cooldowns+=/celestial_alignment,add_queue_lag=1

actions.ec_st=sunfire,target_if=remains<2|refreshable&buff.eclipse.down&target.time_to_die>10
actions.ec_st+=/moonfire,target_if=(remains<2|refreshable&!buff.eclipse.up&!cooldown.force_of_nature.remains<dot.moonfire.remains)&target.time_to_die>10
actions.ec_st+=/celestial_alignment,if=fight_remains<20
actions.ec_st+=/convoke_the_spirits,if=(buff.balance_of_all_things_arcane.stack<5|buff.balance_of_all_things_nature.stack<5|astral_power<40)&buff.ca_inc.up|cooldown.ca_inc.remains>40&buff.eclipse.up
actions.ec_st+=/fury_of_elune,if=fight_remains<10|cooldown.ca_inc.remains>cooldown.fury_of_elune.duration|talent.lunation
actions.ec_st+=/force_of_nature,if=fight_remains<10|cooldown.force_of_nature.duration<cooldown.ca_inc.remains
actions.ec_st+=/eclipse,if=variable.eclipse_timings
actions.ec_st+=/starfall,if=buff.starweavers_warp.react
actions.ec_st+=/starfall,if=variable.starfall_cosmos
actions.ec_st+=/starsurge,if=buff.eclipse.down&astral_power.deficit<20|buff.eclipse.up&action.starsurge.cost>1|buff.touch_the_cosmos.react|buff.starweavers_weft.react
actions.ec_st+=/new_moon,if=astral_power.deficit>energize_amount
actions.ec_st+=/half_moon,if=astral_power.deficit>energize_amount
actions.ec_st+=/full_moon,if=astral_power.deficit>energize_amount
actions.ec_st+=/wild_mushroom,if=buff.eclipse.up|cooldown.wild_mushroom.full_recharge_time<cooldown.ca_inc.remains
actions.ec_st+=/starfire

actions.kotg_st=sunfire,target_if=remains<2|refreshable&buff.eclipse.down&target.time_to_die>10
actions.kotg_st+=/moonfire,target_if=buff.harmony_of_the_grove.down&(remains<2|refreshable&!buff.eclipse.up&!cooldown.force_of_nature.remains<dot.moonfire.remains)&target.time_to_die>10
actions.kotg_st+=/celestial_alignment,if=fight_remains<=buff.ca_inc.duration
actions.kotg_st+=/fury_of_elune,if=fight_remains<20|cooldown.force_of_nature.remains>cooldown.fury_of_elune.duration
actions.kotg_st+=/force_of_nature,if=fight_remains<20
actions.kotg_st+=/convoke_the_spirits,if=astral_power<40&buff.harmony_of_the_grove.up|fight_remains<10
actions.kotg_st+=/eclipse,if=variable.eclipse_timings&(astral_power>60|charges_fractional=2)|fight_remains<(15+(buff.ca_inc.duration*(cooldown.ca_inc.remains<fight_remains-20)))
actions.kotg_st+=/starfall,if=buff.starweavers_warp.react
actions.kotg_st+=/starfall,if=variable.starfall_cosmos
actions.kotg_st+=/starsurge,if=buff.eclipse.down&astral_power.deficit<20|buff.eclipse.up&action.starsurge.cost>1&(astral_power.deficit<10|cooldown.force_of_nature.remains>5+buff.eclipse.remains|buff.ascendant_stars.up)|buff.touch_the_cosmos.react|buff.starweavers_weft.react
actions.kotg_st+=/new_moon,if=astral_power.deficit>energize_amount
actions.kotg_st+=/half_moon,if=astral_power.deficit>energize_amount
actions.kotg_st+=/full_moon,if=astral_power.deficit>energize_amount
actions.kotg_st+=/wild_mushroom,if=buff.eclipse.up|cooldown.wild_mushroom.full_recharge_time<cooldown.ca_inc.remains
actions.kotg_st+=/wrath

actions.mini=fury_of_elune
actions.mini+=/force_of_nature
actions.mini+=/eclipse

actions.opener=moonfire,if=!talent.convoke_the_spirits,line_cd=999
actions.opener+=/moonfire,target_if=refreshable&(target.time_to_die-remains)>6&active_dots.moonfire<10&spell_targets>1
actions.opener+=/sunfire,line_cd=999
actions.opener+=/eclipse,if=!talent.convoke_the_spirits,line_cd=999
actions.opener+=/starsurge,if=buff.ascendant_stars.up&hero_tree.elunes_chosen&!talent.lunation&spell_targets=1
actions.opener+=/wrath,if=astral_power<80&hero_tree.keeper_of_the_grove&spell_targets.starfire<3&!talent.convoke_the_spirits
actions.opener+=/starfire,if=!talent.convoke_the_spirits&(astral_power<80&spell_targets>=3&hero_tree.keeper_of_the_grove|hero_tree.elunes_chosen&(buff.ascendant_fires.up&talent.lunation|!talent.lunation&(astral_power<80&spell_targets=1)))
actions.opener+=/moonfire,if=!talent.convoke_the_spirits&(dot.moonfire.remains<15-(8*talent.aetherial_kindling))&cooldown.force_of_nature.ready&hero_tree.elunes_chosen&cooldown.fury_of_elune.ready,line_cd=999
actions.opener+=/sunfire,if=!talent.convoke_the_spirits&dot.sunfire.remains<15&cooldown.force_of_nature.ready&cooldown.fury_of_elune.ready,line_cd=999
actions.opener+=/fury_of_elune
actions.opener+=/force_of_nature
actions.opener+=/celestial_alignment,add_queue_lag=1

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.