The Best WoW Classes Ranked [Shadowlands Update] | HGG (2023)

");$( "#content-area" ).prepend($addFlag);} }// This function handles animation for the new ToC, which currently includes:// 1. Fading the ToC in and out to prevent it from covering up the Info section in the footer ; function handleTocAnim( $tocBox, winHeight, docHeight, scrollTop ) { // We're going to check if we're near the bottom for an animation to hide the ToC so we don't // cover up the Info section in the footer var bottomBuffer = 384; //px var isNearBottom = scrollTop + winHeight > docHeight - bottomBuffer; // Fetch the value for the animFlag key var tocAnimating = $tocBox.data( "animFlag" ); // If ToC has been hidden by the fade anim, display will be 'none' when // finished animating var tocHidden = $tocBox.css( 'display' ) === 'none'; if( isNearBottom ) { // If we're near the bottom, and the ToC is not animating // and not hidden, then hide it if( !tocAnimating && !tocHidden ) { $tocBox.data( "animFlag", true ) $tocBox.fadeOut( 400, function() { $tocBox.data( "animFlag", false ); }); } } else { // If we're not near the bottom, and the ToC is not animating // and hidden, then unhide it if( !tocAnimating && tocHidden ) { $tocBox.data( "animFlag", true ); $tocBox.fadeIn( 400, function() { $tocBox.data( "animFlag", false ); }); } } }// Calculate the available height for the ToC Box ; function calcAvailableHeight( height ) {return height * 80.0 / 100.0;}// This function resizes specific page elements, depending on // window size and whether the ToC is present, to keep things // consistent.// The boolean debug arg enables verbose logging. ; function handleReflow( $, winOuterWidth, winInnerHeight, maxMobileWidth, debug ) {if( debug ) {console.log( "Checking if page layout should be reflowed..." );}// We want to reflow the layout whether or not we have the TOC, // with the hasTOC bool as a flag for if it exists on the pagevar tocFlag = $("#content-side");var hasToC = true; // FORCE HAS TOC, DEPLOYING SITEWIDE -supersoup// Check number of H2 elements. If <= 3, early returnvar numH2 = $("h2");if( numH2.length <= 3 ) {return;}// Cache varsvar $mainContainer = $("#main-content");var $logoContainer = $(".hgg-logo-space");var $navContainer = $(".hgg-menu-icon");var $contentArea = $("#content-area");// Null-check variablesvar anyNull = $mainContainer.length && $logoContainer.length && $navContainer.length && $contentArea.length;if( !($mainContainer.length) && debug ) {console.log( "$mainContainer null in reflowLayout..." );}if( !($logoContainer.length) && debug ) {console.log( "$logoContainer null in reflowLayout..." );}if( !($navContainer.length) && debug ) {console.log( "$navContainer null in reflowLayout...")}if( !($contentArea.length) && debug ) {console.log( "$contentArea null in reflowLayout..." );} if( debug ) {console.log( "anyNull: " + anyNull );console.log( "hasTOC: " + hasToC );}if( hasToC ) {// The previous process for initializing offsetTopForView didn't play well when// refreshing the page while partially down the post, switching to pulling the // header height for consistency -supersoupvar offsetTopForView = $("header").height() ; //pxif (offsetTopForView === undefined || offsetTopForView < 0) {offsetTopForView = 0;}var $toc = $( ".toc-box" );if( $toc.length > 0 ) {var availableHeight = calcAvailableHeight( winInnerHeight - offsetTopForView );if( debug ) {console.log( "window.innerHeight: " + winInnerHeight );console.log( "availableHeight: " + availableHeight );console.log( "toc[0].scrollHeight: " + $toc[0].scrollHeight );console.log( "toc.height(): " + $toc.height() );}if( $toc.outerHeight() > availableHeight ) {$toc.css( 'height', availableHeight );if( debug ) {console.log( "Setting ToC height to ", availableHeight );}} else {var newHeight = availableHeight < $toc[0].scrollHeight ? availableHeight : $toc[0].scrollHeight;$toc.css( 'height', newHeight );if( debug ) {console.log( "Setting ToC height to ", newHeight );}}/*// Update largest sizevar maxSize = $toc.data( "maxSize" );var outerHeight = $toc.outerHeight;if( maxSize === 0 || maxSize == undefined || maxSize == NaN || maxSize < cssHeight ) {$toc.data( "maxSize", $toc.outerHeight);console.log( "maxSize is now " + $toc.outerHeight );}*/if( $toc.height() < $toc[0].scrollHeight ) {$toc.css( 'overflow-x', 'hidden' );$toc.css( 'overflow-y', 'auto' );}else {$toc.css( 'overflow-x', 'hidden' );$toc.css( 'overflow-y', 'none' );}}if( winOuterWidth >= 1600 ) {$mainContainer.css( "margin-left", "15.95rem" );$logoContainer.css( "margin-left", "-6.1rem" );$navContainer.css( "margin-right", "-8.0rem" );} else if( winOuterWidth < 1600 && winOuterWidth > maxMobileWidth ) {$mainContainer.css( "margin-left", "14.8rem" );$logoContainer.css( "margin-left", "-3.8rem" );$navContainer.css( "margin-right", "-3.8rem" );} else if( winOuterWidth <= maxMobileWidth ) {// Clear applied CSS$mainContainer.css( "margin-left", "0" );$logoContainer.css( "margin-left", "0" );$navContainer.css( "margin-right", "0" );} else {if( debug ) {console.log( "Unhandled window width in reflowLayout() - With ToC" );}}} else {if( winOuterWidth >= 1600 ) {// Don't do anything yet on non-ToC pages} else if( winOuterWidth < 1600 && winOuterWidth > maxMobileWidth ) {$contentArea.css( "margin-left", "0");} else if( winOuterWidth <= maxMobileWidth ) {// Don't do anything yet on non-ToC pages} else {if( debug ) {console.log( "Unhandled window width in reflowLayout() - Without ToC" );}}} }// Handles reflowing content on the page depending on different variables; (function (window, $, undefined) {$.fn.reflowLayout = function() {// Mobile width for reflow, probably want to sync// with max mobile width for the ToCconst MAX_MOBILE_WIDTH = 1438;// Should we enable verbose logging for debugging?// SHOULD NOT BE TRUE IN PRODUCTION! -supersoupvar debug = false;handleReflow( $, window.outerWidth, window.innerHeight, MAX_MOBILE_WIDTH, debug );$(window).on( 'load', function () {handleReflow( $, window.outerWidth, window.innerHeight, MAX_MOBILE_WIDTH, debug );});// For reflowing when browser size changes$(window).on( 'resize', function () {handleReflow( $, window.outerWidth, window.innerHeight, MAX_MOBILE_WIDTH, debug );});/*$(window).on( 'scroll', function () {var $toc = $( ".toc-box" );if( $toc.length === 0 )return;console.log( "availableHeight: " + calcAvailableHeight( window.innerHeight ) );console.log( "toc[0].scrollHeight: " + $toc[0].scrollHeight );console.log( "toc.outerHeight(): " + $toc.outerHeight() );});*/};})(this, jQuery);// Transform guide content by visually organizing it into cards ; (function(window, $, undefined) { $.fn.cardify = function() { var $contentBody = $("#content-body"); if($contentBody === 0) { return; } var $contentBodyChildren = $contentBody.children(); var $h2s = $contentBody.children("h2"); console.log("H2 children of #content-body: " + $h2s.length); if($h2s.length === 0) { return; } for(var i = 0; i < $h2s.length; i++) { var $array = $contentBodyChildren.nextUntil("h2"); $array.each( function(index) { console.log("Element " + index + ": " + $(this).html()); }); // console.log("Card " + i + ":" + $contentBodyChildren.nextUntil("h2").html()); } } }(this, jQuery));// Create the top level TOC before the first heading // The boolean debug arg enables verbose logging. ; function createTopLevelTOC( $, debug ) {var $contentBody = $("#content-body");if( $contentBody === 0 ) {return;}var headingsToFind = ["h2", "h3"]; var $headings = $contentBody.find(headingsToFind.join(","));if( debug ) {console.log(`Headings found: ${$headings.length}`);}if( $headings.length === 0 ) {return;}var tocContainer = document.createElement("div");tocContainer.id="top_toc_container";tocContainer.classList.add("top_toc_container");var tocTitle = document.createElement("p");tocTitle.classList.add("top_toc_title");tocTitle.innerHTML = "Table of Contents";tocContainer.append(tocTitle);var tocList = document.createElement("ul");tocList.classList.add("top_toc_list");let h2Count = 1;let h3Count = 1;for( let i = 0; i < $headings.length; i++ ) {var item = document.createElement("li");var itemTagName = $headings[i].tagName;var tagIsH3 = itemTagName === "H3";if ( debug ) {console.log(`Item ${i} tagName: ${itemTagName}`);}var count = i+1;if( tagIsH3 ) {item.classList.add("top_toc_item_h3");count = h3Count;h3Count++;}else {item.classList.add("top_toc_item_h2");count = h2Count;h3Count = 1; // Reset h3 counth2Count++;}var innerText = `${tagIsH3 ? " - " : ""} ${$headings[i].innerText}`;item.innerHTML =`${innerText}`;tocList.append(item);}tocContainer.append(tocList);var $topHeading = $headings[0];$topHeading.before(tocContainer);if( debug ) {console.log("Successfully added top level ToC");}}// The main function for creating, populating, and managing the new ToC ; (function (window, $, undefined) { $.fn.createTOC = function (settings) {const MAX_MOBILE_WIDTH = 1438;// Before anything else, if this is a post in a Category that we // specifically want to force the ToC on, let's handle that// THIS IS NO LONGER NEEDED, as we're pushing ToC sitewide -supersoup// handleForceToC( $ );// We want to create the inline top level ToC if we're not generating // the sidebar tocif ( $(window).width() <= MAX_MOBILE_WIDTH ) {createTopLevelTOC( $, false );}// For now, we only want to add the new ToC to manually flagged posts.// The post is flagged with the presence of a

// contained within the content of the post. Originally, this div was being used// to wrap the ToC, but I (supersoup) am going to move the ToC out to a new div.// So, the first thing we want to do is test for this div, early return if not // found, or remove it and recreate a #content-side div elsewhere if it is found.var tocFlag = $("#content-side");var hasToC = !(tocFlag.length === 0);// If #content-side element is foundif( hasToC ) {// Get rid of tosFlag #content-side elementtocFlag.remove();}// Check number of H2 and H3 elements. If <= 3, early returnvar numH2 = $("h2");var numH3 = $("h3");if( numH2.length + numH3.length <= 3 ) {return;}// Proceed with .CreateTOC() var option = $.extend({ title: "hgg-toc", insert: "body", }, settings); var ACTIVE_CLASS = 'active'; var list = ["h2", "h3"]; var $headings = this.find(list.join(",")); var tocBox = document.createElement("ul"); var $tocBox = $(tocBox); tocBox.className = "toc-box"; var idList = []; $headings.map(function (i, head) { var nodeName = head.nodeName; var id = 'toc_' + i + '_' + nodeName; head.id = id; idList.push(id); var row = document.createElement("li"); row.className = 'toc-item toc-' + nodeName; var link = document.createElement('a'); link.innerText = head.innerText; link.className = 'toc-item-link'; link.href = '#' + id; row.appendChild(link); tocBox.appendChild(row); }); // Control the takeover of the highlighted elements var isTakeOverByClick = false; // Event delegate, add click ,Highlight the currently clicked item $tocBox.on("click", ".toc-item", function (ev) { // Set as true ,Represents the click event to take over the control of the highlighted element isTakeOverByClick = true; var $item = $(this); var $itemSiblings = $item.siblings(); $itemSiblings.removeClass(ACTIVE_CLASS); $item.addClass(ACTIVE_CLASS); });// Recreate #content-side element in new locationvar $tocDiv = $("

");$( "#content-area" ).prepend($tocDiv); // Want it to be the first subdiv of #content-areavar headBox = document.createElement("div");headBox.className = "toc-titler";headBox.innerHTML = option.title;var wrapBox = document.createElement("div");wrapBox.className = "wrap-toc";wrapBox.appendChild(headBox);wrapBox.appendChild(tocBox);// If on mobile, set sidebar hiddenif( $(window).width() <= MAX_MOBILE_WIDTH ) {wrapBox.style.display = 'none';} else {wrapBox.style.display = null;}var $insertBox = $(option.insert);var $helperBox = $("

");$helperBox.append(wrapBox);$insertBox.prepend($helperBox);// The style of the storage container boxvar CACHE_WIDTH = $insertBox.css('width');var CACHE_PADDING_TOP = $insertBox.css('paddingTop');var CACHE_PADDING_RIGHT = $insertBox.css('paddingRight');var CACHE_PADDING_BOTTOM = $insertBox.css('paddingBottom');var CACHE_PADDING_LEFT = $insertBox.css('paddingLeft');var CACHE_MARGIN_TOP = $insertBox.css('marginTop'); // var scrollTop = $('html,body').scrollTop(); // var offsetTop = $insertBox.offset().top; // var marginTop = parseInt($insertBox.css('marginTop')); // var offsetTopForView = offsetTop - scrollTop - marginTop; // For initialization on load$(window).on( 'load', function () {initTocAnimData( $insertBox );}); // Rolling ceiling $(window).scroll(function () {// The previous process for initializing offsetTopForView didn't play well when// refreshing the page while partially down the post, switching to pulling the // main-header height for consistency -supersoupvar offsetTopForView = $(".hgg-top-nav").height() ; //px// IE6/7/8: // For pages without doctype declaration, document.body.scrollTop can be used to get the height of scrollTop; // For pages with doctype declaration, document.documentElement.scrollTop can be used;// Safari: // Safari is special, it has its own function to get scrollTop: window.pageYOffset;// Firefox: // Relatively standard browsers such as Firefox can save more worry, just use document.documentElement.scrollTop;var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop; // Scroll highlight // Only when the click event cancels the control of the highlighted element, the scroll event can have the control of the highlighted element !isTakeOverByClick && $.each(idList, function (index, id) { var $head = $('#' + id); var $item = $('[href="#' + id + '"]').parent(); var $itemSiblings = $item.siblings();var offsetBuffer = 64; // px, we want the class swap to trigger slightly before so we show an accurate active element// when zooming to a specific element var offsetTopHead = $head.offset().top - offsetBuffer; var isActived = $item.hasClass(ACTIVE_CLASS); if (scrollTop >= offsetTopHead) { $itemSiblings.removeClass(ACTIVE_CLASS); !isActived && $item.addClass(ACTIVE_CLASS); } else { $item.removeClass(ACTIVE_CLASS); } }); // Set to false, which means that the click event will cancel the control of the highlighted element isTakeOverByClick = false;// Handle animation for the ToChandleTocAnim( $insertBox, $(window).height(), $(document).height(), scrollTop );// Handle any changes to ToC CSS on scrollvar isFixed = $helperBox.css("position") === "fixed"; if (scrollTop >= offsetTopForView) {if (isFixed) return;$tocBox.css({overflow: 'auto',padding: 0,});$helperBox.css({position: 'fixed',top: CACHE_MARGIN_TOP,width: CACHE_WIDTH,paddingTop: CACHE_PADDING_TOP,paddingRight: CACHE_PADDING_RIGHT,paddingBottom: CACHE_PADDING_BOTTOM,paddingLeft: CACHE_PADDING_LEFT,backgroundColor: $tocBox.css('backgroundColor')});} else {if (!isFixed) return;$helperBox.css({position: 'static',padding: 0});$tocBox.css({overflow: 'auto',paddingTop: CACHE_PADDING_TOP,paddingRight: CACHE_PADDING_RIGHT,paddingBottom: CACHE_PADDING_BOTTOM,paddingLeft: CACHE_PADDING_LEFT,});} }); };}(this, jQuery));});

by Mitch Gentry | Last Updated: Jan 12, 2022

The Best WoW Classes Ranked [Shadowlands Update] | HGG (1)

The metagame forWorld of Warcraftebbs and flows like the tide. The biggest shifts in the zeitgeist usually occur with the launch of a new expansion.Shadowlandsis no exception.

Looking for the best classic WoW classes? See our classic rankings here.

For better or worse, the class(es) you’ve known and loved duringBattle for Azerothmight look drastically different in Azeroth’s afterlife. Some changes are good, some bad. Some changes are bad until you finally come around to them. But one thing’s for certain — you can’t play the way you used to and expect the same results, especially if your favorite skills and abilities don’t exist anymore.

It’s time once again to consider the metagame with fresh eyes. Cast aside everything you know and approachShadowlandsas a wholly new beast altogether. Sure, a Rogue is still a Rogue, and a Paladin is a Paladin, but there might be substantial changes under the hood that will affect the balance of power between the classes.

It’s time to discuss the best WoW Shadowlands classes and put together a brand-new best WoW classes tier list for 2022.

WoW Classes Ranked: Tiers for Fears

The Best WoW Classes Ranked [Shadowlands Update] | HGG (2)

First up, let’s talk tiers — specifically for classes and their specializations. Now folks partake of theWorld of Warcraftfor a wide variety of different reasons. Some like their Mythic+ dungeoneering, others prefer PvP, and almosteveryoneis in it for a dose of that immaterialfun.

We at High Ground Gaming always favor the “fun” route when possible. Be advised that our tiered ranking may look slightly different from one focused on a particular piece of endgame content. We’ll also take into account the approximate difficulty level of any class/specialization combo as we go.

Now let’s check out the WoW classes ranked by difficulty and enjoyment — the High Ground Gaming way.

Exceptionally Fun

ClassDifficulty Description
Shadow Priest⚔⚔⚔⚔⚔The Shadow Priest is really, really good. That said, you have to manage lots of cooldowns to maintain peak performance. Fortunately, life-stealing alongside great DoTs keep you rocking and rolling.
Mistweaver Monk⚔⚔⚔⚔Playing a flexible class like the Mistweaver Monk is demanding of any player, but great single-target healing, damage, and dispels await the patient and agile adventurer.
Restoration Druid⚔⚔⚔⚔Druids are likewise flexible with their healing, tanking, and damage in a single class (depending on specialization and form). Restoration Druid focuses on healing, and in so doing, provides some of the best healing numbers for groups in the current meta while also still throwing punches.

Good Fun

ClassDifficulty Description
Unholy Death Knight⚔⚔⚔The Unholy Death Knight offers some of the highest DPS potential in the game as ofShadowlands, but can sometimes feel one-note. Lay waste to your enemies with that old-timey cooldown management in the name of the Lich King.
Subtlety Rogue⚔⚔⚔⚔It can be difficult to maintain high DPS with a Subtlety Rogue, but the burst damage is still among the best. And the “stealth, gank, and stealth again” flow still feels great.
Restoration Shaman⚔⚔⚔Managing totems can keep you on your toes, but the Restoration Shaman has great damage and healing potential.

Fairly Fun

ClassDifficulty Description
Discipline Priest⚔⚔Some folks like to focus on healing (raising a hand here), but it’s not asdynamicof an experience as it could be. Discipline Priest offers some relatively fun and dependable vanilla-flavored healing and damage, though.
Brewmaster Monk⚔⚔⚔If you’re looking to tank, the Brewmaster Monk is a fun,safechoice. It has some key situational advantages in certain dungeons and raids, but lacks the versatility to rank it higher.
Fire Mage⚔⚔⚔A simple but effective core rotation combines with basic resource management to produce consistent damage output in a fun package.

All the Rest, From Worst to Best

Certain players simply click with certain classes and specializations. Many of the remaining options are still quite fun to play, even if they didn’t make our top tiers. Don’t let this section discourage you from trying them out and seeing for yourself!

ClassDifficulty
Destruction Warlock⚔⚔⚔⚔⚔
Survival Hunter⚔⚔⚔⚔
Elemental Shaman⚔⚔⚔⚔
Holy Paladin⚔⚔⚔
Outlaw Rogue⚔⚔⚔⚔
Demonology Warlock⚔⚔⚔⚔
Holy Priest⚔⚔⚔⚔
Vengeance Demon Hunter⚔⚔⚔⚔
Blood Death Knight⚔⚔⚔⚔
Arms Warrior⚔⚔⚔⚔
Havoc Demon Hunter⚔⚔⚔⚔⚔
Affliction Warlock⚔⚔⚔⚔
Guardian Druid⚔⚔⚔
Assassin Rogue⚔⚔⚔⚔
Protection Paladin⚔⚔⚔
Marksman Hunter⚔⚔⚔
Windwalker Monk⚔⚔⚔
Protection Warlock⚔⚔
Beast Mastery Hunter⚔⚔⚔⚔
Balance Druid⚔⚔⚔
Arcane Mage⚔⚔⚔
Frost Death Knight⚔⚔⚔
Retribution Paladin⚔⚔
Feral Druid⚔⚔⚔⚔
Fury Warrior⚔⚔⚔
Frost Mage⚔⚔⚔⚔

WoW Classes Ranked: The Best of the Best

Tiers might tell part of the story. But the real test of a class is placing it in the crucible of burningcontentand seeing if it can withstand the intense, scorching heat. With theWoW Shadowlandsclasses ranked (roughly), it’s time to turn our attention to the best classes in the current meta for five key situations: DPS, PvP, Solo Play, the Arena, and PvE.

1. Unholy Death Knight

The best DPS classWoW Shadowlands

The Best WoW Classes Ranked [Shadowlands Update] | HGG (3)

When it comes to DPS, you simply can’t beat the classics. For the best DPS classWoW Shadowlandshas to offer, the Unholy Death Knight makes a confident but contested case for number one.

While there are other better DPS classes in certain specific situations, few can match the Unholy Death Knight pound-for-pound overall. It brings incredibly potent single-target damage abilities and merges them with bone-crushing burst damage for maximum profit. If a target has to die (and die quickly), an Unholy Death Knight is likely just what the doctor ordered.

Be advised that they have a relatively high difficulty level to play effectively. But if you’re willing to put in the time to learn, there’s plenty of damage to be farmed.

2. Frost Mage

The best PvP classWoW Shadowlands

The Best WoW Classes Ranked [Shadowlands Update] | HGG (4)

For veteran players, our pick for best PvP class WoW Shadowlands edition won’t be a surprise. It’s the Frost Mage. Of course it’s the Frost Mage.

Butwhy, I hear you say. Like youngsters gathered around their grandfather, begging to hear once more the story they already know by heart. Well, sit back, and I’ll tell you a tale….

The Frost Mage’s tale is one of incredible crowd control abilities. Slows and Polymorphs abound. When the enemy is bewildered, the Frost Mage unleashes a torrent of frozen-flavored burst damage. There’s even a bit of resource management in the form of generating frozen enemies to slam with critical strikes. (Okay, it’s notexactlyresource management, but if you squint a little, it seems awfully familiar.)

Then, when the tide of battle turns, you have a few icy shields and mirror images ready to soak some damage for you. Winning in PvP is all about staying on your toes, rolling with the punches, and adapting to the hand each particular match deals you. The Frost Mage excels in all three areas and then some — making it one of the best WoW classes ranked.

3. Balance Druid

The best solo classWoW Shadowlands

The Best WoW Classes Ranked [Shadowlands Update] | HGG (5)

Friends are cool and all. But have you ever tried playing a Massively Multiplayer game without them?

Planning to play an MMORPG by yourself is counterintuitive at best, but it can be hard to wrangle schedules and get everyone online at the same time. It’s better to set yourself up for uninterrupted questing by playing a class that can do it all, all the time, with or without a party for backup.

Of course, that implies a Druid. A Balance Druid, to be precise.

You’ve got heals. You’ve got multiple animal forms bringing different abilities into the fray. You can tankorDPS as the whim strikes you or the tide of battle dictates. And your DPS isn’t terribly hampered by all this utility — fancy that.

When it comes to playing Solo, Druids have long been the versatile standby. For the best solo classWow Shadowlands‘ meta has on tap, the Balance Druid will be your go-to.

4. Holy Paladin

The best Arena classWoW Shadowlands

The Best WoW Classes Ranked [Shadowlands Update] | HGG (6)

Look, we’re just as surprised as you are.

There are lots of class/specialization combos that perform better in specific situations. But if you’re looking to pick up Arena and play with a rotating group of guildies, the Holy Paladin offers some startling flexibility. Don’t believe us? See whatIcy Veinshas to say on the matter.

Regardless of the team composition, there’s a spot for the Holy Paladin. An experienced Paladin can hold their own as an alternate or main healer. There may be better options as a damage dealer and damage mitigator, but none that offer the same toolkit.

Make good on the spectacular burst healing and defensive spells, control the flow of battle with a few stuns, then slam down some damage with Holy Power generating abilities. Before you know it, you and your Arena teammates will be the only ones left standing.

5. Beast Mastery Hunter

The best PvE classWoW Shadowlands

The Best WoW Classes Ranked [Shadowlands Update] | HGG (7)

As a close sibling to the best solo class, the best PvE classWoW Shadowlandsoffers must be equally multifaceted and versatile in application. While we aren’t as worried about lone wolfing with this pick, it must still be capable of questing without additional support.

That’s why the Beast Mastery Hunter is the easiest pick for the best PvE class in the book.

It’s a remarkably easy class to play. Resource management mechanics are minimal. You can deal solid DPS with just a cursory understanding of optimal cooldown rotations. And unlike most classes, you can remain fairly mobile while landing damage on the target.

What really sets the Beast Mastery Hunter apart is right there in the name — the Beast that accompanies you on your journeys across Azeroth. Cresting a hill with a trusty boar at your side to ding XP off a new location is an iconic moment every WoW player should experience at least once. From middle to late game, running dungeons and questing with a pocket tank in the form of your pet is incredibly fun (and potentially dangerous if you don’t micro your pet properly!).

If you want to extract the most succulent nectar the PvE realm has to offer, look no further than the Beast Mastery Hunter, one of the best WoW classes ranked.

All’s Fair in Love and Warcraft

The Best WoW Classes Ranked [Shadowlands Update] | HGG (8)

The meta is a strange and fickle creature. Just when you think you’ve got it figured out, it goes and flips the table before storming off to recreate itself.

All the above choices for WoW classes ranked are subject to change, perhaps even by the time this article is published. Remember that our focus is fun here at High Ground Gaming — although most times fun and “as much DPS as one class can contain” go hand in hand.

Whether Shadowlands is just another expansion for you or your first adventure in Azeroth, we wish you good guildmates, great RNG, and many level-ups.

If we don’t see you in WoW, we’ll see you in the next guide.

The Best WoW Classes Ranked [Shadowlands Update] | HGG (9)

Related Reading

  • 10 Best MMOs Roundup
  • How to Create a Discord Server
  • WoW Expansions Ranked
  • Overwatch vs. Paladins: Battle of the Hero Shooters
  • Mass Effect Games Ranked From Worst to Best
" );})(jQuery);});
  1. The Best WoW Classes Ranked [Shadowlands Update] | HGG (10)

    Williamon October 4, 2022 at 2:01 pm

    I know it’s nearing the end of Shadowlands, but Enhancement Shaman is missing from this list 🙁

    Reply

Submit a Comment

Top Articles
Latest Posts
Article information

Author: Ms. Lucile Johns

Last Updated: 02/02/2023

Views: 6303

Rating: 4 / 5 (41 voted)

Reviews: 88% of readers found this page helpful

Author information

Name: Ms. Lucile Johns

Birthday: 1999-11-16

Address: Suite 237 56046 Walsh Coves, West Enid, VT 46557

Phone: +59115435987187

Job: Education Supervisor

Hobby: Genealogy, Stone skipping, Skydiving, Nordic skating, Couponing, Coloring, Gardening

Introduction: My name is Ms. Lucile Johns, I am a successful, friendly, friendly, homely, adventurous, handsome, delightful person who loves writing and wants to share my knowledge and understanding with you.