The Main Window

A simple AddOn that provides details about your levelling progress, tracking a variety of items required until you reach your next level.

Tracks the following:

  • Mob kills and Quests.
  • Dungeon runs.
  • Battleground runs, as well as individual BG objectives.
  • Gathering professions, including Archaeology.
  • Pet Battles.

Display Options

  • A small, configurable window, showing averages needed to level, a mini XP bar, and a time-to-level estimate.
  • A "floating" message and/or a chat message can be shown when XP is gained, to show exactly how many more such gains are required to level.
  • A highly configurable LDB data-source, providing data to LDB front-end AddOns, such as TitanPanel and Fortress.


All of these display features can be configured via the configuration panel, which is accessible in the Interface/AddOns window, or simply by typing the commands: /xtl or /xtolevel

Language support

The AddOn now supports all the WoW clients, except Italian.

You can help improve the translations via the Localization tool at curseforge.com. All contributions are greatly appreciated!

Special thanks to all the translators:  - Trisquite/TAG Translations (Spanish)  - Queltos (Portuguese)  - Marcel and Axel (German)  - gyw920812 and zhTW (Trad. Chinese)  - Theerol and kim20 (Russian)  - atty0530 (Korean)  - carignou, Kanardator, lalrobin, tripollite, Djidiouf (French)  - Xyrec (Danish)

LDB Output Patterns

XToLevel provides a few built-in patterns for displaying it's data in LDB display AddOns.
However the patterns are highly configurable, so you can build your own pattern if you prefer.
See Custom LDB Patterns for details.

You must login to post a comment. Don't have an account? Register to get one!

  • Avatar of subwired subwired Dec 10, 2013 at 01:25 UTC - 0 likes


    if WorldMapFrame:IsVisible() then return end

    right after line function XToLevel:MainOnEvent(event, ...)

    keep it from get the "has been blocked..." error message

  • Avatar of eridius eridius Feb 17, 2013 at 07:01 UTC - 0 likes

    gitignore doesn't ignore changes to existing files. I can use the assume-unchanged bit, but it's not really designed for this. What do you personally do?

    For the syntax issue, my recommendation would be to change the locale files to look like

    local _, addonTable = ...
    addonTable.LOCALE["enUS"] = {}
    local L = addonTable.LOCALE["enUS"]
    [email protected](locale="enUS", format="lua_additive_table")@

    This way it will be syntactically correct without keyword substitution, and will insert the localizations into the L table when packaged.

    In order to actually have good values without keyword substitution as well, you might have a default_enUS.lua file that contains a dump of the current English translations, and edit locale.xml to have

    <[email protected]@--><Script file="default_enUS.lua"/><[email protected]@-->

    Load this as the first locale, and it will be skipped during packaging.

    And then for the other locales, after the [email protected] line you can add

    setmetatable(L, { __index = addonTable.LOCALE["enUS"] })

    instead of using the handle-unlocalized="english" command. This will have the same effect except it will work when there's no keyword substitution.

    Last edited Feb 17, 2013 by eridius: Fix the format of the localization
  • Avatar of AtliThor AtliThor Feb 17, 2013 at 06:30 UTC - 0 likes

    Hey eridius.

    I would simply set up a gitignore file on my local clone of the repo to ignore changes to the localization files and then overwrite them with copies from the latest version from the site.

    As for the globals. Thanks for the suggestion. I truthfully never gave it much thought. This was just an obvious way to do what I needed, and I've never had any problems with it.

  • Avatar of eridius eridius Feb 17, 2013 at 06:04 UTC - 0 likes

    I tried checking out the git repo for this project, but because of the way localizations work, all the locale files are invalid (since they require the repository keyword substitution to become valid). How do you deal with that?

    Also, you seem to be stuffing the locale info into two global variables named L and LOCALE. This is a really bad idea. You should put these into the addon-specific table (the second arg passed to each lua file) instead.

  • Avatar of AtliThor AtliThor Jan 28, 2011 at 17:55 UTC - 0 likes

    Hey dakar.

    Sure that shouldn't be much trouble. I'll try to add that as soon as I can.

    Thanks :)

  • Avatar of dakar2008 dakar2008 Jan 28, 2011 at 07:38 UTC - 0 likes

    Hi AtliThor, do you think it would be possible to add a button to reset gathering data also, like for dungeon and mobs, and maybe a counter for when you pickup Archaeology fragments, like when you pickup Herbs, so i can track how many pickup's i need to lvl my character, by the way great addon you done there m8.

    Best Regards.

    Begnar @ EU-Runetotem

  • Avatar of skelgaard skelgaard Oct 27, 2010 at 09:31 UTC - 0 likes

    well now i'm raiding quite a bid on my hunter and therefor it "bugs" me a little to see the text disabled in the bar, but don't wanna run 4 different addon profiles, if i don't have to

  • Avatar of AtliThor AtliThor Oct 26, 2010 at 17:00 UTC - 0 likes

    In version 4.0.1_19 you should be able to uncheck the "Enabled" box at the top of the LDB Configuration tab to disable the LDB sources entirely. You should also be able to disable both the Window and Messages in their respective configuration tabs.

    I'll see if I can make this a bit more automated in the next release. To be honest I never really payed much attention to what happened after chars reached 80. I usually just move onto my next alt when that happens :)

    Could take me a little time. I've got a busy week ahead of me in RL.

  • Avatar of skelgaard skelgaard Oct 25, 2010 at 20:31 UTC - 0 likes

    i have a hunter my selves... and it its fine it stays active, if it it then just removed all text and only was an icon, so it fills as little as possible then. or had an option for this. like "remove all text, if no leveling is possible"

    Last edited Oct 25, 2010 by skelgaard
  • Avatar of AtliThor AtliThor Oct 24, 2010 at 16:43 UTC - 0 likes

    Hey skelgaard.

    The reason why I keep the Addon active for level 80 chars is so hunters can use it to level their pets. - I should be able to disable it, or at least the LDB source, for other classes though. I'll look into it.

    Thanks ;)


Date created
Mar 18, 2008
Last update
Jul 25, 2016
Development stage
  • deDE
  • enUS
  • esES
  • esMX
  • frFR
  • koKR
  • ptBR
  • ruRU
  • zhCN
  • zhTW
MIT License
Curse link
Recent files