Counter-Strike 1.6 config illustration showing console with commands bind, rate, fps_max, and exec userconfig.cfg

CS 1.6 Config Guide: Best Config, Commands and Optimization

config.cfg, userconfig.cfg and autoexec.cfg - how they really load, the commands that matter and a ready config to download

A Counter-Strike 1.6 config is simply a plain-text file with CS 1.6 config commands and settings that the game reads and applies. Instead of clicking through menus every time, you write the exact values you want - key binds, mouse settings, network rates, FPS limits, crosshair tweaks, aliases - and the engine executes them in the same order every launch. That repeatability is the whole point: your CS 1.6 settings become portable, consistent, and easy to recover after a reinstall or when moving to another PC.

The in-game menus are just a friendly surface for a small subset of options. They change common things (video mode, audio sliders, and a few controls) and save those into a file, but they don't expose many powerful CS 1.6 commands, and they can overwrite tweaks when you toggle something later. Config files, by contrast, give you full control of the command layer: you can script sequences (aliases), organize settings into separate files for different scenarios (e.g., LAN vs. internet), and apply them instantly with a single exec. Menus are useful for quick changes, but config files give you precise control, automation, and more reliable optimization.

How CS 1.6 Config Files Work

Config files in Counter-Strike 1.6 follow a simple but important hierarchy. Each file has its own purpose: some are controlled by the game, some are meant for the player, and together they decide what your game looks and feels like every time it starts. Understanding how these files load - and what gets saved or overwritten - is the key to building a stable setup that won't randomly reset.

Default config.cfg

This is the main file the game creates by default. It stores all standard settings that can be changed through the in-game menus: key binds, video and sound options, sensitivity, crosshair style, and so on. Every time you close the game or change a setting, it rewrites config.cfg from scratch: first all your binds, then every variable the game marks as "saved", and the line exec userconfig.cfg at the very end. If you change values of commands that are on that list (for example, volume "1" instead of the default 0.8), the new values will be saved. But if you add custom commands that aren't saved by the game (like developer "1" or cl_bobcycle), they will be erased the next time the file is written.

autoexec.cfg

If present, this file is always executed first. The game itself never overwrites it, which makes it perfect for important commands you don't want lost - debug variables, test commands, or special startup tweaks. Think of it as the first layer that prepares the game before the regular config kicks in.

userconfig.cfg

By default, config.cfg ends with the line exec userconfig.cfg. That means if the file exists, it will always be executed right after config.cfg is loaded. The game does not create it on its own - you need to make it manually. This became the community's traditional place to keep custom binds, scripts, and permanent settings, because unlike config.cfg, the game never touches it. Even the console command writecfg refuses to write files named config, autoexec or userconfig.

Load Order

CS 1.6 loads configuration files in the following order:

  1. autoexec.cfg (if it exists) - technical startup script, not recommended for storing main settings in CS 1.6
  2. Steam Launch Options or Shortcut (if +exec your_config.cfg is specified)
  3. config.cfg (always) - the game executes it when it loads your profile, after the startup script
  4. userconfig.cfg (if it exists - called from the last line of config.cfg)

This order explains why some commands appear to reset or disappear after restarting the game. Anything that config.cfg also contains gets overwritten by it, and only userconfig.cfg comes after config.cfg - so it has the last word. By default, CS 1.6 only includes config.cfg - everything else exists only if you add it yourself.

In CS 1.6 config.cfg loads after autoexec.cfg and may overwrite its commands. For this reason, most stable setups store user settings in userconfig.cfg.

Creating and Managing Custom CS 1.6 Configs

Once you understand how the game handles its default files, the next step is building your own. Custom configs give you control beyond the menus: you decide which commands stay permanent, which scripts are active, and how to keep everything organized. Since the game overwrites config.cfg every session, your personal files are the safe way to store and maintain a stable setup.

Creating userconfig.cfg Manually

Windows Explorer showing the Counter-Strike 1.6 cstrike folder with config.cfg and userconfig.cfg
CS 1.6 path to configuration files config.cfg and userconfig.cfg

This file does not exist by default - you have to make it yourself with any text editor and save it as userconfig.cfg in the cstrike folder. Because config.cfg ends with exec userconfig.cfg, the game will load it automatically if it's present. That's why it became the community standard: you can keep binds, scripts, and special settings here without worrying they'll be erased.

Two things to watch: make sure Windows didn't save it as userconfig.cfg.txt (turn on file extensions in Explorer), and don't put exec userconfig.cfg inside userconfig.cfg itself - the file would call itself in an endless loop.

Path (Windows):

...\steamapps\common\Half-Life\cstrike\
...\Counter-Strike 1.6\cstrike\   (the folder next to hl.exe)

Both config.cfg and userconfig.cfg live here.

Organizing Multiple cfg Files

userconfig.cfg can also serve as a hub to load other custom files. For example, you might keep one file for all your binds (mybinds.cfg) and another for scripts (myscripts.cfg). In userconfig.cfg you simply add lines like exec mybinds.cfg or exec myscripts.cfg. This way you can separate settings by purpose and quickly swap or update them without digging through a single giant config.

Keeping Configs Safe

Since custom files aren't touched by the game, they're easy to back up. Copy them to a USB drive, cloud folder, or even email them to yourself. If you reinstall CS 1.6 or move to another PC, just drop them back into the cstrike folder and everything will work instantly. This is especially useful for players who switch between LAN cafés or tournaments, where you want your exact setup every time.

There's also a built-in backup: type writecfg mybackup in the console, and the game saves all your current binds and settings into mybackup.cfg. To bring them back - exec mybackup.cfg.

Config Tips

If you want to test a new config without restarting the game, just type exec filename.cfg in the console and the file will be applied immediately. You can also re-execute userconfig.cfg the same way if something got overridden. Another good habit is to keep comments in your files (using //) so you remember what each command or bind does when you revisit them later.

To protect your main settings, it's usually better to set config.cfg to Read-only in Windows. This way any test binds or scripts - and servers that try to write their own binds or ads into your config - won't overwrite your core setup, and the game will still run normally. Just remember that new menu changes won't be saved, so use this mainly as a safeguard. For everyday customization, keep your commands in userconfig.cfg or other exec-loaded files.

If you play on public servers, see also How to Spot and Block Fake Servers in CS 1.6.

How to Use autoexec.cfg in CS 1.6 (and Why Not for Your Settings)

Google AI search result giving wrong advice to use autoexec.cfg in a Counter-Strike 1.6 config

Googled "CS 1.6 config guide" lately? If yes - then you probably saw the same circus I did. AI and random sites all confidently recommend: "Put your settings into autoexec.cfg, that's the right way!" Yeah, sure. And then pigs fly 😂

Look at the screenshot above - Google AI literally tells you autoexec is the recommended file for your config. But if you open your real config.cfg, what do you see written by Valve themselves?

// This file is overwritten whenever you change your user settings in the game.
// Add custom configurations to the file "userconfig.cfg".

Boom. End of story. Valve already gave you the answer twenty years ago.

Now let me show you why autoexec is a terrible "main config". It loads first. Cool, right? Except right after that, config.cfg comes in and overwrites half of your stuff. Example: you put net_graph "1" into autoexec. You load a map, and… nothing. net_graph is still off. Did the command break? Nope. It worked perfectly - until config.cfg dropped net_graph "0" on top of it like a wet towel.

And this is why guides that scream "use autoexec.cfg" are nonsense. They're written by people who clearly never spent serious time in CS 1.6. They just parrot CS:GO or CS2 habits. Different engine, different rules.

Some skeptics say: "Well, config.cfg rewrites anyway, so what's the problem?" Here's the problem: config.cfg is supposed to rewrite. That's the working file. It updates every session, and that's fine. The real issue is when clueless players start cramming their binds and scripts into autoexec, only to wonder later why everything breaks.

Ask any 1.6 veteran - almost everyone has felt this "pain" =) when at some point, due to a mistake or simple carelessness, they broke their config.cfg and suddenly found themselves helpless, not even knowing how to get everything back. Don't edit config.cfg by hand, don't treat autoexec as your config. If you want to be extra safe, make config.cfg read-only. That way if your binds explode, you just exec config.cfg and the game resets everything in seconds. First aid kit, built-in.

So what's autoexec.cfg actually good for? Debugging. Developer logs. Launch option experiments. Throwaway tests. That's it. It's not your personal diary of settings.

Where do your real settings live? Exactly where Valve told you: userconfig.cfg. That's the stable place. Want structure? Chain more files from it:

exec mybinds.cfg
exec myscripts.cfg

But remember, in CS 1.6 you must include the .cfg extension - unlike CS:GO, here the engine isn't so forgiving. Without it you'll just get "not a .cfg or .rc file" in the console.

Essential CS 1.6 Config Commands

CS 1.6 gives players a huge amount of control through console commands. While the menus only touch the basics, configs let you fine-tune performance, network behavior, sound, and controls in ways that directly affect gameplay. Below are the key areas - graphics, network, and interface - with the most useful commands, their effects, and recommended values. Keep in mind that some servers may restrict certain variables, and the best settings can depend on your hardware and connection.

Graphics and Performance

These commands reduce unnecessary effects and free up frames. On old machines and integrated graphics, they can make the game run much smoother; on modern PCs the game hits the FPS cap anyway, so their main job there is a cleaner picture. More in how to increase FPS in CS 1.6.

Command Effect / Purpose Recommendation
fps_max <value> Sets max FPS 99.5 - exactly 100 FPS, best for movement; 120 if you don't use movement tricks
fps_override 1 Allows FPS above the 100 cap (Steam) 1 only if you want more than 100 FPS
gl_vsync 0 Disables vertical sync 0 (off) for consistent FPS and less input lag
gl_fog 0 Removes fog effects 0 for clarity
gl_wateramp 0 Disables water waves 0 (already the default)
r_dynamic 0 Removes dynamic lighting (muzzle flashes, explosions) 0 for stability
gl_lightholes 0 Disables light leaks 0 to reduce rendering load
cl_weather 0 Turns off rain/snow 0 on weather maps (e.g. de_aztec)
cl_shadows 0 / r_shadows 0 Removes shadows 0 for performance
gl_dither 0 Turns off color dithering 0 for a slight boost
gl_spriteblend 0 Simplifies sprite blending 0 for FPS over visuals
fastsprites 2 Sprite quality level 2 for performance
cl_himodels 0 Disables high-detail player models 0 (already the default)
cl_minmodels 1 One default model per team 1 for performance and easier recognition
gl_texturemode "GL_LINEAR_MIPMAP_NEAREST" Lowers texture filtering Faster rendering
gl_picmip 1 (or higher) Makes textures blurrier, needs a restart 1-2 for balance, 3 for max FPS
gl_max_size 256 Limits max texture size 256 on weak PCs
max_shells 0 Removes shell casings 0 for better FPS
max_smokepuffs 0 Removes smoke/dust puffs 0 unless the server forces it back
violence_hblood 0, violence_ablood 0, violence_hgibs 0, violence_agibs 0 Disable blood and gibs 0 for higher performance
cl_corpsestay 0 Corpses vanish instantly 0 for clean scenes
r_decals 0 Disables bullet holes and explosion marks 0 for FPS boost

Some servers force their own values through plugins (for example, for cl_minmodels, max_smokepuffs or r_decals). In those cases your setting comes back after you join.

Network Commands

These decide how your client communicates with the server. Getting them right is key for smooth hit registration and stable gameplay. The full explanation of rates and interpolation is in my ex_interp guide.

Command Effect / Purpose Recommendation
rate <value> Max data per second the client can receive 100000 - the engine's maximum on current builds (old guides say 25000)
cl_updaterate <value> Updates received from server per second 100
cl_cmdrate <value> Commands sent to server per second 100
ex_interp <value> Interpolation buffer in seconds 0.01 at cl_updaterate 100 (= 1/100); raise it if models jitter. Default 0.1
cl_cmdbackup <0-10> Repeats your last commands in each packet in case one gets lost 2 (default)
cl_timeout <sec> Time before disconnect if no response 60 default
cl_allowdownload 1 Downloads custom maps, models and sounds from the server 1 - with 0 you can't join servers with maps you don't have
cl_dlmax <value> Size of download packets 1024 for faster downloads
cl_filterstuffcmd 1 Blocks server-forced commands 1 for safety
cl_nopred 0 Movement prediction (0 = on) Always 0 - with 1 your own movement lags by your ping
net_graph 1 Shows network stats/FPS 0/1/2/3, use for troubleshooting

Server configs can cap your rate, cl_updaterate, and cl_cmdrate. You can't bypass server-side limits.

To see the rate limits a server makes public, check it with the CS 1.6 Server Info tool.

Controls and Interface

These affect how the game feels to control and how the HUD looks.

Command Effect / Purpose Recommendation
m_rawinput 1 Raw mouse input, skips Windows processing (Steam) 1 - see mouse settings
m_filter 0 Disables mouse smoothing 0 for raw aim
m_customaccel 0 Disables in-game mouse acceleration 0 for consistent aim
cl_showfps 1 Shows FPS On if monitoring performance
hud_fastswitch 1 Enables fast weapon switch 1 for instant swaps
cl_dynamiccrosshair 0 Static crosshair 0 for consistency, see the crosshair guide
cl_righthand 1/0 Choose right/left hand Preference
cl_bob 0 Removes weapon sway 0 for a steady view, see the cl_bob guide
developer 0/1 Enables dev logging 0 for normal play
viewsize <value> Size of the game view 120
brightness, gamma Brightness and gamma 2.5 - 3 typical

Outside the game, disable Windows mouse acceleration: Control Panel → Mouse → Pointer Options → uncheck "Enhance pointer precision". This makes aim much more consistent if you play without Raw Input.

Best Config for CS 1.6 (Download)

This config is tuned for optimal performance and stability. It strips away unnecessary effects, sets proper network values, and keeps mouse control consistent. Before using it, always make a backup of your current config.cfg (writecfg mybackup does it in one line) - many of these commands will overwrite existing settings. If you forget to back up, don't worry: simply delete config.cfg and the game will create a fresh default one the next time you launch CS 1.6. This way you can safely experiment without the risk of breaking your setup.

// FPS
fps_override "0" // 1 if you need fps_max > 100 (Steam)
developer "0" // 1 if you need fps_max > 100 (old non-Steam client)
fps_max "99.5" // best value for movement; if you prefer the image quality, 120
gl_vsync "0"

// Disable visual effects
gl_fog "0"
gl_wateramp "0"
r_dynamic "0"
gl_lightholes "0"
cl_weather "0"
cl_shadows "0"
r_shadows "0"
gl_dither "0"
gl_spriteblend "0"
gl_monolights "1"
cl_himodels "0"
cl_minmodels "1"
gl_texturemode "GL_LINEAR_MIPMAP_NEAREST"
gl_picmip "2"
gl_max_size "256"
max_shells "0"
max_smokepuffs "0"
violence_hblood "0"
violence_ablood "0"
violence_hgibs "0"
violence_agibs "0"
cl_corpsestay "0"
r_decals "0"

// Network
rate "100000"
cl_updaterate "100"
cl_cmdrate "100"
ex_interp "0.01" // raise to 0.02-0.05 if models jitter on busy servers
cl_cmdbackup 2
cl_timeout 60
cl_allowdownload 1
cl_dlmax 1024
cl_filterstuffcmd 1

// Controls / Interface
m_rawinput 1
m_filter 0
m_customaccel 0
cl_showfps 0
net_graph 3
hud_fastswitch 1
cl_dynamiccrosshair 0
cl_righthand 1
cl_bob 0
developer 0

// Brightness / Gamma
brightness 3
gamma 3
viewsize 120

// -=-Scripts-=-

// delay
alias "w" "wait"
alias "w2" "wait; wait"
alias "w4" "w2; w2"
alias "w5" "w4; w"
alias "w8" "w4; w4"
alias "w10" "w8; w2"

// simple
alias "qq" "quit"
alias "dd" "disconnect"
alias "rr" "record demo"

// info
bind "F1" "say /rankstats"
bind "F2" "say /top15"

// buy binds
bind "F5" "deagle;secammo;vesthelm;hegren;flash;flash;sgren;defuser"
bind "F6" "ak47; m4a1; deagle;primammo;vesthelm;secammo;hegren;flash;flash;sgren;defuser"
bind "F7" "awp;primammo;deagle;secammo;vesthelm;secammo;hegren;flash;flash;sgren;defuser"

// jump and crouch
alias "+hj" "+jump; +duck"
alias "-hj" "-jump; -duck"
bind "SPACE" "+hj"

// fast awp
alias "+hs" "+attack2; w8; +attack; w"
alias "-hs" "-attack; w; -attack2; w2; slot3; lastinv; w8"
alias "trigger" "awpON"
alias "awpON" "bind mouse1 +hs; alias trigger awpOFF; echo On"
alias "awpOFF" "bind mouse1 +attack; alias trigger awpON; echo Off"
bind "c" "trigger"

// burst fire
alias "fire1" "+attack; wait; -attack"
alias "fire2" "fire1; w10; fire1"
alias "fire3" "fire2; w10; fire1"
alias "b_fire" "b_fire_on"
alias "b_fire_on" "bind mouse1 fire3; alias b_fire b_fire_off; echo Activated"
alias "b_fire_off" "bind mouse1 +attack; alias b_fire b_fire_on; echo Deactivated"
bind "f" "b_fire"

Run or Download the Config

Add the commands above, along with your own binds and scripts, into userconfig.cfg, and the game will load them automatically every time CS 1.6 starts.

If you prefer manual loading:

  1. Go to the cstrike folder of your Counter-Strike 1.6 installation
  2. Create your own config file (for example, myconfig.cfg)
  3. Add the commands above - along with your own binds and scripts - into myconfig.cfg
  4. Launch the game, open the console, and run: exec myconfig.cfg

To make things easier, you can also download a ready-to-use userconfig.cfg file that already includes the commands and scripts shown in this guide. It provides a clean starting point, so you can simply place it in your cstrike folder and start the game. You can still edit the file later to add your own binds, aliases, or tweaks.

Download userconfig.cfg Config file

Unlike CS2, CS 1.6 requires the .cfg extension when executing files. The exec command works both in the console and while you are in a game. Example:

exec myconfig       // Wrong: "not a .cfg or .rc file"
exec myconfig.cfg   // Correct

Advanced CS 1.6 Config Tips

Once you have your base config working smoothly, you can take it further with advanced tweaks. These aren't mandatory, but they can streamline gameplay, speed up actions, or simply make the game feel more comfortable. The main tools here are scripts (aliases - custom commands), buy binds, fast scope, toggles, and simple automation tricks.

Scripts and Simple Aliases

An alias console command lets you define your own command and chain together multiple actions. For example, you can create a toggle between two values or run a series of commands with one key. Aliases are the foundation of more complex scripting in CS 1.6 - the basics are in Alias, Bind and Wait.

Check out my full collection of 20+ ready-to-use scripts here: Counter-Strike 1.6 Useful Scripts.

Fast Buy Binds

Buying gear through the menu costs time you could use to position yourself. With fast buy binds, one key press is enough to purchase your full loadout.

bind "F5" "deagle;secammo;vesthelm;hegren;flash;flash;sgren;defuser"
bind "F6" "ak47; m4a1; deagle;primammo;vesthelm;secammo;hegren;flash;flash;sgren;defuser"
bind "F7" "awp;primammo;deagle;secammo;vesthelm;secammo;hegren;flash;flash;sgren;defuser"

With these binds you can:

  • Press F5 for a quick eco+utility setup.
  • Press F6 for an AK/M4 loadout - the game buys whichever rifle your team can use.
  • Press F7 for an AWP + sidearm combo.

This saves valuable seconds at the start of the round and ensures consistency every time you spawn. All buy commands, prices and a bind builder are in my CS 1.6 Buy Binds Guide.

Bunnyhop / Movement Binds

While servers may block certain commands, movement binds can make control smoother:

bind "MWHEELDOWN" "+jump"
bind "MWHEELUP" "+duck"

MWHEELDOWN makes bunnyhopping easier by binding jump to the scroll wheel. MWHEELUP gives you Double Duck on the wheel - quieter movement and a harder-to-track model. How both work is in the CS 1.6 Movement Guide.

Custom Crosshair and Viewmodel

You can hardcode your favorite crosshair style or weapon position so it always loads the same way:

cl_crosshair_color "250 50 50"
cl_righthand 0

This ensures your crosshair and viewmodel are consistent every time, no matter what config.cfg tries to overwrite.

Reloading Configs Mid-Game

If something feels off, you don't need to restart the game. Just type exec userconfig.cfg or any other file in the console, and your settings will reload instantly. This is especially useful for testing new tweaks or swapping between configs (e.g., LAN vs. online).

Use these tools to personalize the game for your style, not to abuse mechanics. CS 1.6 scripting is limited to built-in commands - it won't give you unfair abilities, but it can make routine actions smoother and faster.

Conclusion

A config in Counter-Strike 1.6 is more than just a text file - it's your personal toolkit for consistency, stability, and optimization. By moving beyond the in-game menus, you gain full control over how the game feels and performs every time you launch it.

The best way to start is to focus on the essentials first - mouse, crosshair, FPS, and network settings. Once those feel right, gradually expand your cfg with scripts, buy binds, and quality-of-life tweaks. Over time, your config becomes a reflection of your playstyle, helping you stay comfortable and ready in every game.

CS 1.6 Config FAQ

Does CS 1.6 create userconfig.cfg by default?

No. Only config.cfg is created automatically. userconfig.cfg has to be made manually, but once it exists, the game will always run it because config.cfg ends with exec userconfig.cfg.

Why do my custom commands disappear after I restart the game?

Because config.cfg is rewritten on exit and only keeps your binds and the variables the game marks as saved. Commands like developer 1 or cl_bobcycle will vanish unless you put them in userconfig.cfg or another file executed at startup.

How can I restore the default config.cfg?

If your config is broken or you want to reset everything, just delete config.cfg from the cstrike folder. When you launch CS 1.6 again, the game will automatically generate a fresh default config with all standard values. This is the safest way to start clean.

Which file loads first - autoexec.cfg or config.cfg?

If present, autoexec.cfg loads first, then the game applies config.cfg, and finally userconfig.cfg. That's why settings in autoexec often get overwritten.

Can I lock config.cfg so it never changes?

Yes, set the file to "Read-only" in Windows. The game will still run, and servers or test scripts can't write into it. New menu changes won't be saved, so keep your everyday tweaks in userconfig.cfg.

How do I back up my current settings?

Type writecfg mybackup in the console - the game saves your binds and settings into mybackup.cfg. Restore them with exec mybackup.cfg.

Do servers override my config settings?

They can. Servers cap rate, cl_updaterate and cl_cmdrate, and plugins can force values like cl_minmodels, max_smokepuffs or r_decals. cl_filterstuffcmd 1 blocks many server-forced commands.

Can I run multiple configs for different situations?

Yes. You can create any number of .cfg files (e.g., myscripts.cfg, mybinds.cfg) and load them using exec filename.cfg. Many players keep separate configs for LAN, internet, or practice.

Are scripts in CS 1.6 considered cheats?

No. Scripts are just combinations of built-in console commands. They automate inputs but don't grant abilities outside the engine's rules, and VAC treats them as normal. Some leagues and servers have their own rules about scripts, though.

What's the easiest way to test a new config without restarting?

Open the console and type exec filename.cfg. The file will load instantly without closing the game.

Can I use configs from other players?

Yes, but be careful - other configs may have values that feel wrong on your setup. It's best to borrow selectively and adjust to your own sensitivity, crosshair, and preferences.

Why do some binds stop working on other PCs?

Because scripts with wait count frames, so FPS changes their timing. Always check fps_max and test your scripts after moving configs to a new system.

More CS 1.6 Guides

Leave a Reply

Your email address will not be published. Required fields are marked *