Skip to main content
Yes! This config package works purely on in-game commands which work under SV cheats 0, and a modified language text file.
Yes! The CSAFAP config package IS ALLOWED for your normal ranked PUGS.See responses from Faceit support about yaw/pitch commands and custom radio wheels HERE.See responses from Faceit’s Community Manager about Null binds (aka snap-tap).See responses from Faceit’s Community Manager about Automatic counter-strafe configs, Part 1 and Part 2.
They are not allowed in higher leagues like ESEA, ESL, etc. as their rules are more strict and prohibit the use of the alias command in general. Source.
Step 1: Save the config at this path:
C:\Program Files (x86)\Steam\steamapps\common\Counter-Strike Global Offensive\game\csgo\cfg
To create a new config, copy an existing .cfg file, rename it, and edit its content.Step 2: Execute it by either:
  • Typing exec filename (when using a config named filename.cfg) into the in-game console
  • Adding the same command to an existing config that gets executed automatically
In your Steam library, right-click CS2 > Properties > General > Under launch options insert:
+exec filename
If you see this error:
exec csafap/main
[InputService] exec: couldn't exec '{*}cfg/csafap/main.cfg', unable to read file
You’ve saved the CSAFAP config package at the wrong path.Most likely you accidentally placed it in the directory for the old game CS:GO (instead of CS2), or you didn’t take the csafap folder out of the GitHub repo folder.Correct path: .../steamapps/common/Counter-Strike Global Offensive/game/csgo/cfg/csafapWrong paths:
  • .../steamapps/common/Counter-Strike Global Offensive/csgo/cfg/csafap
  • .../steamapps/common/Counter-Strike Global Offensive/game/csgo/cfg/csafap-config-package/csafap
If you’re on Linux, make sure you wrote exec csafap/main correctly, as it is case sensitive.
Make sure to use scancode binds instead of letters when adjusting the binds in csafap/main.cfg.Here are all qwerty keys and their respective scancodes and this is a scancode bind converter which might be helpful.
Set your sensitivity at the top of csafap/main.cfg. Auto sensitivity detection got patched by Valve.
It’s best to try them yourself and see if you prefer it over default movement.nullWASD: After holding down the initial strafe key, pressing the opposite strafe key will deactivate the initial one. For counter-strafing, this only corrects the human error of not letting go of the initial strafe key, but you still have to release the opposite one at the correct timing. It is good for extremely fast jiggles (holding down one strafe key and quickly tapping the opposite one), not too useful in CS though (maybe for pistol round AD spam).desubtick: Very similar to default movement, but the WASD movement inputs will wait for the next tick to register instead of being subticked and registered immediately. Some users report a more CS:GO-like movement feel.
Use this formula:X=asm_yawX = \frac{a}{s \cdot m\_yaw}Where:
  • X = desired yaw/pitch value
  • a = angle you need to move [°]
  • s = sensitivity (we’re using s = 1.0)
  • m_yaw = adjust your mouse sensitivity only on the X axis (we’re using m_yaw = 0.022)
Note: If you want to include custom line-ups, because we are now (since v.2.15) zeroing the vertical viewangle at -89° instead of at 0°, you need to add +4045.45454545 to your calculated pitch value.
Make sure to follow step 2 of the installation instructions, by copying the csgo folder from the csafap directory to your game’s installation path.This places ../csafap/csgo/resource/platform_english.txt in the correct folder. Edits to this file require a game restart to take effect.
C:\Program Files (x86)\Steam\steamapps\common\Counter-Strike Global Offensive\game\csgo\resource\platform_english.txt
You can debug by typing cl_radialradio into the console and checking the autofill options.
This is an issue with cursor displacement when playing on windowed or fullscreen-windowed while NOT on native resolution.Solution option 1:Change desktop resolution to in-game resolution before launching the game. This CS2 launcher PowerShell script can do that automatically for you.Solution option 2:Before selecting the radio wheel tile, make sure you move your mouse over the tile you want to choose after the text disappears.Solution option 3:It seems like the cursor gets displaced to the right after pressing the keybind again. Make sure to place your mouse more to the left on the tile. Pulling outside of the circle helps, as the tiles are extended to the edge of the screen at that moment.
This is caused by the W-bind of NullWASD. Make sure to use default movement (for JT), or change csafap/movement/nullWASD.cfg to use bind W +forward instead.I recommend using a macro for Jumpthrow and the bind from this config for WJT. Here is how to set up a JT macro: https://youtu.be/yqtJZFQSF_U
When using the W-JT bind, -forward has to be used delayed, otherwise the bind would be a simple jumpthrow without the 30 u/s forward velocity.Switching to your knife by pressing 3 - or moving your crosshair - should reset this action. If not, you might have issued +forward multiple times without canceling it multiple times.Short term fix: Use this in console:
forward -999 0 0
Long term fix: Make sure the same command is saved in csafap/addons/-forward.cfg, which should be called by an alias bound to the key 3, as well as mouse_x and mouse_y after using the WJT bind.
The update of October 28, 2024 patched our multi-input methods, meaning only the first action of a bind will be issued and the rest ignored.That means, using a pre-patch de-subtick jump bind now will use +jump but NOT issue -jump, resulting in you not being able to jump anymore afterwards.Typing -jump into the console will fix this issue, but you might need to use it multiple times if you spammed the old-dated jumping bind multiple times:
jump -999 0 0
Now use working jump binds by either resetting your binds to default (bind mwheeldown +jump) or by using the newest version of the CSAFAP config package.
You can find the most basic set of configs to bind your own radio commands on the CS AFAP Discord in the pinned messages of the #auto-lineup-config channel.Join the CS AFAP DISCORD SERVER HERE.Step 1: Within your own auto-exec, create a bind which opens the radio wheel and switches between two phases (labels and commands):
bind J +wheel_1                               // Keybind to custom wheel_1

alias +wheel_1 "exec CustomRadio/radio_labels"  // Call custom text
alias -wheel_1 "+radialradio; bind J +wheel_2"
alias +wheel_2 "exec CustomRadio/radio_cmd"     // Call custom commands
alias -wheel_2 "-radialradio; bind J +wheel_1"
Step 2: Create a label within the language file platform_english.txt:
"CFG_NOCLIP"          "NOCLIP \n without HUD \n  \n  \n  \n  \n "
Step 3: Call this label on an empty radio tile within a separate config, e.g.: CustomRadio/radio_labels.cfg:
cl_radial_radio_tab_0_text_1 "#CFG_NOCLIP"
Step 4: Enter the desired commands within another separate config, e.g.: CustomRadio/radio_cmd.cfg using the same radio tile as in the previous step:
cl_radial_radio_tab_0_text_1 cmd";noclip;toggle cl_drawhud 0 1;toggle r_drawviewmodel 0 1;
This line has to end with ; and cannot contain any " after cmd";. To use commands which need ", within your own autoexec create an alias:
alias do_something "bind c \"toggle sv_noclipspeed 50 800\""
… and call that one instead (within CustomRadio/radio_cmd.cfg):
cl_radial_radio_tab_0_text_1 cmd";do_something;
Option 1:Launch the CSAFAP practice mode and use the CT-wheel-bind (default: H) to teleport directly to the desired spawn. Use the mouse scroll wheel to access more options while the radio wheel is open. Note that the numbering might differ from those of other practice services.Option 2:Offline with bots, set mp_randomspawn 0 and bind m "mp_restartgame 1". You can save a position by taking the first two values from getpos and the third from getpos_exact.You can also find setpos commands to every spawn in the description of videos showing instant smokes.YouTube playlists sorted by maps.
If you are using JT, WJT, rapid fire, or follow-recoil features, you also need to use bind mouse2 +M2. To make the scoreboard work with that, use:
cl_scoreboard_mouse_enable_binding +M2
If you are not using those features and use the default bind mouse2 +attack2, you need to use:
cl_scoreboard_mouse_enable_binding +attack2
Firstly, make sure you are setting all the requirements for it:
  • Using launch option: -testscript "../../csgo/cfg/CSAFAP/addons/.vtest"
  • Setting ef_... binds in csafap/main.cfg
Secondly, these features are framerate dependent. By default they work at >150 FPS. If you get less, you need to rename:
csafap/crosshair/rapid_followrecoil_lessthan150FPS.cfg
to:
csafap/crosshair/rapid_followrecoil.cfg
Rapid fire is only enabled for pistols, so take out your pistol (by pressing the keybind you assigned ef_slot2 to) after activating the feature.
You need to use the ef_... binds towards the bottom of csafap/main.cfg, as they are a requirement for follow-recoil and rapid fire features.
The launch option -testscript "../../csgo/cfg/csafap/addons/.vtest" spawns these aliases every frame. If the aliases are not assigned on game launch, this will happen and other binds using the ticker function (including movement and mouse binds) will not work.We initialize these aliases on game launch by using the launch option +exec csafap/main, but if a command is too long (for example the alias reset_crosshair "..." at the bottom of csafap/main.cfg) the exec queue will exit causing this issue.To debug this, you can take out the vtest launch option and check console output directly after game launch or exec csafap/main to look for potential errors after loading the config initially.
Same cause as in Q20 above.The ticker aliases are not properly initialized. See Q20 for the full explanation and debugging steps.
Simply overwrite the keybinds used by this config package (1, 2, 3, N, H, J, K, M, space, Q, W, A, S, D) and don’t use the launch options +exec csafap/main -testscript "../../csgo/cfg/csafap/addons/.vtest" anymore.To make right-click work on scoreboard again after using ticker features, you need to use this command once:
cl_scoreboard_mouse_enable_binding +attack2
If any questions remain, join the CS AFAP Discord and feel free to ask in the #csafap-config or #help channel:
Join the CS AFAP DISCORD SERVER HERE.

Build docs developers (and LLMs) love