Skip to main content
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:
1

Navigate to Create Match

Go to /matches/create or click the Create Match button on the manage matches page.
2

Choose Match Type

Select Pick-up Game (PUG) or Team Match based on your needs.
3

Configure Options

Set match type, best-of format, maps, and advanced settings.
4

Create

Click Create Match to generate your match.

Match Creation Form

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:
Standard 5v5 competitive format:
  • 12 rounds per half (MR12)
  • Standard competitive rules
  • Economy system enabled
  • Best for: Serious competitive play

Best-of Format

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

Anubis

Inferno

Mirage

Nuke

Overpass

Vertigo

Ancient

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:
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:
e_check_in_settings_enum.Admin    // Only admins
e_check_in_settings_enum.Captains // Team captains
e_check_in_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
1

Check-in Timeout

Match cancels if not enough players check in within auto_cancel_duration.
2

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

Build docs developers (and LLMs) love