Creating a match in 5Stack is straightforward, with powerful options to customize every aspect of the game.
Quick Start
Navigate to the matches page and click the “Create Match” button:
Navigate to Create Match
Go to /matches/create or click the Create Match button on the manage matches page.
Choose Match Type
Select Pick-up Game (PUG) or Team Match based on your needs.
Configure Options
Set match type, best-of format, maps, and advanced settings.
Create
Click Create Match to generate your match.
The match creation form is implemented in components/match/MatchForm.vue:
< template >
< form @ submit . prevent = " updateMatch " >
< MatchOptions : form = " form " : match = " match " >
< template # left >
< FormField v-if = " ! match " v-slot = " { value , handleChange } " name = "pug" >
< FormItem >
< Card class = "cursor-pointer" @ click = " handleChange ( ! value ) " >
< div class = "flex flex-col space-y-3 p-4" >
< div class = "flex justify-between items-center" >
< FormLabel class = "text-lg font-semibold" >
Pick-up Game
</ FormLabel >
< Switch : model-value = " value " />
</ div >
</ div >
</ Card >
</ FormItem >
</ FormField >
</ template >
</ MatchOptions >
</ form >
</ template >
Pick-up Game (PUG) vs Team Match
Pick-up Game
Perfect for casual matches where players join individually:
Features
No pre-assigned teams
Players join either lineup
Dynamic team names
Quick to set up
Best For
Community matches
Open lobbies
Casual play
Finding players
Team Match
Organized matches between specific teams:
// Creating a team match
const matchData = {
lineup_1: {
data: {
team_id: 'team-1-uuid' // Optional: link to team
}
},
lineup_2: {
data: {
team_id: 'team-2-uuid'
}
},
options: {
data: {
// Match configuration
}
}
}
You can create an intra-team scrimmage by assigning the same team to both lineups.
Match Type Selection
Choose between three match types:
Competitive
Wingman
Custom
Standard 5v5 competitive format:
12 rounds per half (MR12)
Standard competitive rules
Economy system enabled
Best for: Serious competitive play
2v2 format on smaller maps:
8 rounds per half (MR8)
Wingman map pool
Best for: Quick matches, duo practice
Flexible format for any scenario:
Configurable round count
Custom map selection
Best for: Scrimmages, custom events
Select how many maps will be played:
const bestOfOptions = [ 1 , 3 , 5 ]. map (( rounds ) => ({
value: rounds . toString (),
display: `Best of ${ rounds } `
}));
Single map match:
Fastest format
Direct map selection or veto to 1 map
Common for group stages
Three map series:
Full map veto process
First to win 2 maps wins
Standard for playoffs
Five map series:
Extended veto process
First to win 3 maps wins
Used for finals/championships
Map Selection
Two approaches to selecting maps:
Active Duty Pool
Use Valve’s current competitive map pool:
// Maps automatically loaded from active duty pool
match . options . custom_map_pool = false
match . options . map_pool_id = defaultMapPoolId // Based on match type
Custom Map Pool
Select your own maps, including workshop maps:
// Enable custom map pool
form . values . custom_map_pool = true
form . values . map_pool = [
'map-uuid-1' ,
'map-uuid-2' ,
'workshop-map-uuid'
]
Workshop maps must be enabled on your server configuration. Ensure all players have the maps downloaded.
Map Veto Process
Enable structured map selection:
< FormField v-slot = " { value , handleChange } " name = "map_veto" >
<FormItem>
<Card class="cursor-pointer" @click="handleChange(!value)">
<div class="flex flex-col space-y-3 p-4">
<div class="flex justify-between items-center">
<FormLabel>Map Veto Settings</FormLabel>
<Switch :model-value="value" />
</div>
<FormDescription>
Teams alternate picking and banning maps until the required
number is selected
</FormDescription>
</div>
</Card>
</FormItem>
</ FormField >
Veto Disabled : Players/organizers directly select maps
Veto Enabled : Teams alternate bans/picks in a structured process
Advanced Settings
Access advanced configuration options:
Overtime Settings
Knife Round
Substitutes
TV Delay
match . options . overtime = true // Enable overtime
// 6 rounds of overtime (MR3)
// Reset economy each overtime period
Region Selection
Configure server region:
// Single region (no veto)
match . options . region_veto = false
match . options . regions = [ 'us-east' ]
// Region veto enabled
match . options . region_veto = true
match . options . regions = [ 'us-east' , 'us-west' , 'eu-west' ]
// Teams veto until one remains
For LAN matches, set match.options.lan = true to disable region veto and use LAN-optimized settings.
Check-in & Ready Settings
Control who can check-in and ready up:
Check-in Settings
Ready Settings
e_check_in_settings_enum . Admin // Only admins
e_check_in_settings_enum . Captains // Team captains
e_check_in_settings_enum . Players // All players
e_ready_settings_enum . Admin // Only admins
e_ready_settings_enum . Captains // Team captains
e_ready_settings_enum . Coach // Coaches only
e_ready_settings_enum . Players // All players
Auto-Cancellation
Prevents abandoned matches:
match . options . auto_cancellation = true
match . options . auto_cancel_duration = 15 // minutes
match . options . live_match_timeout = 30 // minutes
Check-in Timeout
Match cancels if not enough players check in within auto_cancel_duration.
Live Match Timeout
Match cancels if no activity detected for live_match_timeout minutes.
Creating the Match
Submit the form to create:
async createMatch () {
const { data } = await this . $apollo . mutate ({
variables: setupOptionsVariables ( form . values , {
mapPoolId: form . values . map_pool_id ,
}),
mutation: generateMutation ({
insert_matches_one: [
{
object: {
lineup_1: {
data: {
... ( this . form . values . team_1
? { team_id: this . form . values . team_1 }
: {}),
},
},
options: {
data: setupOptionsSetMutation ( !! form . map_pool_id ),
},
},
},
{ id: true },
],
}),
});
this . $router . push ( `/matches/ ${ data . insert_matches_one . id } ` );
}
After creation, you’re redirected to the match page where you can:
Add players to lineups
Schedule the match
Share invite codes
Monitor match status
Next Steps
Match Options Detailed explanation of all match configuration options
Joining Matches How players join and participate in matches
Match Lobbies Using the lobby chat and voice features