Skip to main content
5Stack is a feature-rich platform designed to provide a complete competitive Counter-Strike 2 experience. This page covers all major features available to players, organizers, and administrators.

Core Features

Automated Matchmaking

Queue-based system with skill-based pairing and region selection

Match Management

Create, join, and manage CS2 matches with custom configurations

Tournament System

Multiple bracket formats with automated management

Team System

Create teams, manage rosters, and compete together

Statistics & Leaderboards

Comprehensive player and team statistics tracking

Server Management

Dedicated server integration and automated provisioning

Real-time Communication

Match lobbies with text chat and WebRTC voice

Role-Based Access

Flexible permission system for different user types

Matchmaking

Automated matchmaking system that pairs players for competitive matches.

Key Features

  • Join queue for your preferred game mode (Competitive, Wingman, Duel)
  • Real-time queue status with waiting time
  • Automatic match creation when players are found
  • Support for solo and party queueing
// Queue status tracking from MatchmakingStore.ts
{
  type: "Competitive",
  regions: ["us-west"],
  joinedAt: 1709780400000,
  status: "searching"
}
  • Accept/decline match notification when found
  • Time-limited confirmation window
  • Automatic requeue if match is declined
  • Cooldown system for repeated declines
  • Choose from multiple geographic regions
  • Multi-region queueing support
  • Ping-based server selection
  • Region veto system for matched players
  • ELO rating system
  • Balanced team creation
  • Win/loss tracking affects future matchmaking
  • Separate ratings per game mode

Cooldown System

Players who abandon matches or fail to check in receive temporary cooldowns:
  • First offense: Short cooldown (minutes)
  • Repeated offenses: Increasing cooldown duration (hours/days)
  • Permanent bans for severe violations
Matchmaking availability depends on platform configuration and your account role. Administrators can set minimum role requirements in SettingsApplicationMatchmaking.

Matches

Flexible match system supporting various game modes and configurations.

Match Creation

Players join individually and teams are auto-balanced:
  • Open to any player
  • Automatic team balancing by skill
  • Captain selection for map veto
  • Public or private lobbies
// PUG mode toggle in MatchForm.vue
<FormField name="pug">
  <FormLabel>Pick Up Game</FormLabel>
  <FormDescription>
    Players join individually and teams are balanced automatically
  </FormDescription>
  <Switch v-model="form.values.pug" />
</FormField>

Match Options

Comprehensive configuration for every match:

Match Types

  • Competitive: Standard 5v5 matches
  • Wingman: 2v2 on smaller maps
  • Duel: 1v1 competitive matches

Best Of Series

  • Bo1: Single map
  • Bo3: First to 2 maps wins
  • Bo5: First to 3 maps wins

Map Selection

  • Pick from active map pool
  • Competitive veto system (ban/pick)
  • Random map selection
  • Custom map pools

Server Options

  • Region selection
  • Dedicated server assignment
  • Public server integration
  • Custom server configuration

Match Lobby Features

Real-time lobby environment for each match:
Players must check in before match starts:
// Check-in component from CheckIntoMatch.vue
<Button @click="checkIn">
  Check In
</Button>
  • Time-limited check-in window
  • Visual indication of checked-in players
  • Match cancellation if not all players check in
  • Penalties for failing to check in
Interactive map selection process:
  • Captain selection per team
  • Alternating ban/pick phases
  • Real-time veto state updates
  • Timer per veto action
  • Automated veto if time expires
Veto process tracked in MatchMapVeto.vue component.
  • View team rosters
  • Join specific team/lineup
  • Captain privileges for lineup management
  • Coach assignment support
  • Substitute player management
  • Text Chat: Real-time lobby chat
  • Voice Chat: WebRTC peer-to-peer voice communication
  • Team-only chat channels
  • All-chat before match starts
  • Chat moderation tools

Server Connection

Automated server provisioning and connection:
# Connection command provided in match lobby
connect 123.45.67.89:27015; password abc123xyz
  • One-click copy to clipboard
  • Automatic server setup with match config
  • SourceTV for spectators
  • Demo recording on server
Enable the CS2 developer console in game settings. Press ` (backtick key) to open the console and paste the connection command.

Tournaments

Professional tournament system with multiple bracket formats.

Tournament Formats

Swiss System

Teams play a fixed number of rounds with opponents matched by similar records. Balanced and fair for larger tournaments.

Round Robin

Every team plays every other team. Best for smaller tournaments where you want complete standings.

Single Elimination

Traditional bracket format. Lose once and you’re eliminated. Fast-paced and decisive.

Double Elimination

Second chance for teams. Winners and losers brackets ensure top teams aren’t eliminated by a single loss.

Tournament Creation

Organizers with Tournament Organizer role can create tournaments:
// Tournament form fields from TournamentForm.vue
interface TournamentForm {
  name: string;
  description: string;
  start: Date;
  auto_start: boolean;
  format: 'Swiss' | 'RoundRobin' | 'SingleElimination' | 'DoubleElimination';
  // Match settings inherited from MatchOptions
  type: 'Competitive' | 'Wingman' | 'Duel';
  best_of: 1 | 3 | 5;
  maps: string[];
  regions: string[];
}
1

Basic Information

Set tournament name, description, and start date/time
2

Format Selection

Choose bracket format based on participant count and tournament goals
3

Match Configuration

Configure default match settings (type, best of, map pool, regions)
4

Registration Settings

Set registration deadline and team/player limits
5

Launch

Publish tournament for registrations or save as draft

Tournament States

Tournaments progress through multiple states:
  1. Registration Open: Players/teams can register
  2. Registration Closed: No more registrations accepted
  3. Live: Tournament is in progress
  4. Finished: All matches completed
  5. Cancelled: Tournament was cancelled
State changes tracked via GraphQL subscriptions for real-time updates.

Tournament Management

  • Review team/player registrations
  • Accept or reject registrations
  • Set registration limits
  • Close registration manually
  • Automatic bracket generation
  • Manual seeding options
  • Match scheduling tools
  • Bracket progression rules
  • Override match results
  • Reschedule matches
  • Handle disputes
  • Assign forfeit wins
  • Real-time bracket updates
  • Live match tracking
  • Automatic standings calculation
  • Tournament chat channels

Teams

Team system for organized competitive play.

Team Features

Team Creation

Create your own team with custom name and roster

Roster Management

Invite players, manage roles, and build your lineup

Team Statistics

Track wins, losses, and performance metrics

Team Chat

Private communication channel for team members

Creating a Team

// Team creation from TeamForm.vue
interface TeamForm {
  name: string;
  tag: string; // Short team tag/abbreviation
  avatar_url?: string;
}
1

Navigate to Teams

Go to /teams/create
2

Fill Details

Enter team name and optional tag
3

Create

Submit form to create your team
4

Invite Players

Use team page to send invites to players

Roster Management

  • Captain: Full control over team settings and roster
  • Members: Can participate in team matches
  • Invites: Pending invitations to join team
  • Kick/Leave: Remove members or leave team
Teams can have multiple lineups for different match formats (5v5, 2v2, 1v1). Configure lineups in the team management page.

Statistics & Leaderboards

Comprehensive tracking of player and team performance.

Player Statistics

  • Kills: Total eliminations
  • Deaths: Times eliminated
  • Assists: Kill assists
  • K/D Ratio: Kills divided by deaths
  • Headshot %: Percentage of kills that were headshots
  • Damage: Total damage dealt

Leaderboards

Interactive leaderboards with multiple categories:
// Leaderboard categories from leaderboard.vue
const categories = [
  { value: 'elo', label: 'ELO Rating' },
  { value: 'kdr', label: 'K/D Ratio' },
  { value: 'win_rate', label: 'Win Rate' },
  { value: 'headshot_percentage', label: 'Headshot %' }
];
  • Time Period: Last 7 days, Last 30 days, All time
  • Match Type: All, Competitive, Wingman, Duel
  • Tournament Toggle: Include or exclude tournament matches
  • Region: Filter by geographic region
  • ELO: Ranked by skill rating with win streak display
  • K/D Ratio: Kills per death with total kills
  • Win Rate: Win percentage with total matches
  • Headshot %: Headshot percentage with total kills

Server Management

Dedicated CS2 game server integration and management.

Dedicated Servers

Server Registration

Add your own CS2 dedicated servers to the platform

Server Pools

Organize servers into regional pools

Auto-Provisioning

Automatically assign servers to matches

Configuration Management

Centralized server configuration and CFG management

Game Server Nodes

Container-based CS2 server infrastructure:
  • Register Docker-enabled hosts as game server nodes
  • Automatic container orchestration
  • Resource monitoring (CPU, RAM, disk)
  • Health checks and auto-restart
  • On-demand CS2 server creation
  • Pre-configured with match settings
  • Automatic cleanup after match
  • Demo file upload to S3-compatible storage
  • Real-time resource usage
  • Server logs viewing
  • Connection status tracking
  • Performance metrics

Public Servers

Integration with community servers:
  • Add public servers to match pool
  • Server browser for players
  • Automatic server selection for matches
  • RCON integration for server control

Communication

Real-time communication features for enhanced coordination.

Match Lobbies

WebSocket-based real-time chat:
  • Per-match chat channels
  • Team-only channels
  • Persistent chat history
  • Rich text support (mentions, emojis)
  • Chat moderation tools
Chat implementation uses GraphQL subscriptions for real-time updates.
WebRTC peer-to-peer voice communication:
  • Low-latency voice
  • Team voice channels
  • Push-to-talk or voice activation
  • Individual volume controls
  • Mute functionality
// WebRTC implementation from web-sockets/Socket.ts
import SimplePeer from 'simple-peer';

// Peer connection setup
const peer = new SimplePeer({
  initiator: isInitiator,
  trickle: true,
  stream: localStream
});
  • Match invitations
  • Team invitations
  • Tournament updates
  • Match status changes
  • Friend requests
  • In-app and push notifications (PWA)

Social Features

Friend System

Add friends and party up for matchmaking

Player Profiles

View detailed player statistics and match history

Recent Games

Browse your recent matches and review performance

Invitations

Send and receive match/team invitations

Roles & Permissions

Flexible role-based access control system.

Available Roles

1

User

Default role for all new accounts:
  • Join matches and tournaments
  • Create teams
  • Access leaderboards
  • Basic platform access
2

Verified User

Enhanced privileges for trusted users:
  • All User permissions
  • Create public matches (if enabled)
  • Higher matchmaking priority
  • Additional customization options
3

Streamer

Special features for content creators:
  • All Verified User permissions
  • Streaming integration tools
  • Stream delay settings
  • Featured matches
// Role hierarchy from AuthStore.ts
const roleOrder = [
  e_player_roles_enum.user,
  e_player_roles_enum.verified_user,
  e_player_roles_enum.streamer,
  e_player_roles_enum.match_organizer,
  e_player_roles_enum.tournament_organizer,
  e_player_roles_enum.administrator,
];
4

Match Organizer

Match management capabilities:
  • All Streamer permissions
  • Create any type of match
  • Force start/end matches
  • Override match results
  • Access match management dashboard
5

Tournament Organizer

Tournament management capabilities:
  • All Match Organizer permissions
  • Create and manage tournaments
  • Handle tournament disputes
  • Configure tournament brackets
  • Access tournament management tools
6

Administrator

Full platform access:
  • All permissions
  • User management
  • Server configuration
  • Application settings
  • Database access
  • System monitoring

Permission Checks

Permissions are checked throughout the application:
// Example permission check from AuthStore.ts
function isRoleAbove(role: e_player_roles_enum) {
  if (!me.value) return false;
  
  const meRoleIndex = roleOrder.indexOf(me.value.role);
  const roleIndex = roleOrder.indexOf(role);
  
  return meRoleIndex >= roleIndex;
}

Demo Management

Automatic CS2 demo recording and storage.

Demo Features

  • Server-side demo recording for all matches
  • Automatic upload to S3-compatible storage
  • Per-map demo files
  • Compressed storage (.dem.gz format)
Configure storage in SettingsApplicationDemo Settings:
  • S3-compatible storage backend (AWS S3, Backblaze B2, etc.)
  • Network rate limiting for uploads
  • Automatic cleanup of old demos
  • Storage usage monitoring
// Demo settings from demo-settings.vue
<FormField name="demo_network_limiter">
  <FormLabel>Network Rate Limiter (bytes/sec)</FormLabel>
  <Input type="number" v-model="form.values.demo_network_limiter" />
</FormField>
  • Download demos from match pages
  • Direct links to S3 storage
  • Bulk download support
  • Demo replay in CS2

Storage Configuration

Administrators can configure demo storage:
  • Storage Provider: AWS S3, Backblaze B2, MinIO, etc.
  • Bucket Configuration: Region, bucket name, access keys
  • Rate Limiting: Control upload bandwidth
  • Retention Policy: Auto-delete old demos
  • Compression: Automatic gzip compression

Internationalization

Multi-language support for global accessibility.

Supported Languages

5Stack supports 16+ languages:

European

  • English (en)
  • Spanish (es)
  • French (fr)
  • German (de)
  • Italian (it)
  • Polish (pl)
  • Russian (ru)
  • Latvian (lv)
  • Danish (da)
  • Swedish (sv)

Asian

  • Chinese (zh)
  • Japanese (ja)
  • Korean (ko)

Other

  • Portuguese Brazil (pt-BR)
  • Ukrainian (ua)

Language Selection

// Language selection from settings/index.vue
const { locale, setLocale } = useI18n();

// Change language
setLocale('es'); // Switch to Spanish
Users can change their language in SettingsAccountLanguage.
Translations are community-contributed. Visit the GitHub repository to contribute translations for your language.

Progressive Web App

Install 5Stack as a native app on any device.

PWA Features

Offline Support

Core functionality works without internet connection

Push Notifications

Receive match and tournament updates even when app is closed

Native Experience

Looks and feels like a native application

Auto-Updates

Automatic updates without app store

Installation

Chrome/Edge:
  1. Click the install icon in the address bar
  2. Click “Install” in the prompt
  3. 5Stack will open as a standalone app
Firefox/Safari:
  • Manual installation via browser menu

Platform Customization

Administrators can customize 5Stack for their brand and community.

Branding

Configure in SettingsApplicationBranding:
  • Platform name
  • Logo (light/dark mode)
  • Favicon
  • Primary colors
  • Login page customization
  • Custom login footer text
  • Custom login footer URL
  • Toggle footer visibility
  • Background customization

Feature Toggles

Enable or disable features platform-wide:
  • Matchmaking: Enable/disable automated matchmaking
  • Match Creation: Allow users to create matches
  • Tournament Creation: Restrict to organizers only
  • Team Creation: Public or restricted
  • Public Servers: Enable community server integration

API & Integration

Modern GraphQL API for developers.

GraphQL API

Queries

Fetch data (matches, tournaments, players, stats)

Mutations

Create, update, or delete data

Subscriptions

Real-time updates via WebSocket

Type Safety

Fully typed with generated TypeScript types

Code Generation

5Stack uses GraphQL Zeus for type-safe API access:
# Generate types from GraphQL schema
yarn codegen
// Type-safe queries using generated types
import { typedGql } from "~/generated/zeus/typedDocumentNode";
import { $ } from "~/generated/zeus";

const query = typedGql("query")({
  matches: [{
    where: {
      status: { _eq: $("status", "e_match_status_enum!") }
    }
  }, {
    id: true,
    status: true,
    type: true,
    created_at: true
  }]
});

Real-time Subscriptions

GraphQL subscriptions for live updates:
// Subscribe to live match updates
apollo.subscribe({
  query: typedGql("subscription")({
    matches: [{
      where: { status: { _eq: e_match_status_enum.Live } }
    }, {
      id: true,
      score_team_1: true,
      score_team_2: true
    }]
  })
}).subscribe({
  next: ({ data }) => {
    // Handle real-time updates
  }
});

Learn More

User Guide

Detailed guides for using 5Stack features

Match Management

Complete match system documentation

Tournament System

Tournament formats and management

Development Guide

Set up local development environment

API Reference

GraphQL API documentation

Server Management

Dedicated server setup and management
5Stack is open source and actively developed. Visit the GitHub repository to contribute or report issues.

Build docs developers (and LLMs) love