Almost every confusing answer about Stockfish's rating comes from three different numbers being treated as one. They are not the same thing, and only one of them describes how strong the engine is.
1. Its real rating: about 3650
On the CCRL standard list, Stockfish 18 sits around 3650, and Stockfish 19 tests about 44 ELO above it. This is the engine playing properly, with nothing held back.
2. The UCI_Elo setting: 1320 to 3190
A knob for making the engine play worse on purpose. Its 3190 ceiling is lower than the engine's real rating, which is not a contradiction — it was never meant to describe full strength.
3. Skill Level: 0 to 20
A coarser version of the same idea. 20 means no limit at all. 0 to 18 map onto the rating range below.
These are not estimates. Stockfish converts a rating into a skill level with a fixed cubic in src/search.h, so the table below is that function inverted. The depth column comes from the same struct: a given level stops and picks its move at depth level + 1.
Skill Level
Approx. ELO
Picks at depth
0
1320
1
1
1444
2
2
1566
3
3
1729
4
4
1953
5
5
2197
6
6
2383
7
7
2518
8
8
2624
9
9
2711
10
10
2786
11
11
2851
12
12
2910
13
13
2963
14
14
3012
15
15
3057
16
16
3099
17
17
3139
18
18
3176
19
20
~3650 (unlimited)
full search
Notice how uneven it is. Levels 0 to 8 cover about 1300 rating points; levels 8 to 18 cover barely 550. Once the engine is searching nine plies deep it is already far beyond human strength, so every level after that is a fine adjustment between "unbeatable" and "unbeatable".
Where These Numbers Come From
This is the conversion, straight out of struct Skill:
Two things fall straight out of it. First, the comment above it in the source says this range corresponds to CCRL Blitz 1320–3190, which is where the ratings in the table come from.
Second, something the documentation does not mention: feed it the maximum, 3190, and it returns 18.38, not 19. So Skill Levels 19 and 20 are unreachable through UCI_Elo. If you want level 20 — full strength — you have to switch UCI_LimitStrength off entirely. Setting UCI_Elo to its maximum is not the same as removing the limit.
Why Nothing Plays Below 1320
If you are a beginner looking for an 800-rated opponent, Stockfish cannot give you one. LowestElo is 1320 and every value beneath it clamps to the same place, so 600, 800, 1000 and 1200 all play exactly alike. Skill Level is no help either: it is ignored whenever UCI_LimitStrength is on.
There is a deeper problem than the floor, though. The engine weakens itself by searching well and then degrading its answer, so its mistakes are not beginner mistakes. A real 800-rated player misses a hanging queen because they did not look. A weakened engine plays twenty accurate moves and then gives away a piece for nothing. Both lose the game; only one feels like a person.
That is why our bots below 1320 do not use UCI_Elo at all. The engine runs at full strength and we model the choice instead: it returns its best candidate moves with scores, and a weaker rating picks a worse one more often, with errors drawn from the plausible end of that list rather than from nowhere.
"Level 5" Somewhere Else Is Not Skill Level 5
This trips people up constantly. When a site offers you "Stockfish level 1 to 8", those are that site's own presets — a chosen combination of skill level, search depth and thinking time. They are not the engine's Skill Level 0–20 scale, and the numbers do not line up.
So "what ELO is level 5" has no single answer until you say whose level 5. The table above is the engine's own scale, which is the one that applies when you set Skill Level directly in a UCI client. Our 11 bots publish a rating rather than a level number for exactly this reason, and you can check your own with the ELO test before picking one.
Stockfish vs Human Ratings
Player
Rating
vs Stockfish
Stockfish 19
~3690
—
Stockfish 18
~3650
−44
Magnus Carlsen (peak)
2882
−770
Grandmaster (typical)
2500
−1150
Club player
1600
−2050
Beginner
800
−2850
A 770-point gap is not a hard match, it is a different category. Carlsen at his peak would not expect to win a single game. This is also why an engine evaluation is worth trusting when you are reviewing your own play: whatever it says about your position, it is not the thing that is wrong.
Stockfish ELO FAQ
What is Stockfish's ELO rating?
Around 3650 on the CCRL standard rating list for Stockfish 18, with Stockfish 19 testing roughly 44 ELO above that. This is a different number from the UCI_Elo setting, which only goes up to 3190 — that option exists to make the engine play weaker, so its ceiling is not a measure of full strength.
What ELO is Stockfish level 1?
Skill Level 1 corresponds to roughly 1444 ELO, and it picks its move at search depth 2. Level 0 is about 1320, which is the floor.
What ELO is Stockfish level 4?
Skill Level 4 is roughly 1953 ELO and picks its move at search depth 5.
What ELO is Stockfish level 5?
Skill Level 5 is roughly 2197 ELO and picks its move at search depth 6.
What ELO is Stockfish level 8?
Skill Level 8 is roughly 2624 ELO and picks its move at search depth 9. The jumps get much smaller above this point — levels 8 through 18 span only about 550 ELO, while levels 0 through 8 span 1300.
Why can't Stockfish play below 1320 ELO?
1320 is a hard floor written into the engine (Skill::LowestElo in search.h). Any UCI_Elo value below it clamps to the same setting, so 600, 800, 1000 and 1200 all play identically. Skill Level cannot go lower either, because it is ignored whenever UCI_LimitStrength is enabled.
Are Stockfish skill levels the same as Lichess levels?
No. Lichess levels 1-8 are its own configuration built on top of Stockfish, not the engine's Skill Level 0-20 scale. A Lichess level number and a Stockfish Skill Level number are not interchangeable.
How does Stockfish actually play weaker?
It searches normally and then deliberately picks a worse move. Skill Level N stops and chooses at depth N+1, and picks from its multi-PV candidates with randomness weighted by the level. That is why weakened engines blunder in a distinctive way — twenty strong moves, then a piece dropped for nothing.
Does the UCI_Elo range change between Stockfish versions?
It has been 1320 to 3190 in both Stockfish 18 and 19, with an identical conversion formula, so settings carry over unchanged between those versions.
Can Magnus Carlsen beat Stockfish?
No. Carlsen's peak rating was 2882 and Stockfish is around 3650 — a gap of roughly 770 points, which in practical terms means he would not win a single game in a match. No human has beaten a top engine in serious conditions for well over a decade.
Is there a 4000 ELO chess engine?
Not on the standard CCRL rating list, where the top engines sit in the 3600s. Higher figures you see quoted usually come from faster time controls or from rating lists with different calibration, so a 4000-plus number is not directly comparable to a classical rating.
What is the highest UCI_Elo I can set?
3190. Worth knowing: the conversion is a cubic, and at 3190 it produces Skill Level 18.38 — so Skill Levels 19 and 20 cannot be reached through UCI_Elo at all. Level 20, full strength, means turning UCI_LimitStrength off entirely.
Play the Rating You Actually Want
Eleven bots from 400 to 3650, and a calculator running the full-strength engine when you want the truth instead of a fair fight.