---
title: "How to add Steam Workshop maps for Counter-Strike 2"
description: "Subscribe to Workshop maps, reference target item IDs on your server, and seamlessly rotate community maps into your CS2 cycle."
url: "https://www.gameserverkings.com/knowledge-base/counter-strike-2/how-to-add-workshop-maps/"
category: "Counter-Strike 2"
category_url: "https://www.gameserverkings.com/knowledge-base/counter-strike-2/"
published: "2026-07-02T03:15:38.608Z"
updated: "2026-08-07T20:33:21.320Z"
source_format: "markdown"
site: "GameServerKings"
---

# How to add Steam Workshop maps for Counter-Strike 2

Counter-Strike 2 downloads Workshop maps on the server itself — you never copy a `.vpk` by hand, and connecting players are sent the map automatically. Four server commands do the whole job, and all four are present and shipping in the retail build. This guide covers hosting a single map, hosting a collection, switching between downloaded maps, and building a rotation around them.

For first boot, ports and connecting, see [Getting started with your Counter-Strike 2 server](/knowledge-base/counter-strike-2/getting-started-with-your-server/). The full command and convar reference lives in [Counter-Strike 2 server commands: RCON, convars and admin plugins](/knowledge-base/counter-strike-2/how-to-add-admins-and-commands/).

## How CS2 Workshop Hosting Actually Works

A CS2 dedicated server fetches Workshop content through Steam itself. You give it a numeric Workshop ID; it downloads the map, mounts it, and hosts it. Clients who join then pull the same content automatically before they spawn.

The single most common mistake is reaching for the wrong command:

| Command | Where it runs | What it does |
|---|---|---|
| `host_workshop_map` | **Server** | Downloads the latest version of a Workshop map and hosts it |
| `map_workshop` | **Client only** | Launches a Workshop map in your own local game |

`map_workshop` is flagged client-side in the CS2 binary. Typing it into a dedicated server console will not host anything — it is the command your own game uses when you play a Workshop map offline. On a server you always want `host_workshop_map`.

## Step 1: Subscribe to Maps Locally

Browse `steamcommunity.com/app/730/workshop/` and open the map you want. The Workshop ID is the number after `?id=` in the URL:

```
https://steamcommunity.com/sharedfiles/filedetails/?id=3070346180
                                                       ^^^^^^^^^^
```

That number — `3070346180` — is the only thing your server needs.

Subscribing in your own Steam client is optional for hosting. It does not affect the server, which downloads independently. Subscribe anyway if you want to walk the map yourself before putting it live, and to get a notification when the author updates it.

> [!TIP] Collections have IDs too
> A Workshop **collection** page uses the same `?id=` format. Note which kind of page you copied the number from — a collection ID passed to `host_workshop_map` will not work, and vice versa.

## Step 2: Add to Server

To host one map, run this from the Console tab of your [hosted Counter-Strike 2 server](/games/counter-strike-2/) or over RCON:

```console
> host_workshop_map 3070346180
```

The server downloads the map if it does not already have it, then changes level to it. Expect a pause on first use while the download completes.

To boot straight into a Workshop map, pass it as a startup parameter. Console commands are prefixed with `+` on the command line, exactly like `+map`:

``` title="Startup parameters — single Workshop map"
+sv_setsteamaccount YOUR_GSLT_TOKEN
+host_workshop_map 3070346180
```

`host_workshop_map` re-checks for a newer version every time it runs, so it doubles as the update mechanism — run it again after the author publishes a change and the server pulls the new build.

> [!NOTE] Workshop settings override your map and mapgroup
> Once a Workshop map or collection is defined, a configured start map and map group are ignored. Set one or the other, not both, or the result will look like your `mapgroup` setting is broken.

## Hosting a Workshop Collection

A collection is the better choice for anything you intend to run long term. `host_workshop_collection` downloads **every** map in the collection and builds a map group out of them, then hosts it:

```console
> host_workshop_collection 1092904694
```

This is the closest thing CS2 has to a custom map cycle. Curate the collection on the Steam Workshop, and the server's rotation follows it — add a map to the collection, restart, and it is in the pool.

One convar governs the behaviour of a collection server:

| Convar | Default | What it does |
|---|---|---|
| `sv_workshop_allow_other_maps` | `true` | While the server is empty, players may load other Workshop maps on it; it then cycles back into your collection |

Leave it at `true` for a casual community server. Set it to `0` if the server exists to host one specific rotation and you do not want an empty server wandering off it.

## Single Map or Collection?

| | `host_workshop_map` | `host_workshop_collection` |
|---|---|---|
| Argument | One map's Workshop ID | A collection's Workshop ID |
| Downloads | That map | Every map in the collection |
| Creates a map group | No | Yes |
| Rotation | Stays on the one map | Cycles through the collection |
| Updating the pool | Change the ID and restart | Edit the collection on Steam, restart |
| Best for | A single surf/KZ/1v1 map, or testing | A community server with a real map pool |

## Switching Maps Once They Are Downloaded

After a collection has downloaded, you do not need the Workshop IDs again. Two commands work off the maps already on disk:

```console
> ds_workshop_listmaps
> ds_workshop_changelevel de_mutiny
```

`ds_workshop_listmaps` prints every Workshop map the server currently has. `ds_workshop_changelevel` takes the **map name** from that list, not a numeric ID, and changes level immediately without re-downloading. This is the fast path — use it for day-to-day map changes and keep `host_workshop_map` for adding or updating content.

`print_mapgroup_sv` prints the current map group and its maps, which is the quickest way to confirm a collection actually mounted.

## Map Rotation on a Workshop Server

Rotation on a Workshop server is driven by the map group the collection created, not by a text file.

> [!IMPORTANT] `mapcycle.txt` is not the answer in CS2
> `mapcyclefile` still exists in the CS2 binary but is flagged development-only, so the classic Source `mapcycle.txt` workflow is not a supported way to rotate maps on a retail CS2 server. Use a Workshop collection, or a map group, instead. A config that sets `mapcyclefile` will look like it applied and then do nothing.

The convars that actually shape rotation:

| Convar | Default | What it controls |
|---|---|---|
| `nextlevel` | `""` | Set to a valid map name to force that map at the end of the current round |
| `mp_endmatch_votenextmap` | `true` | Players vote for the next map on the end-of-match scoreboard |
| `mp_endmatch_votenextmap_keepcurrent` | `true` | Whether the current map stays in the voting options |
| `mp_endmatch_votenextleveltime` | `20` | Seconds players get to vote |
| `mp_match_end_changelevel` | `false` | Change level at match end even when the next map is the same |

With a collection mounted and `mp_endmatch_votenextmap` left at its default, players pick the next map from your collection at the end of each match — which is usually the behaviour community servers want, with no extra configuration.

To pin the next map yourself mid-match:

```console
> nextlevel de_thera
```

## GSLT and the Steam Web API Key

**A Game Server Login Token is required.** Valve's dedicated-server documentation is explicit: without a GSLT, other players cannot join your server. Generate one for app ID `730` at `steamcommunity.com/dev/managegameservers` and pass it as `+sv_setsteamaccount <TOKEN>`. [Getting started with your Counter-Strike 2 server](/knowledge-base/counter-strike-2/getting-started-with-your-server/) covers setting it in the panel's Startup tab.

The genuinely unsettled part is the **Steam Web API key**, historically passed as `-authkey` on the command line and used by CS:GO servers to reach the Workshop.

As of August 2026, two actively-maintained CS2 server projects disagree about whether it is still needed. One widely used CS2 Docker image hosts Workshop maps and collections with a GSLT alone and documents no API key at all, describing its Workshop support as experimental. Another popular CS2 server distribution still launches the game binary with `-authkey`, and its documentation says an API key is required to play Workshop maps — while linking to the *CS:GO* wiki for that requirement, which suggests the instruction is inherited rather than re-tested.

Practical advice: try a GSLT alone first, because that is the smaller setup and it demonstrably works for many hosts. If Workshop downloads fail with a GSLT in place and the ID is definitely correct, generate a Web API key at `steamcommunity.com/dev/apikey` and add `-authkey <KEY>` to your startup parameters before assuming the map is at fault.

> [!NOTE] Why this guide does not list a Workshop convar matrix
> Beyond the four commands above and `sv_workshop_allow_other_maps`, CS2's retail build exposes no further server-side Workshop convars. Command lists elsewhere that show more are generally CS:GO carry-over. Every command and default on this page was checked against a dump of the shipping CS2 binary rather than an older wiki.

## Running More Than One Workshop Addon

A stock server hosts one Workshop map or one collection. If you need several Workshop addons mounted at once — a map plus a content pack, for instance — that requires a plugin.

**MultiAddonManager** is the Metamod plugin built for this. It takes comma-separated Workshop IDs in `mm_extra_addons`, downloads anything missing, mounts them, and reloads the map so content is precached. `mm_client_extra_addons` handles addons that only clients need to load, and `mm_download_addon <id>` fetches one by hand.

It needs Metamod:Source installed first — see [How to install plugins on a Counter-Strike 2 server](/knowledge-base/counter-strike-2/how-to-install-plugins/) for that groundwork.

## Troubleshooting

**The map never loads and the server sits there.** First download of a large map takes time, and the server appears unresponsive during it. Check the console output rather than restarting, or the download begins again.

**"Unknown command" for `host_workshop_map`.** You are typing it into a client console rather than the server. On your own machine the equivalent is `map_workshop`. Use the panel Console tab, or prefix with `rcon` from a connected client.

**The map group setting appears to be ignored.** Expected, if a Workshop map or collection is configured — Workshop settings take precedence over a configured start map and map group.

**A map changed after an update and broke.** `host_workshop_map` always pulls the latest published version, so an author's update lands on your server the next time it runs. Pin players to a known-good state by hosting a collection you control rather than the author's own.

**Nothing appears in `ds_workshop_listmaps`.** Nothing has downloaded yet. That list reflects content already on disk, so it stays empty until a `host_workshop_map` or `host_workshop_collection` has succeeded.

## FAQ

### Do players need to subscribe to the map to join?

No. The server sends Workshop content to connecting clients automatically. Subscribing only matters for playing the map in your own offline game.

### What is the difference between `host_workshop_map` and `ds_workshop_changelevel`?

`host_workshop_map` takes a numeric Workshop ID, checks Steam for the latest version, downloads it if needed, and hosts it. `ds_workshop_changelevel` takes a map **name** and switches to a copy already on disk, with no download. Use the first to add or update content and the second for routine map changes.

### How do I update a Workshop map on my server?

Run `host_workshop_map <id>` again. It fetches the latest published version each time. For a collection, restart the server so `host_workshop_collection` re-resolves the contents.

### Can I mix Workshop maps and stock maps in one rotation?

Not through the Workshop commands alone — a collection builds a map group from its own maps. Mixing stock and Workshop maps in a single cycle is normally done with a map-management plugin.

### Do I need a GSLT to host Workshop maps?

You need one to run a joinable public server at all, so in practice yes. See the GSLT section above for the separate and less certain question of a Steam Web API key.

### Why does my collection only ever play one map?

Check that the collection actually mounted with `print_mapgroup_sv`. If it lists the maps but the server never advances, look at `mp_maxrounds` and `mp_timelimit` — a match that never ends never triggers a map change.

## What to Read Next

- [Counter-Strike 2 server commands: RCON, convars and admin plugins](/knowledge-base/counter-strike-2/how-to-add-admins-and-commands/) — the full command and convar reference, including the Workshop command table
- [Getting started with your Counter-Strike 2 server](/knowledge-base/counter-strike-2/getting-started-with-your-server/) — first boot, ports, GSLT and connecting
- [Counter-Strike 2 configuration](/knowledge-base/counter-strike-2/configuration-overview/) — where each config file lives and what executes when
- [How to install plugins on a Counter-Strike 2 server](/knowledge-base/counter-strike-2/how-to-install-plugins/) — Metamod:Source and CounterStrikeSharp

---

Made with 💜 by GameServerKings
