The CS2 developer console looks like a relic from the Source engine era, and in a lot of ways it is. But it is also the fastest way to fix a laggy frame rate, build a crosshair you will actually keep for a season, and drill grenade lineups without waiting on eight other players. Valve never removed it when Counter-Strike 2 replaced CS:GO in 2023, and the same command syntax still runs the show in 2026. This tutorial walks through enabling the console, the commands worth memorizing, and how to package all of it into one file that loads automatically every time you launch the game.

By the end you will have a working autoexec.cfg, a bound practice server for aim and utility drills, and a console setup that survives game updates. This sits alongside the rest of our esports coverage, including our breakdown of CS2 launch options if you want to go deeper on the Steam-side settings after finishing this guide.

What the CS2 Console Actually Does

The console is a text command line layered on top of the game’s UI. Every graphics option, every network setting, and every practice tool in CS2 has a matching console command, and most of them can be adjusted faster by typing than by clicking through menus. Competitive players use it for three things: reading live performance data with commands like net_graph, running practice servers where sv_cheats unlocks tools like noclip and infinite ammo, and loading a saved configuration file so their crosshair, viewmodel, and audio settings are identical on every PC they play from, including LAN events.

Valve maintains the full command list on its own developer wiki, which is worth bookmarking since it is the only source that stays current the moment a patch changes a variable’s default value. You can find it at the official Counter-Strike 2 console commands and variables page.

None of what follows requires any third-party tool, mod, or injected DLL. Every command in this guide ships inside the base game and runs through Valve’s own console parser, which is worth knowing up front since it draws a clean line between what’s covered here and the kind of external programs that carry a real ban risk. If a “config tool” asks you to install something outside the game folder to unlock extra commands, that’s a signal to stop, not a shortcut.

How the CS2 Console Differs From CS:GO

Players coming back to Counter-Strike after a break often assume the console got rebuilt from scratch alongside the rest of the Source 2 engine overhaul. It didn’t, not in any way that changes how you use it day to day. The syntax is identical: command, space, value, Enter. The cfg folder structure is identical too, right down to that leftover “Counter-Strike Global Offensive” folder name. What actually changed is smaller and easy to miss: a handful of legacy CS:GO commands tied to the old rendering pipeline no longer do anything, some network-tuning variables got renamed as part of the engine’s updated tick and sub-tick handling, and a few community config sites still circulate old CS:GO autoexec files with dead commands mixed in among ones that still work.

That’s the main reason to lean on the official Valve developer wiki rather than a config you found on a forum from 2023. If a command in an old file throws “unknown command” in CS2, it’s not always a typo, sometimes it genuinely doesn’t exist anymore, and the fix is deleting that line rather than debugging it.

Why Competitive Players Standardize Their Configs

A saved config solves a problem that’s easy to underestimate until you’ve hit it: settings drift. Play on a friend’s PC, borrow a rig at a LAN, or reinstall after a hardware upgrade, and your crosshair, sensitivity feel, and HUD layout reset to Valve’s defaults every time unless they’re written down somewhere. Teams that scrim regularly standardize on a shared baseline config, then layer individual binds and crosshair preferences on top, so a roster of five players can swap PCs during a bootcamp without anyone losing muscle memory over a crosshair that suddenly looks different.

The same logic applies at a smaller scale to solo ranked grinding. Losing a session because your net_graph readout silently reset, or your fps_max got changed by a driver update, is the kind of small friction that autoexec.cfg exists specifically to remove. Once it’s set up correctly, you stop thinking about it, which is the entire point.

Prerequisites: What You Need Before You Start

None of this requires third-party software. You need CS2 installed through Steam, a Windows, macOS, or Linux machine that can already run the game, and about 30 minutes. The steps below were verified against the current CS2 client on Steam as of September 2026. Command names have stayed stable across recent updates, though Valve does occasionally rename or deprecate a variable, so cross-check anything unfamiliar against the developer wiki before binding it to a key you use in ranked matches.

RequirementDetail
GameCounter-Strike 2 (free-to-play via Steam)
PlatformSteam client, Windows/macOS/Linux
Access levelStandard user account (no admin rights needed for console commands)
File editorAny plain text editor (Notepad, VS Code, etc.)
Time neededAbout 30 minutes for full setup
Install folderSteam\steamapps\common\Counter-Strike Global Offensive\game\csgo\cfg

One quirk worth flagging up front: Valve never renamed the install directory when CS:GO became CS2. Your config files still live inside a folder called “Counter-Strike Global Offensive,” which trips up a lot of people searching their drive for anything with “CS2” in the name.

Step 1: Enable the Developer Console in Settings

The console ships disabled by default. Open CS2, click the gear icon for Settings, go to the Game tab, and find “Enable Developer Console (~).” Switch it to Yes. This single toggle is the only thing standing between you and every command in this guide, and it is the step most beginners miss because the option is buried below the more commonly used graphics and control settings.

Step 2: Open the Console In-Game

With the setting enabled, press the grave key (` or ~), located just left of the “1” key on most US keyboard layouts, directly under Escape. A dark overlay drops down from the top of the screen. That overlay is where every command in this article gets typed. If the key does nothing, your keyboard layout may map that physical key to a different character, commonly Ö, @, or ^ depending on region. Check Settings > Keyboard/Mouse and rebind “Toggle Console” to a key you can reliably reach mid-match.

There is also a launch-option method that skips the manual key press entirely: adding -console to your Steam launch options forces the console to open automatically every time CS2 starts. That is useful if you are debugging a config file and want console output visible from the main menu onward, and it pairs well with the broader set of options covered in our CS2 launch options walkthrough.

Step 3: Learn the Basic Command Syntax

Nearly every CS2 console command follows the same pattern: type the command name, add a space, add a value, then press Enter. There are a handful of commands that take no value at all (like quit) and run immediately when you hit Enter.

// Basic syntax: command_name value
cl_showfps 1        // Turns the FPS counter on
volume 0.5           // Sets master volume to 50%
fps_max 0            // Removes the frame rate cap
quit                  // Closes the game immediately

Typing a command name by itself, with no value, usually prints its current setting back to you rather than changing anything. That is a fast way to check what a value is currently set to before you overwrite it.

Step 4: Set Essential Performance Commands

These are the commands people search for most, and keyword research confirms it: searches for “cs2 console commands fps” and “cs2 console commands for better performance” both show consistent monthly volume. Two console values do most of the heavy lifting for anyone trying to read their own performance in real time.

cl_showfps 1     // Simple FPS counter, top-right corner
cl_showfps 2     // Adds smoothed FPS + frame-time readout
fps_max 0        // No frame cap (use fps_max 300 to cap at 300)
net_graph 1      // Shows ping, packet loss, and network timing on-screen

net_graph is the one worth leaving on permanently if you play competitively. It shows real-time ping and packet loss in the corner of the screen, which turns “the game feels laggy” into an actual number you can act on. If you are chasing lower input lag specifically rather than raw frame rate, that is a separate rabbit hole covered in our NVIDIA Reflex 2 setup guide, and pairing both approaches together tends to produce the most noticeable improvement.

CommandValuesEffect
cl_showfps0 / 1 / 2Off / basic FPS / FPS + frame-time
fps_max0 or a number0 removes the cap, a number sets a hard limit
net_graph0 / 1Toggles the ping/packet-loss overlay
disconnectnoneLeaves the current server without closing the game
retrynoneReconnects to the server you just left

Step 5: Customize Your Crosshair Through the Console

The in-game crosshair menu covers the basics, but the console gives you finer control and, more importantly, lets you save your exact settings as text so you never lose them to a settings reset. Six commands cover the entire crosshair.

cl_crosshairsize 3        // Overall size
cl_crosshairthickness 1   // Line thickness
cl_crosshaircolor 2       // Preset color slot
cl_crosshairdot 0         // 0 disables the center dot, 1 enables it
cl_crosshairgap -2        // Space between the four lines
cl_crosshairalpha 255     // Opacity, 0-255

Type each command with your preferred value while in a match or the practice range, and you will see the crosshair update instantly, which makes it easy to tune by eye before locking the values into your config file in Step 9.

Step 5b: Adjust Viewmodel and Audio Commands

Past the crosshair, two more command families are worth setting up while you’re already tuning things: viewmodel position and voice/audio balance. Viewmodel commands control how much of your gun and arms take up screen space, which affects both visibility and personal comfort. cl_righthand flips the weapon model to your left hand if you find it blocks less of your view on certain angles, and viewmodel_offset_x, viewmodel_offset_y, and viewmodel_offset_z move the gun model closer, further, or off to the side. There’s no universal “correct” value here since it comes down to personal preference and monitor size, so treat these as ones to experiment with in a private match rather than copy from someone else’s exact numbers.

On the audio side, voice_scale controls how loud teammates’ voice chat plays relative to game audio, and snd_mixahead adjusts audio buffering, lower values reduce audio latency slightly at the cost of being more sensitive to system hiccups. Neither needs to go in your autoexec unless you’ve identified a specific problem; the defaults work fine for most setups, and tweaking them blind rarely fixes anything.

Step 6: Start a Local Practice Server With sv_cheats

Most of the genuinely useful practice tools, noclip, infinite ammo, unlimited grenades, are gated behind sv_cheats, which only works on a server you control (a private lobby or offline practice map, never a live matchmaking server). Start a private match against bots or load the workshop practice range, open the console, and run:

sv_cheats 1          // Unlocks cheat-gated commands on this server only
god                   // Toggles invincibility, useful for uninterrupted drills
noclip                // Fly through walls to check angles and camera spots
sv_infinite_ammo 1    // Unlimited ammo, no reloading required
sv_infinite_ammo 2    // Unlimited ammo, reload animation still plays

If you would rather run a persistent private server for structured team practice instead of a local offline match, that setup is a bigger topic on its own and we cover it step by step in our CS2 dedicated server guide.

Step 7: Use Bot and Round-Control Commands

Once cheats are enabled, a second layer of commands controls bots and round flow, which matters for anyone drilling site executes or retakes solo.

bot_stop 1                    // Freezes bots in place so they stop reacting
bot_place                     // Spawns a bot exactly where your crosshair points
mp_restartgame 1              // Restarts the match back to round one
mp_buy_anywhere 1             // Lets you buy from any position on the map
ammo_grenade_limit_total 5    // Carry all five grenade types at once
CommandPurpose
bot_stop 1Stop bots from moving, useful for static aim drills
bot_placeDrop a bot at your exact crosshair position
mp_restartgame 1Instantly reset the match to round one
mp_buy_anywhere 1Remove buy-zone restrictions for gear testing
ammo_grenade_limit_total 5Carry every grenade type at once for lineup practice

Step 8: Bind Keys to Console Commands

Typing “sv_infinite_ammo 1” every time you want unlimited ammo gets old fast. Binding turns any command, or string of commands, into a single keypress using this syntax:

bind v noclip              // Press V to toggle noclip
bind f "say Rush B"        // Press F to send a chat message
bind KP_ENTER "sv_cheats 1; god; noclip"   // Chain multiple commands on one key

Wrap multi-word commands or chained commands in quotation marks, and separate chained commands with semicolons inside those quotes. Keep practice-only binds (noclip, god mode) off keys you also use in live matches. Muscle memory does not know the difference between a private lobby and ranked, and an accidental noclip press mid-round in Premier is a fast way to get reported.

Step 9: Write Your autoexec.cfg File

Typing every command by hand each session defeats the point. An autoexec file bundles all your preferred settings into one text file that loads automatically. Open a plain text editor, add one command per line, and save the file with the exact name autoexec.cfg. This is the step people most often get wrong: Notepad defaults to appending “.txt” to whatever you type, so you end up with “autoexec.cfg.txt” instead. In the Save As dialog, change “Save as type” to “All Files” before you save.

Step 10: Install autoexec.cfg in the Correct Folder

Config files belong in the game’s cfg folder, not the main install directory. On Windows, right-click CS2 in your Steam library, choose Manage > Browse Local Files, then navigate to game\csgo\cfg and drop your file there. The full default path looks like this:

C:\Program Files (x86)\Steam\steamapps\common\Counter-Strike Global Offensive\game\csgo\cfg\autoexec.cfg

If you already have other config files, crosshair presets or viewmodel configs shared by a streamer, they go in the same cfg folder and can be triggered individually with the exec command from the console, for example exec practice.cfg.

Step 11: Force-Load Your Config via Launch Options

CS2 does not automatically read autoexec.cfg on every launch unless you tell it to. In Steam, right-click CS2, open Properties, go to General, and add the following to Launch Options:

+exec autoexec.cfg

This tells the game to run your file the moment it starts, before you ever open the console manually. For a broader rundown of what else can go in that same launch options box, including startup flags that affect performance and windowing, see our dedicated CS2 launch options guide.

Step 12: Verify Your Config Loaded Correctly

Launch CS2, open the console, and type the name of any command you set in your autoexec file with no value attached, for example just cl_crosshairsize. The console prints the current value back to you. If it matches what you wrote in the file, the config loaded. If it shows a default value instead, the file either has the wrong name, sits in the wrong folder, or the launch option was not saved. Here is what a successful check looks like in the console output:

] cl_crosshairsize
"cl_crosshairsize" = "3" ( def. "5.0" )
 - Crosshair size

] net_graph
"net_graph" = "1" ( def. "0" )
 - draw network graph, 0=off, 1=on, 2=with net_graphheight

The “( def. … )” part shows the game’s default value next to your current one, which is a quick way to confirm you actually changed something rather than just reading the default back.

The Complete Working autoexec.cfg Project

Here is everything from this guide combined into one functional file. Copy it, adjust the values to taste, save it as autoexec.cfg, and drop it in your cfg folder as described in Step 10.

// ==== autoexec.cfg — complete starter config ====

// Performance / HUD
cl_showfps 2
fps_max 0
net_graph 1

// Crosshair
cl_crosshairsize 3
cl_crosshairthickness 1
cl_crosshaircolor 2
cl_crosshairdot 0
cl_crosshairgap -2
cl_crosshairalpha 255

// Practice binds (F1-F4 reserved for offline/private servers only)
bind F1 "sv_cheats 1"
bind F2 "noclip"
bind F3 "bot_stop 1"
bind F4 "mp_restartgame 1"

// Quick chat bind
bind KP_PLUS "say Rush B"

// Lock settings so game restarts don't silently revert them
host_writeconfig

The final line, host_writeconfig, writes your current settings back out to config.cfg, which helps keep everything in sync if you tweak a value mid-session and want it to persist.

Building a Practice Routine Around These Commands

Having the commands memorized doesn’t automatically translate into better aim or faster utility lineups. The players who get the most out of a practice server treat it like a short, repeatable drill rather than an open-ended sandbox. A common structure runs three phases in a single fifteen-minute block: five minutes of static aim training with bots frozen via bot_stop, five minutes of grenade lineups using sv_infinite_ammo and mp_restartgame to reset instantly between throws, and five minutes running actual site executes with a full bot team to test timing rather than mechanics.

The commands from Steps 6 and 7 exist specifically to remove the downtime between reps. Without mp_restartgame, resetting a round after a bad smoke lineup means waiting out a full round timer or leaving and rejoining the server. With it bound to a key, the reset takes under a second, which over a real practice session adds up to dozens of extra reps you wouldn’t otherwise get. That’s the actual payoff of learning this system: not the novelty of typing commands, but the compounding effect of removing friction from repetition.

Keep practice sessions separate from ranked sessions mentally as well as technically. It’s tempting to leave sv_cheats-adjacent binds active out of habit, but a clean split, practice server for drilling, matchmaking or Premier for applying it, keeps your muscle memory honest about which environment you’re in.

5 Common Pitfalls When Setting Up CS2 Console Commands

Most of what goes wrong with a first-time console setup isn’t a bug in the game, it’s one of five predictable mistakes that show up over and over in community help threads. Catching these before you start saves the debugging session later.

  • Saving as .cfg.txt instead of .cfg. Windows Notepad hides file extensions by default, so “autoexec.cfg” quietly becomes “autoexec.cfg.txt.” Always select “All Files” in the Save As dialog.
  • Putting the file in the wrong directory. The base install folder is not the cfg folder. Config files load only from game\csgo\cfg, not the root Counter-Strike Global Offensive directory.
  • Forgetting the +exec launch option. Placing autoexec.cfg in the right folder does nothing on its own; without +exec autoexec.cfg in Launch Options, the file just sits there unused.
  • Using cheat-gated binds on live servers. Commands like noclip and god only function with sv_cheats enabled, which matchmaking and Premier never allow. Binding them to a key you use in ranked wastes a keybind slot for nothing.
  • Overwriting a working config with a bad exec. Running exec on a config file with a typo can silently fail partway through, leaving some settings changed and others not. Check values with Step 12’s verification method after every edit.

Troubleshooting: 8 Common CS2 Console Problems

Most console problems trace back to one of three root causes: a file saved with the wrong extension, a launch option that never got applied, or a command that changed between patches. The table below walks through the eight issues that come up most often, roughly in the order you’re likely to hit them while working through this guide for the first time.

ProblemLikely CauseFix
Console key does nothingDeveloper Console setting still off, or non-US keyboard layoutRecheck Settings > Game > Enable Developer Console, then rebind the toggle key manually
autoexec.cfg has no effectFile saved as .cfg.txt or missing the +exec launch optionConfirm the real file extension in File Explorer (enable “show file extensions”) and check Steam launch options
Commands say “unknown command”Typo, or the command was renamed/removed in a recent patchCross-check spelling against the Valve developer wiki
sv_cheats commands don’t workPlaying on an official matchmaking server, where cheats are permanently disabledSwitch to a private lobby, offline bot match, or your own dedicated server
Crosshair resets after restartSettings changed in-game weren’t written to a config fileRun host_writeconfig or make sure the values live in autoexec.cfg, not just a live console session
Binds stop working after an updateValve occasionally changes default keybinds during major patchesRe-run exec autoexec.cfg from the console or relaunch with the +exec launch option intact
net_graph shows high packet lossNetwork issue unrelated to the console itselfTest on a wired connection and check your router before assuming a game-side bug
Config works alone but breaks with othersTwo config files set the same variable to conflicting values, and load order overwrites oneConsolidate settings into a single autoexec.cfg rather than stacking several exec’d files

Advanced Tips: Pro-Level Console Workflows

Once the basics are running reliably, a few less common commands are worth knowing. c_maxdistance and c_mindistance control third-person camera distance limits, mostly relevant for spectating or content creation rather than live play. Network-tuning variables like cq_buffer_bloat_msecs and cq_min_queue_size adjust how much buffering tolerance the client allows before adjusting rate behavior, and they are generally left alone unless you are diagnosing a specific connection issue rather than chasing raw FPS.

If you are installing a config shared by someone else, streamers and pro players frequently publish their full setups, drop every .cfg file they share into your cfg folder, then run exec filename.cfg from the console to test it before committing to it as your permanent autoexec. This lets you A/B test a crosshair or viewmodel setup for a session without touching your own file. Once you find a workflow you like, cross-reference how you’re actually ranking with it against our guide to how CS2 ranks work, since a cleaner HUD and consistent crosshair are only useful if you’re also tracking whether they’re translating into climbed rank.

Finally, keep a backup copy of your autoexec.cfg outside the game folder. Steam file verification (Manage > Verify Integrity of Game Files) can, in rare cases, flag and remove files it does not recognize inside the csgo directory tree, and losing a tuned config to a routine integrity check is an easy problem to avoid with a five-second copy to your desktop.

It also pays to version your config the same way you’d version any other text file you care about. Rename old copies with a date before overwriting them, autoexec-2026-08.cfg, autoexec-2026-09.cfg, and so on, so a bad edit is a two-second revert instead of a rebuild from memory. This matters more than it sounds like it should. A crosshair or sensitivity tweak that felt wrong for a week can be hard to reconstruct exactly once you’ve moved past it, and having the old file sitting right there removes the guesswork.

One more habit worth building: read the patch notes on Valve’s own blog before assuming a broken bind is your fault. Console variable renames and deprecations get mentioned there, and checking takes less time than troubleshooting a bind that was never going to work again no matter how you re-typed it. The official Counter-Strike blog is the fastest place to confirm whether a command change was intentional on Valve’s end before you spend twenty minutes debugging your own file.

Treat this guide’s autoexec.cfg as a floor, not a ceiling. Once the core structure is working reliably, community-shared configs and Steam guides are a reasonable way to discover commands that never made it into this article, provided you paste them into a text editor and read through the lines before you exec anything you didn’t write yourself. A config file only runs commands, it can’t install software or modify anything outside CS2’s own settings, so the risk with an unfamiliar file is a broken setting, not a compromised system, but reading before running is still good practice.

Best Console Commands for Competitive Play

If you only take five commands away from this guide and skip the rest, these are the ones that show up most often in serious players’ configs, and they cover performance visibility, network diagnosis, and consistent crosshair behavior without touching anything that requires sv_cheats or a private server.

CommandRecommended ValueWhy It Matters
net_graph1Turns “the game feels laggy” into a real ping/packet-loss number
cl_showfps2Frame-time data catches stutters that a plain FPS number hides
cl_crosshairgapPersonal preference, commonly -2 to 0Tighter gap reads faster at close range for most players
fps_max0, or match your monitor’s refresh rateUncapped can waste GPU headroom, a matched cap reduces frame-time variance
host_writeconfigRun after any manual tweakLocks in changes so a crash or alt-tab doesn’t silently discard them

None of these five require sv_cheats, which means they work identically in matchmaking, Premier, and any private server, so they’re the safest starting point for anyone building their first autoexec.cfg before layering on the practice-specific commands from Steps 6 and 7.

Console Commands for Streaming and Recording

If you stream or record your own gameplay, a few console-driven habits make editing and broadcasting cleaner without touching any of the practice or performance commands above. Keeping net_graph off during a public broadcast is worth considering since it shows your connection details on screen, information you may not want visible to viewers. Conversely, leaving cl_showfps on can double as a simple on-stream indicator that your capture setup isn’t dropping frames, which is a quick sanity check during a live session.

Content creators sharing clips also benefit from keeping a separate “clean” crosshair config, no HUD clutter, high-contrast color, saved as its own file and loaded with exec only when recording. Switching between a competitive HUD and a recording-friendly one takes one console command rather than a trip through the settings menu, which matters when you’re trying not to interrupt a session to fix your on-screen presentation.

CS2 Console Commands Quick Reference

CategoryExample CommandsRequires sv_cheats?
Performance/HUDcl_showfps, fps_max, net_graphNo
Crosshaircl_crosshairsize, cl_crosshaircolor, cl_crosshairgapNo
Practice/cheatsgod, noclip, sv_infinite_ammoYes
Bots/roundsbot_stop, bot_place, mp_restartgamePartial (bot_place needs cheats, mp_restartgame does not)
Binds/configbind, exec, host_writeconfigNo
Connectiondisconnect, retry, quitNo

Frequently Asked Questions

Does using console commands count as cheating in CS2?

No. Console commands are built into the game by Valve and are freely available to every player. The only ones that could be considered an unfair advantage, like noclip or infinite ammo, are gated behind sv_cheats, which is automatically disabled on every official matchmaking, Premier, and ranked server. You physically cannot use them outside a private lobby or your own server.

Where exactly does autoexec.cfg need to go?

Inside the game’s cfg subfolder, which by default is Steam\steamapps\common\Counter-Strike Global Offensive\game\csgo\cfg. The install directory keeps the old “Counter-Strike Global Offensive” name even in CS2, so don’t be thrown off by that when navigating there.

Why isn’t my autoexec.cfg loading?

The two most common causes are a hidden “.txt” extension left over from Notepad and a missing +exec autoexec.cfg entry in your Steam launch options. Check both before assuming the file itself is broken.

What is the difference between sv_infinite_ammo 1 and 2?

Setting it to 1 gives unlimited ammo without ever needing to reload. Setting it to 2 still gives unlimited ammo but keeps the reload animation and timing intact, which is closer to how a real firefight feels if you’re drilling spray control rather than pure aim.

Can I use someone else’s pro config directly?

Yes. Drop their shared .cfg file into your own cfg folder and run exec filename.cfg from the console, or add it to your launch options the same way you would your own autoexec. Just be aware that sensitivity and viewmodel settings are personal, so treat a downloaded config as a starting point to tweak rather than a final answer.

Does net_graph affect my FPS?

The overlay itself has a negligible performance cost on any modern hardware. If you’re seeing a real frame rate drop, it’s almost certainly coming from a different setting, not from displaying the network graph.

How do I open the console if the tilde key doesn’t work?

Some non-US keyboard layouts map that physical key to a different symbol, commonly Ö, @, or ^. Go to Settings > Keyboard/Mouse, find “Toggle Console,” and manually rebind it to a key you know works, then use that instead.

Will my console setup carry over if I reinstall CS2?

Only if you back up autoexec.cfg somewhere outside the install folder first, since reinstalling wipes the game directory including cfg. Keep a copy in cloud storage or on a USB drive and you can restore your entire setup in the time it takes to copy one file back into place.

Can I run multiple config files instead of one big autoexec.cfg?

Yes, and some players prefer it, splitting crosshair settings, practice binds, and performance commands into separate files (crosshair.cfg, practice.cfg, and so on) and loading each individually with exec from the console. The tradeoff is that if two files set the same variable differently, whichever loads last wins, which is why this guide’s complete project keeps everything in a single file. Fewer moving parts means fewer places for a conflict to hide.