Plan your Runecrafting journey in Old School RuneScape. This calculator helps you estimate the XP, essences, time, and potential profit or loss required to reach your desired Runecrafting level.
Air Rune (Level 1)
Mind Rune (Level 2)
Water Rune (Level 5)
Earth Rune (Level 9)
Fire Rune (Level 14)
Body Rune (Level 20)
Cosmic Rune (Level 27)
Chaos Rune (Level 35)
Astral Rune (Level 40)
Nature Rune (Level 44)
Law Rune (Level 54)
Death Rune (Level 65)
Blood Rune (Level 77)
Soul Rune (Level 90)
Wrath Rune (Level 95)
Includes inventory, pouches, colossal pouch. Max 84 for pure/daeyalt, 100 for guardian.
Estimate round trip time to altar and back to bank.
Understanding Runecrafting in OSRS
Runecrafting is one of the most unique and often challenging skills in Old School RuneScape. It involves crafting various elemental and catalytic runes from Rune Essence or Pure Essence at specific altars scattered across Gielinor. While it can be a slow skill to train, it's also one of the most consistently profitable, especially at higher levels.
How Runecrafting Works
To craft runes, players must first obtain Rune Essence or Pure Essence. Pure Essence is required for all altars except the Air altar, and it's the primary essence used for training. Players then take their essence to the corresponding altar (e.g., Air altar for Air runes, Nature altar for Nature runes) and use the essence on the altar to craft runes.
The number of runes crafted per essence increases with your Runecrafting level. For example, at level 1, you craft 1 Air rune per essence. At level 11, you craft 2 Air runes per essence, and so on, up to 10 runes per essence at level 99 for Air runes. This multiplier is crucial for both XP rates and profit.
Essence Types
Pure Essence: The standard essence, used for most altars.
Daeyalt Essence: Obtained from the Daeyalt Mine. It provides 50% more experience per essence but only crafts 1 rune per essence, regardless of your Runecrafting level. This makes it excellent for pure XP training but terrible for profit.
Guardian Essence: Obtained from the Guardians of the Rift minigame. It provides 10% more experience per essence and uses the standard rune multiplier, making it a good balance between XP and profit.
Pouches and Inventory Management
To maximize essences per trip, players use various Runecrafting pouches (small, medium, large, giant, colossal) which can hold additional essence. These pouches degrade and must be repaired by the Dark Mage in the Abyss or by using the NPC Contact spell.
The Colossal Pouch, obtained from Guardians of the Rift, is a significant upgrade, holding 40 essence and not degrading.
Profit vs. XP
Runecrafting often presents a trade-off between experience per hour and profit per hour. Methods like crafting Nature runes or Blood runes are highly profitable but may offer lower XP rates than methods like Daeyalt essence training or ZMI (Ourania) altar. This calculator helps you weigh these factors based on your goals.
Using the Calculator
Input your current and target Runecrafting levels, select the rune and essence type you plan to use, and estimate your essences carried per trip and time per trip. The calculator will then provide estimates for total XP needed, essences required, trips, time, and potential profit or loss.
// OSRS XP Table (levels 1-99)
var xpTable = [
0, // Level 0 (not used)
0, // Level 1
83, // Level 2
174, // Level 3
276, // Level 4
388, // Level 5
512, // Level 6
650, // Level 7
801, // Level 8
969, // Level 9
1154, // Level 10
1358, // Level 11
1584, // Level 12
1833, // Level 13
2107, // Level 14
2406, // Level 15
2731, // Level 16
3084, // Level 17
3466, // Level 18
3879, // Level 19
4328, // Level 20
4818, // Level 21
5351, // Level 22
5928, // Level 23
6557, // Level 24
7240, // Level 25
7981, // Level 26
8780, // Level 27
9646, // Level 28
10585, // Level 29
11604, // Level 30
12710, // Level 31
13911, // Level 32
15217, // Level 33
16636, // Level 34
18180, // Level 35
19860, // Level 36
21683, // Level 37
23661, // Level 38
25803, // Level 39
28125, // Level 40
30640, // Level 41
33364, // Level 42
36311, // Level 43
39502, // Level 44
42955, // Level 45
46686, // Level 46
50717, // Level 47
55069, // Level 48
59766, // Level 49
64834, // Level 50
70300, // Level 51
76190, // Level 52
82534, // Level 53
89360, // Level 54
96700, // Level 55
104583, // Level 56
113047, // Level 57
122129, // Level 58
131872, // Level 59
142360, // Level 60
153622, // Level 61
165705, // Level 62
178679, // Level 63
192626, // Level 64
207600, // Level 65
223661, // Level 66
240891, // Level 67
259356, // Level 68
279147, // Level 69
300363, // Level 70
323114, // Level 71
347502, // Level 72
373638, // Level 73
401660, // Level 74
431711, // Level 75
463912, // Level 76
498391, // Level 77
535251, // Level 78
574631, // Level 79
616605, // Level 80
661283, // Level 81
708808, // Level 82
759376, // Level 83
813154, // Level 84
870297, // Level 85
930971, // Level 86
995341, // Level 87
1063573, // Level 88
1135873, // Level 89
1212421, // Level 90
1293443, // Level 91
1379196, // Level 92
1469956, // Level 93
1565974, // Level 94
1667507, // Level 95
1774877, // Level 96
1888360, // Level 97
2008286, // Level 98
2134969, // Level 99
2268730, // Level 100 (for calculation purposes, if needed)
2409900, // Level 101
2558815, // Level 102
2715815, // Level 103
2881269, // Level 104
3055590, // Level 105
3239208, // Level 106
3432576, // Level 107
3636161, // Level 108
3850446, // Level 109
4075933, // Level 110
4313143, // Level 111
4562613, // Level 112
4824892, // Level 113
5090500, // Level 114
5370000, // Level 115
5663000, // Level 116
5970000, // Level 117
6292000, // Level 118
6629000, // Level 119
6982000, // Level 120
7352000, // Level 121
7739000, // Level 122
8145000, // Level 123
8570000, // Level 124
9015000, // Level 125
9481000, // Level 126
9968000, // Level 127
10478000, // Level 128
11011000, // Level 129
11568000, // Level 130
12150000, // Level 131
12758000, // Level 132
13393000 // Level 133
];
// Rune data: base XP, and an array of [level, multiplier] for runes per essence
var runeData = {
"air": { xp: 5, multipliers: [[1, 1], [11, 2], [22, 3], [33, 4], [44, 5], [55, 6], [66, 7], [77, 8], [88, 9], [99, 10]] },
"mind": { xp: 5.5, multipliers: [[1, 1], [14, 2], [28, 3], [42, 4], [56, 5], [70, 6], [84, 7], [98, 8]] },
"water": { xp: 6, multipliers: [[1, 1], [19, 2], [38, 3], [57, 4], [76, 5], [95, 6]] },
"earth": { xp: 6.5, multipliers: [[1, 1], [26, 2], [52, 3], [78, 4]] },
"fire": { xp: 7, multipliers: [[1, 1], [35, 2], [70, 3]] },
"body": { xp: 7.5, multipliers: [[1, 1], [46, 2], [92, 3]] },
"cosmic": { xp: 8, multipliers: [[1, 1], [59, 2]] },
"chaos": { xp: 8.5, multipliers: [[1, 1], [74, 2]] },
"astral": { xp: 8.5, multipliers: [[1, 1], [82, 2]] },
"nature": { xp: 9, multipliers: [[1, 1], [91, 2]] },
"law": { xp: 9.5, multipliers: [[1, 1]] },
"death": { xp: 10, multipliers: [[1, 1]] },
"blood": { xp: 10.5, multipliers: [[1, 1]] },
"soul": { xp: 11, multipliers: [[1, 1]] },
"wrath": { xp: 11.5, multipliers: [[1, 1]] }
};
// Helper function to get XP for a given level
function getXPForLevel(level) {
if (level 99) return 0;
return xpTable[level];
}
// Helper function to get runes per essence based on rune type and level
function getRunesPerEssence(runeType, level) {
var data = runeData[runeType];
if (!data) return 0;
var multiplier = 1; // Default to 1 rune per essence
for (var i = 0; i = data.multipliers[i][0]) {
multiplier = data.multipliers[i][1];
} else {
break; // Multipliers are sorted by level, so we can stop
}
}
return multiplier;
}
// Main calculation function
function calculateRunecrafting() {
// Get input values
var currentLevel = parseInt(document.getElementById("currentLevel").value);
var targetLevel = parseInt(document.getElementById("targetLevel").value);
var runeType = document.getElementById("runeType").value;
var essenceType = document.getElementById("essenceType").value;
var essencesPerTrip = parseInt(document.getElementById("essencesPerTrip").value);
var timePerTrip = parseInt(document.getElementById("timePerTrip").value); // in seconds
var essenceCost = parseFloat(document.getElementById("essenceCost").value);
var runeSellPrice = parseFloat(document.getElementById("runeSellPrice").value);
var resultDiv = document.getElementById("runecraftingResult");
resultDiv.innerHTML = ""; // Clear previous results
// Input validation
if (isNaN(currentLevel) || currentLevel 99 ||
isNaN(targetLevel) || targetLevel 99 ||
isNaN(essencesPerTrip) || essencesPerTrip < 1 ||
isNaN(timePerTrip) || timePerTrip < 1 ||
isNaN(essenceCost) || essenceCost < 0 ||
isNaN(runeSellPrice) || runeSellPrice = targetLevel) {
resultDiv.innerHTML = "Target level must be higher than your current level.";
return;
}
// Get XP for current and target levels
var currentXP = getXPForLevel(currentLevel);
var targetXP = getXPForLevel(targetLevel);
var totalXPNeeded = targetXP – currentXP;
// Determine base XP per essence and runes per essence based on selected type
var baseRuneXP = runeData[runeType].xp;
var runesPerEssenceMultiplier = getRunesPerEssence(runeType, currentLevel); // Use current level for multiplier
var xpPerEssence;
var actualRunesPerEssence;
if (essenceType === "daeyalt") {
xpPerEssence = baseRuneXP * 1.5; // Daeyalt gives 50% more XP
actualRunesPerEssence = 1; // Daeyalt always crafts 1 rune per essence
} else if (essenceType === "guardian") {
xpPerEssence = baseRuneXP * runesPerEssenceMultiplier * 1.1; // Guardian gives 10% more XP
actualRunesPerEssence = runesPerEssenceMultiplier; // Guardian uses standard multipliers
} else { // pure essence
xpPerEssence = baseRuneXP * runesPerEssenceMultiplier;
actualRunesPerEssence = runesPerEssenceMultiplier;
}
// Calculate total essences needed
var totalEssencesNeeded = Math.ceil(totalXPNeeded / xpPerEssence);
// Calculate total trips needed
var totalTripsNeeded = Math.ceil(totalEssencesNeeded / essencesPerTrip);
// Calculate total time needed
var totalTimeSeconds = totalTripsNeeded * timePerTrip;
var totalTimeMinutes = totalTimeSeconds / 60;
var totalTimeHours = totalTimeMinutes / 60;
// Calculate XP per hour
var tripsPerHour = (3600 / timePerTrip); // 3600 seconds in an hour
var xpPerHour = tripsPerHour * essencesPerTrip * xpPerEssence;
// Calculate profit/loss
var totalEssenceCost = totalEssencesNeeded * essenceCost;
var totalCraftedRunes = totalEssencesNeeded * actualRunesPerEssence;
var totalRuneRevenue = totalCraftedRunes * runeSellPrice;
var totalProfitLoss = totalRuneRevenue – totalEssenceCost;
var profitLossPerHour = (totalRuneRevenue / totalTimeHours) – (totalEssenceCost / totalTimeHours);
if (totalTimeHours === 0) profitLossPerHour = 0; // Avoid division by zero if time is negligible
// Display results
var resultsHTML = "