CS2 Crosshair Generator and Code Decoder

Paste a crosshair code to see what is actually in it — then change it, and take a valid code or a block of console commands back to the game.

Paste a CS2 crosshair code

In the game the same code goes into Settings → Game → Crosshair → Share or Import. Here it gets taken apart first.

Behind it

ToolGuild’s own drawing at a reference height of 1080 pixels, with the distance from the centre held still. In game that distance moves with your weapon’s inaccuracy for the dynamic styles. Not pixel-perfect, and no game imagery is used.

Your crosshair code

CSGO-EiyPn-QMRDm-v6RvD-uZZaH-AbGiJ

Community-derivedchecked Aug 31, 2026

What this code contains

The in-game editor shows you controls. This shows you contents — including the settings you were not going to go looking for.

cl_crosshairstyle
4
cl_crosshairsize
2.5
cl_crosshairthickness
1
cl_crosshairgap
-2
cl_fixedcrosshairgap
-2
cl_crosshairdot
0
cl_crosshair_t
0
cl_crosshairgap_useweaponvalue
0
cl_crosshaircolor
1
cl_crosshaircolor_r
50
cl_crosshaircolor_g
250
cl_crosshaircolor_b
50
cl_crosshairusealpha
1
cl_crosshairalpha
255
cl_crosshair_drawoutline
1
cl_crosshair_outlinethickness
1
cl_crosshair_recoil
0
cl_crosshair_dynamic_splitdist
7
cl_crosshair_dynamic_splitalpha_innermod
1
cl_crosshair_dynamic_splitalpha_outermod
0.5
cl_crosshair_dynamic_maxdist_splitratio
0.3
Technical detail

The eighteen bytes the code carries, most significant first, and the integer each setting is stored as. Nothing here is needed to use the tool; it is here because a page that claims to decode should show its working.

cl_crosshairstyle = 4
cl_crosshairsize = 25
cl_crosshairthickness = 10
cl_crosshairgap = -20
cl_fixedcrosshairgap = -20
cl_crosshairdot = 0
cl_crosshair_t = 0
cl_crosshairgap_useweaponvalue = 0
cl_crosshaircolor = 1
cl_crosshaircolor_r = 50
cl_crosshaircolor_g = 250
cl_crosshaircolor_b = 50
cl_crosshairusealpha = 1
cl_crosshairalpha = 255
cl_crosshair_drawoutline = 1
cl_crosshair_outlinethickness = 2
cl_crosshair_recoil = 0
cl_crosshair_dynamic_splitdist = 7
cl_crosshair_dynamic_splitalpha_innermod = 10
cl_crosshair_dynamic_splitalpha_outermod = 5
cl_crosshair_dynamic_maxdist_splitratio = 3

Carried unchanged: 1, 0, 0, 0, 0, 0. Five parts of the record are not explained by any setting ToolGuild knows, and are written back exactly as they arrived.

Console commands

Twenty-one lines, as plain text, for an autoexec.cfg. ToolGuild hands nobody a file to run.

cl_crosshairstyle "4"
cl_crosshairsize "2.5"
cl_crosshairthickness "1"
cl_crosshairgap "-2"
cl_fixedcrosshairgap "-2"
cl_crosshairdot "0"
cl_crosshair_t "0"
cl_crosshairgap_useweaponvalue "0"
cl_crosshaircolor "1"
cl_crosshaircolor_r "50"
cl_crosshaircolor_g "250"
cl_crosshaircolor_b "50"
cl_crosshairusealpha "1"
cl_crosshairalpha "255"
cl_crosshair_drawoutline "1"
cl_crosshair_outlinethickness "1"
cl_crosshair_recoil "0"
cl_crosshair_dynamic_splitdist "7"
cl_crosshair_dynamic_splitalpha_innermod "1"
cl_crosshair_dynamic_splitalpha_outermod "0.5"
cl_crosshair_dynamic_maxdist_splitratio "0.3"

Edit it

Shape

Style

Shape

Colour

Colour

Green

Colour

Outline

Outline

Dynamic behaviour

These four take effect on the styles that move. They are carried in the code whichever style you choose, so they are here rather than hidden.

Dynamic behaviour

A second gap value the record carries alongside the ordinary one. Left at a copied number more often than any other setting, which is why this page shows it to you.

Your crosshairs

Up to 12, kept in this browser with your own names on them. Nothing is sent anywhere and there is no account.

Nothing saved yet.

Side by side

Pick two or three and see them aligned. What differs is marked; nothing is scored.

Choose two of your saved crosshairs, or the one you are editing, to compare them.

What this does

Paste a code and it is decoded, not just loaded. Counter-Strike 2 will import a crosshair code and show you sliders. It will not tell you that the code you were sent has a follow-recoil setting switched on, an outline of 0.5 and a fixed gap of −9. This page lists every one of the twenty-one settings the code carries, in plain values.

Edit against a preview that is bigger than the game's. Change the size, gap, thickness, dot, T shape, outline, colour and alpha and watch the shape change. Then take either output: a valid share code to import, or the console commands to paste into a config file.

Keep several, and compare them. Up to twelve crosshairs live in this browser, with your own names on them, and any two or three can be put side by side — the pictures and the settings aligned, with the differences marked. No account, nothing sent anywhere.

A bad code is refused and told to you. A mistyped character, a wrong length, a letter the alphabet does not contain or a checksum that disagrees with the contents all produce a specific message rather than a shrug or, worse, a plausible-looking crosshair that is not the one you were sent.

What is inside a crosshair code

A crosshair code is a small packed record, not a name for a preset. `CSGO-` followed by twenty-five characters in five groups. The characters are digits of a base-57 number, over an alphabet that leaves out capital I, lower-case l and g, and the digits 0 and 1 — the ones people misread. That number is eighteen bytes, and those bytes are your settings.

The first byte is a checksum: the sum of the other seventeen, modulo 256. That is what makes a mistyped code detectable rather than silently wrong, and this page checks it before it shows you anything.

The settings are stored as whole numbers in the game's own units. `cl_crosshairsize 1.7` is stored as 17, not as 1.7. This page keeps them that way and only turns them into decimals at the moment of printing them — so nothing you see is ever converted back into the code. A size of 819.1 survives that; a tool that round-tripped through a decimal would not.

The size field is wider than it looks. It occupies thirteen bits across two bytes, which is how a code can carry a crosshair of 255. Two of the four implementations ToolGuild compared read it as eight bits, and real codes decide it: three codes published as deliberately screen-filling crosshairs are the only ones in a corpus of 131 whose second size byte is used at all.

And one field is narrower than some tools assume. The split distance is read here from three bits, giving 0 to 7. Two implementations read seven bits from that byte; two others read the whole byte before follow-recoil existed. Nothing ToolGuild could find establishes who is right — only one real code in 131 sets any of the disputed bits, and nobody publishes what its split distance is. So this page reads the part everyone agrees on and carries the rest untouched, rather than picking a side and presenting it as fact.

Five parts of the record are not explained by any known setting — one byte after the checksum, one bit under the style, three bits above the size and the final two bytes. Every real code checked carries the same values there. This page carries them through your edit untouched rather than clearing them, because "we have not seen it vary" is not the same as "it means nothing".

What the preview is, and what it is not

The preview is ToolGuild's own drawing of your settings, and it is an approximation. It is drawn from the numbers, in ToolGuild's own shapes, with no game imagery of any kind. Two things about it are not the game, and saying so is the point of this section.

The distance from the centre is held still. In the game that distance is not fixed: for the dynamic styles it moves with the weapon's inaccuracy as you walk, jump and fire, and `cl_fixedcrosshairgap` takes part for the static ones. A still picture has to pick a value, so this page picks a neutral one and tells you it did. What the preview reproduces faithfully is everything you are actually choosing between: arm length, thickness, gap, the dot, the missing top arm, the outline, the colour and the alpha.

Two of the six styles are not drawn at all. The styles the sources call *default* are described as substituting parts of the game's own shape for yours, and ToolGuild has no verified model of what they substitute. So it declines to draw them and says which style it declined on, rather than showing you a picture that is confidently wrong. The four classic styles are drawn.

It is not pixel-perfect and this page will not call it that. Your crosshair's drawn size scales with your screen's vertical resolution; the preview is drawn for one height and names it. Nothing here simulates firing, movement, or the way a dynamic crosshair splits.

None of this rests on a Valve publication, because ToolGuild did not find one. The research gate did not find a Valve publication of the share-code format in the official surfaces it checked: the Counter-Strike site, the Steam help surface for the game, and the Valve developer wiki, which did not answer a plain request. That is what a search found, not a claim that Valve has never documented it anywhere.

So the codec rests on four independently authored, publicly readable implementations — in TypeScript, C#, JavaScript and Python, under three different licences and one with none stated — and on 131 real share codes, 129 of which verify their own checksum and re-encode to themselves character for character. Twenty were published beside their own list of console values by someone who did not generate the code, and every field agrees on all twenty.

What the styles and the editable ranges rest on is better than that. They come from the game's own ConVar table — its defaults, its declared minimums and maximums, and its help strings — read from two independently maintained dumps whose text agrees word for word. That is how this page knows styles 0, 1 and 3 are disabled today, and that the outer split alpha will not go below 0.3.

Every provenance row still says "Community-derived" and the verification level is still 1, because even the game's own words reach ToolGuild through a transcription nobody here checked against the binary.

A worked example

Somebody sends you `CSGO-cTKPj-PuKqq-5T8A4-wH5GQ-YF5RG`. In the game you would import it and get a crosshair. Here you get the contents.

It is style 4 — the game's "default static". Size 1.7, thickness 0, gap −2. The outline is on at 0.5. The colour index is 5, which means the colour comes from the channels rather than a preset, and those channels are 0, 255, 0. The alpha is on at 255. And a detail you would not have gone looking for: `cl_fixedcrosshairgap` is −9, which is a long way from the default and is doing real work on a static crosshair.

Now change something. Set the colour index to 1 and the crosshair becomes the green preset. The code changes to a different twenty-five characters, and the seventeen settings you did not touch — including the fixed gap of −9 and the five parts of the record nobody has explained — are still exactly what they were. Import it and you get your edit, not a reset.

Then take the other output. The console commands button gives you twenty-one lines: `cl_crosshairstyle 4`, `cl_crosshairsize 1.7`, `cl_crosshairgap -2`, `cl_fixedcrosshairgap -9`, and so on. Plain text, for an `autoexec.cfg`. Note that the size prints as `1.7` and not as `1.7000000001` — the value in the record is the whole number 17, and the decimal is made from it rather than the other way round.

Finally, save it. Name it "long range", change the size to 3, save that as "close", and put the two side by side. The comparison shows both pictures, both codes and every setting that differs between them. It does not tell you which is better, because nobody can.

What this does not do

It does not tell you which crosshair is best. There is no score, no accuracy figure and no ranking anywhere on this page. Crosshair preference is subjective, and a number attached to it would be invented.

It holds no player's crosshair. No pro settings, no gallery, no names. This tool is for your own crosshair. A player-configuration layer would be a different product with its own acquisition, freshness and attribution questions, and it would have to earn its place separately.

The preview is an approximation and not the game. The distance from the centre is held at a neutral value, nothing simulates firing or movement, and two of the six styles are not drawn at all. See the section above for exactly what that means.

It cannot check that a code is one you want. It checks that a code is *well formed*: the right prefix, the right shape, characters from the right alphabet, a magnitude that fits eighteen bytes and a checksum that matches the contents. A code that passes all five is a real crosshair record. Whether it is a crosshair you like is not a question arithmetic answers.

What a code can hold and what you can choose are two different things, and this page keeps them apart. The record has room for a size of 819.1 and for a split alpha of 1.5. The game clamps that alpha to 1, its neighbour to a minimum of 0.3, and the outline to 3 — so those are the ranges the controls use, because they are the game's. Where the game declares no limit at all, as it does for size, thickness and both gaps, the controls use a ToolGuild range and the page says whose it is.

An imported value outside those ranges is kept, not corrected. It is shown, it is named, it goes into everything you export, and the page tells you it is outside what the editor works within. What the ranges govern is what the controls will *newly* produce.

Three of the six styles are disabled in the game today. Styles 0, 1 and 3 are marked DISABLED in Counter-Strike 2's own description of the setting, so this page does not offer them. A code containing one still decodes, still survives an edit and still exports unchanged — it is simply labelled for what it is rather than presented as an ordinary choice. Styles 6 and 7 fit in the record and the game describes neither; a code carrying one is reported as unrecognised rather than given a name ToolGuild made up.

The style names come from the game, and two of them repeat. Counter-Strike 2 calls both 0 and 2 "Default", and both 1 and 4 "Default static". That is faithful rather than tidy, and it is why the number is always printed beside the name. An earlier version of this page used the CS:GO-era names — Classic, Classic dynamic, Classic static — and presented them as current; they are not what the game calls these settings today.

These facts are community-derived, and the page says so. No Valve publication of the format was found in the official sources checked, so the provenance line reads "Community-derived" and the verification level is 1. That is the honest label rather than a disclaimer bolted on — and the code this page produces is one you can check in about twenty seconds by importing it and looking.

Where this data comes from

How ToolGuild verifies what it publishes

Report an issue with this tool

Computed by the ToolGuild cs2/crosshair engine, version 1.0.0, against dataset crosshair-rules version 1.

Questions people ask

How do I use a CS2 crosshair code? In the game, open Settings, then Game, then the Crosshair section, and use *Share or Import*. Paste the code and import it. On this page you paste it into the import field instead, and get its contents rather than just its effect.

Why do CS2 crosshair codes still start with CSGO? They do, and ToolGuild checked rather than assuming: codes published as current Counter-Strike 2 crosshairs carry that prefix and decode correctly, including the two settings that exist only in Counter-Strike 2. The prefix is part of the format, not a statement about which game it is for.

My code says it is invalid — what does that mean? This page gives you the specific reason. A wrong prefix or the wrong number of characters means it was never a crosshair code. A character the alphabet does not contain — capital I, lower-case l or g, or a 0 or a 1 — usually means a character was misread when it was copied, and the page names the offending one. A checksum failure means the code is the right shape but its contents disagree with its own integrity byte, which is what a single mistyped character produces. Nothing is repaired: a repaired code would be somebody else's crosshair.

Can I get the console commands instead of a code? Yes. All twenty-one lines, as plain text, for pasting into a config file. It is text and only text — ToolGuild does not hand anybody a file to run.

Will editing a code lose the settings this page does not show me? No, and this is the one thing the page is most careful about. Everything in the record survives an edit, including the parts of it nobody has explained. Import a code, change one thing, export, and the other twenty settings plus the five unexplained regions are byte-identical.

Does the preview show exactly what I will see in game? No, and it does not claim to. It draws your settings faithfully — length, thickness, gap, dot, T shape, outline, colour, alpha — at one screen height, with the distance from the centre held still. In the game that distance moves with your weapon's inaccuracy for the dynamic styles.

What is cl_fixedcrosshairgap? A separate gap value the record carries alongside the ordinary one. It is one of the settings most often left at a number somebody copied without noticing, which is exactly why this page shows you every value rather than only the ones you are adjusting.

What is the best CS2 crosshair? There isn't one, and any page that gives you a number for it made the number up. What helps is seeing what you have, changing one thing at a time, and comparing two of your own side by side — which is what this page is for.

Are my saved crosshairs sent anywhere? No. They are kept in this browser, there is no account behind them, and "Start over" clears them. The names are yours; ToolGuild never treats them as facts about the game.

ToolGuild is not affiliated with, endorsed by, or sponsored by any game publisher. Game names are used only to identify the game a tool is about.

ToolGuildThe interactive answer layer for games