A Counter-Strike 2 movement server is a normal CS2 server with the round logic switched off and a handful of movement cvars changed. For surf, that is mostly sv_airaccelerate raised from its default of 12 to somewhere around 100-150, stamina removed and players respawning forever. For bunnyhop, add sv_enablebunnyhopping 1 and usually sv_autobunnyhopping 1. KZ is the odd one out: serious KZ communities run a dedicated Metamod plugin that replaces the movement rules rather than nudging cvars. On top of any of them sits a timer plugin, which needs zones per map and somewhere to store records. The server itself is light - movement servers spend their CPU on player physics, not on bullets - but they are fussier about configuration than a public defuse server, because a single wrong cvar changes how every map plays.
Surf, bhop and KZ: what each one needs#
The three are often lumped together and they want different things from the server.
| Mode | Core mechanic | What the server changes | Plugin needed |
|---|---|---|---|
| Surf | Gaining speed by strafing on angled ramps | High air acceleration, no stamina, no fall damage | Timer, optional |
| Bhop | Chaining jumps without losing speed | Bunnyhopping enabled, often auto-hop, high air acceleration | Timer, optional |
| KZ | Precise climbing and jumping, measured jumps | Movement rules closer to CS:GO, often a separate mode system | Usually a KZ plugin |
Surf and bhop are cvar modes: a stock server with the right configuration and a surf map is playable surf, and the timer is a layer on top. KZ is a plugin mode: you can play KZ maps on a stock server, but the community expects the movement, checkpoints, jumpstats and records a KZ plugin provides, and its players notice immediately when they are missing.
All three depend on maps built for them, almost all of which come from the Workshop. CS2 workshop maps and collections covers loading them; the short version is a public collection per mode and host_workshop_collection on the launch line.
Requirements and sizing#
Movement servers are cheap to run per player. There is no hit registration under load, no grenade physics, few entities, and players spread across a map rather than crowding one choke point. What costs is player count and the timer's database writes.
| Server | RAM | CPU | Notes |
|---|---|---|---|
| Surf or bhop, up to 16 players | 1-2 GB | 1 core | Most community servers |
| Surf or bhop, 24-32 players | 2-3 GB | 1.5-2 cores | Large maps, many replays |
| KZ with plugin and records, 16-24 | 2 GB | 1.5 cores | Jumpstats and checkpoints are light |
| Any of the above with replay bots | add 0.5-1 GB | add 0.5 core | Replays are the expensive feature |
Replay bots - ghost runs of the current record - are the feature that turns a light server into a moderate one. Each replay is stored movement data replayed through a bot, which costs memory for the recording and CPU for the bot. If the server drags with replays on and is fine without, that is the answer.
Disk matters more than memory if you run several collections: surf maps are often large, and a collection of thirty of them is several gigabytes on top of the base install.
The movement cvars#
These go in game/csgo/cfg/server.cfg, or better, in a mode-specific config you exec from it so you can switch a server from surf to bhop by changing one line. The defaults below are those of current CS2 builds; check any of them on your own build by typing the cvar name with no value in the console, which prints the current value and default.
| Cvar | CS2 default | Surf | Bhop | What it does |
|---|---|---|---|---|
sv_airaccelerate | 12 | 100-150 | 100-1000 | Acceleration while airborne |
sv_enablebunnyhopping | 0 | 1 | 1 | Removes the speed cap on landing |
sv_autobunnyhopping | 0 | 0 or 1 | 1 | Holding jump hops on landing |
sv_staminamax | 80 | 0 | 0 | Stamina system; 0 removes it |
sv_staminajumpcost | 0.08 | 0 | 0 | Speed lost per jump |
sv_staminalandcost | 0.05 | 0 | 0 | Speed lost per landing |
sv_falldamage_scale | 1 | 0 | 0 | Fall damage multiplier |
sv_maxvelocity | 3500 | 3500 or higher | 3500 | Hard ceiling on any speed |
sv_accelerate | 5.5 | default | default | Ground acceleration |
sv_friction | 5.2 | default | default | Ground friction |
sv_gravity | 800 | default | default | Gravity |
sv_airaccelerate 150sv_enablebunnyhopping 1sv_autobunnyhopping 0sv_staminamax 0sv_staminajumpcost 0sv_staminalandcost 0sv_falldamage_scale 0sv_maxvelocity 3500The two numbers people argue about are sv_airaccelerate and auto-hop. Air acceleration of 150 is the common surf value; 100 feels heavier and 1000 is effectively instant air control, which makes many surf maps trivial. For bhop, auto-hop is the choice between a mode about strafing (auto-hop on) and a mode about timing the jump key (auto-hop off, often with scroll-wheel jumping). Pick one per server and say which in the server name; a mismatched expectation is the most common complaint movement servers get.
Why CS2 movement feels different from CS:GO
Surf and bhop veterans notice that CS2 movement does not feel like CS:GO's at the same cvar values. Part of it is sub-tick input: jumps and strafes are timestamped between ticks rather than snapped to them, which changes the feel of perfectly timed hops. Part of it is that CS2 runs at 64 tick and the -tickrate launch argument is not honoured, so the 102.4 and 128 tick servers some movement communities ran in CS:GO are not available. That is not something a host can change. What tick rate actually means explains why the tick number is a smaller part of the feel than it seems.
Some Metamod plugins exist specifically to adjust movement behaviour that cvars cannot reach - for example removing the ground speed limit that clips pre-speed. They work by patching the game binary in memory, so they are the first thing to break after a CS2 update.
Round settings that turn off the game#
A movement server should never end a round, buy a weapon or count a team score. On top of the movement cvars, it needs the round machinery neutralised. Running with game_alias custom or casual and these settings is the usual base:
mp_freezetime 0mp_roundtime 60mp_timelimit 30mp_ignore_round_win_conditions 1mp_respawn_on_death_ct 1mp_respawn_on_death_t 1mp_autoteambalance 0mp_limitteams 0mp_solid_teammates 0mp_death_drop_gun 0mp_buytime 0mp_warmuptime 0sv_full_alltalk 1mp_ignore_round_win_conditions 1 is the important one: it stops the round ending when one team is empty, which on a movement server is always. mp_solid_teammates 0 lets players pass through each other, which matters at the start zone where everyone stacks. mp_timelimit decides how long a map runs before the vote, and on a surf server thirty minutes is short for a hard map and long for an easy one - many communities settle on 30-45.
Remember the game mode config runs after server.cfg on each map load. If your round settings keep resetting, exec your movement config from the mode's override file - gamemode_casual_server.cfg on a casual server, which you create beside Valve's gamemode_casual.cfg - or let the timer plugin set them on map start - most do. CS2 server commands and cvars covers the execution order in detail.
Timer plugins, zones and records#
A timer is what turns a surf map into a competition: a start zone, an end zone, a time, a leaderboard, and usually stages, checkpoints and replays. On CS2 every timer runs on Metamod:Source, and most on CounterStrikeSharp above it - SourceMod timers from CS:GO do not run. Metamod and CounterStrikeSharp on CS2 covers installing the stack.
What to look for in a timer:
- Mode support. Some timers do surf, bhop and KZ-style maps with per-map settings; others do one. SharpTimer is a widely used CounterStrikeSharp timer covering surf, bhop and KZ maps. Check the project's page for which CS2 build it currently supports before installing.
- Zone handling. Zones are the boxes that start and stop the timer. Good timers read zones from the map's own triggers where the mapper named them conventionally, and let an admin draw zones in-game for maps that did not. Zones are stored per map, in a file or the database.
- Storage. Records need to persist across restarts. Small servers can use a local SQLite file; anything with more than one server, or a web leaderboard, wants a networked database. Each game plan on RE:NODE includes a database slot created from the panel with a generated host, user and password - check that the timer supports the engine before relying on it.
- Replays. Optional, and the most expensive feature. Turn it on once the rest works.
KZ: the plugin is the mode
KZ communities organised early around CS2KZ, a Metamod plugin from the KZ global team that implements KZ movement modes, checkpoints, jumpstats and a connection to a global records service. It is not a CounterStrikeSharp plugin, and it replaces a lot of the cvar tuning above with its own mode settings. If you want your server's runs to count on global leaderboards, the plugin's own documentation lists the requirements - typically an approved server, an unmodified plugin, and its own API key. A KZ server that only wants local records can skip the global side entirely.
Maps, collections and per-map settings#
Surf maps carry a tier, usually 1 to 6 or 1 to 8, and a server's reputation is mostly its map list. A good public surf server runs mostly tier 1-3 maps with a few harder ones, because the players who are new will leave a tier 5 map in a minute. Bhop and KZ have their own difficulty scales, and the same principle holds: one server for beginners and one for regulars works better than one server that frustrates both.
Some maps were built for different movement settings - a surf map designed around air acceleration 100 plays differently at 150, and some bhop maps assume a specific gravity. Most timers support per-map cvar overrides; otherwise a per-map config is the engine way:
game/csgo/cfg/maps/surf_example.cfgMany plugins and some builds exec a config named after the map on load; if yours does not, the timer's per-map settings are the reliable route.
Map votes on movement servers usually show the map tier next to the name. Rock-the-vote plugins for CounterStrikeSharp accept a map list with names and Workshop ids, and some timers integrate their own nomination menu.
Performance and network#
The CPU profile of a movement server is unusual: low per-player cost, but sensitive to frame time, because the whole game is precise movement. A server whose frame time spikes once a minute is invisible on a defuse server and ruins a bhop chain. Things that cause spikes:
- Database writes on the main thread. A timer that writes a record synchronously stalls the server for as long as the query takes. Use a timer that writes asynchronously, keep the database close, and do not run a big leaderboard query on every map start.
- Replays. Recording and playing back runs is real work. Cap the number of replay bots.
- Disk-heavy logging. Some timers log every zone touch. Turn verbose logging off once it works.
- Map changes. Loading a big surf map is a stall regardless. Keep the map list sensible and avoid scheduled restarts during peak hours.
On a plan that buys a fixed CPU share, the honest check is the console's CPU graph against the limit while the server is full. If it sits at the ceiling, the server is throttled and movement will feel inconsistent; on RE:NODE that is slow rather than dangerous, and a server at 100% is never suspended for it, but it is a reason to trim plugins or move up a plan. CPU vs RAM for game servers has the general rule.
Network use per player is similar to any CS2 server. Players on high latency notice it more on movement maps than anywhere else, because their own movement is predicted locally and corrected by the server - high jitter shows up as being pulled back on a ramp. Latency, jitter and packet loss explains how to tell a bad route from a busy server.
Troubleshooting#
Players slide off ramps or stop dead on surf. Usually a map problem rather than a server one: some CS2 ports have collision issues on ramp seams. Try the same spot on another map. If it happens everywhere, check sv_airaccelerate and that no plugin is resetting movement cvars on map start.
Bhop speed is capped at around 300. sv_enablebunnyhopping is 0, or a mode config reset it after server.cfg ran. Check the live value in the console after the map loads, not the file.
The timer does not start. No zones for this map. Draw them with the timer's admin menu, or check whether the map uses the trigger names the timer expects.
Records vanished after a restart. The timer was writing to a local file that was replaced, or to a database it could not reach and silently fell back. Check the plugin log at start for its database connection line.
Rounds keep ending. mp_ignore_round_win_conditions is off, or the game mode config overrode it. Exec your round config after the mode config.
Everything broke after a CS2 update. Metamod's line in gameinfo.gi was reverted, and movement plugins that patch memory need new builds. Restore the line, then wait for plugin updates before reopening. Keep a backup of the working addons folder - what to do when a mod update breaks has the general routine.
FAQ#
What sv_airaccelerate should a CS2 surf server use?
150 is the common public value and a safe default. 100 gives heavier air control that some veterans prefer; values far above that make most maps easy. Pick one and keep it, since records set at one value are not comparable with another.
Can I run a 128 tick surf or KZ server in CS2?
No. CS2 runs at 64 tick with sub-tick input and ignores the -tickrate launch argument. Movement feels different from CS:GO for that reason and because of the sub-tick system, and no hosting setting changes it.
Do I need a plugin for a surf server?
Not to play. The cvars above and a surf map give you playable surf. A timer plugin adds times, zones and records, which is what keeps players coming back, so most servers add one once the basics work.
Should auto-bunnyhopping be on?
For a public bhop server, usually yes: it makes the mode about strafing rather than about scroll-wheel timing, and new players stay longer. Many experienced communities run a separate server with it off. State the choice in the server name.
Will my CS:GO SourceMod timer work on CS2?
No. SourceMod does not run on CS2. Timers have been rewritten for Metamod and CounterStrikeSharp, and records from a CS:GO database do not carry over without a conversion tool from the timer's authors.
How many players can a surf server handle?
The game allows up to 64 slots, but most surf servers run 16-32 because maps get crowded and replays cost more with more players. Size by the CPU graph when full rather than by slot count.




Comments
Completely anonymous: no account, no email, no cookie. We store the name you type, the text and the time - nothing else. Links are limited and markup is not rendered.