Quick Summary: 5 steps to have a functional TeamSpeak server in less than 20 minutes:
Connect to your VPS via RDP
Download TeamSpeak Server 3.13.7 (64-bit) from teamspeak.com/en/downloads
Extract to
C:\TeamSpeak3-Server\, launchts3server.exe, immediately save the privilege key and ServerQuery credentialsOpen ports 9987/UDP, 10011/TCP, 30033/TCP, 41144/TCP in the Windows firewall
Create a scheduled task for automatic startup
# PowerShell command: open the 4 ports at once
New-NetFirewallRule -DisplayName "TS3 Voice" -Direction Inbound -Protocol UDP -LocalPort 9987 -Action Allow
New-NetFirewallRule -DisplayName "TS3 Query" -Direction Inbound -Protocol TCP -LocalPort 10011 -Action Allow
New-NetFirewallRule -DisplayName "TS3 FileTransfer" -Direction Inbound -Protocol TCP -LocalPort 30033 -Action Allow
New-NetFirewallRule -DisplayName "TS3 TSDNS" -Direction Inbound -Protocol TCP -LocalPort 41144 -Action Allow
Prerequisites
Recommended VPS Specs based on the number of users
Concurrent Users | RAM | vCPU | Bandwidth |
|---|---|---|---|
Up to 10 | 1 GB | 1 vCPU | 100 Mbps |
Up to 50 | 2 GB | 2 vCPU | 200 Mbps |
Up to 100 | 4 GB | 2 vCPU | 500 Mbps |
Up to 200 | 8 GB | 4 vCPU | 1 Gbps |
TeamSpeak is lightweight. A VPS with 2 GB of RAM is sufficient for the vast majority of gaming communities.
Ports to open
Port | Protocol | Usage |
|---|---|---|
9987 | UDP | Voice traffic (main port) |
10011 | TCP | ServerQuery (administration) |
30033 | TCP | File transfer |
41144 | TCP | TSDNS (internal DNS resolution) |
Required OS
Windows Server 2019 or 2022 (64-bit). Windows Server 2016 also works, but 2022 is recommended for security.
Step 1: RDP Connection to your Windows VPS
First, connect to your VPS via Remote Desktop (RDP).
On Windows 10/11: Win + R → type mstsc → enter your VPS IP, username, and password.
Ensure you are connected as Administrator: this is essential for creating firewall rules and scheduled tasks.
Step 2: Download TeamSpeak Server
Go to the official page: teamspeak.com/en/downloads
Select Server 64-bit for Windows. The current version is 3.13.7. Download the .zip file and verify the SHA256 hash provided on the page.
TeamSpeak 3 vs TeamSpeak 5: which to choose in 2026?
Criterion | TeamSpeak 3 | TeamSpeak 5 |
|---|---|---|
Server Stability | ✅ Mature, proven | ⚠️ Still evolving |
Permission System | ✅ Complete and documented | ⚠️ Incomplete features |
Plugins & Bots | ✅ Rich ecosystem | ❌ Limited support |
Client Interface | Classic interface | Modern interface |
RAM Consumption | Very low | Higher |
Self-hosting | ✅ Recommended | ⚠️ In development |
Our recommendation in 2026: TeamSpeak 3. The TS5 server does not yet offer the maturity needed for serious hosting. TS3 remains the reference for creating a stable and manageable TeamSpeak server.
Step 3: Install and configure the server
Extracting files
Open PowerShell as Administrator and run:
# Create the installation directory
New-Item -ItemType Directory -Path "C:\TeamSpeak3-Server" -Force
# Extract the archive (adjust the path according to your download)
Expand-Archive -Path "$env:USERPROFILE\Downloads\teamspeak3-server_win64-3.13.7.zip" -DestinationPath "C:\TeamSpeak3-Server" -Force
# Move files if necessary (depending on the ZIP structure)
# Files must be directly in C:\TeamSpeak3-Server\
First launch
# Change to the directory
Set-Location "C:\TeamSpeak3-Server"
# Start the server
.\ts3server.exe
A console window opens. Read it carefully: it displays the initial connection information.
⚠️ SAVE THIS INFORMATION IMMEDIATELY
🔴 CRITICAL ALERT: This data appears only ONCE
------------------------------------------------------------------ ServerAdmin privilege key created, please use it to gain serveradmin rights for your virtualserver. please also check the doc/privilegekey_guide.txt for details. token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ------------------------------------------------------------------Copy and save immediately:
The token (privilege key): without it, you will not be able to manage your server
The ServerQuery login (
serveradmin) and its automatically generated passwordStore them in a password manager (Bitwarden, KeePass). If you lose the privilege key, recovery via ServerQuery is possible but tedious.
Accepting the license
On the first launch, a license_accepted file is automatically created if you accept via the console. You can also create this file manually:
# Accept the license manually
New-Item -ItemType File -Path "C:\TeamSpeak3-Server\license_accepted" -Force
Step 4: Configure the Windows firewall
Open PowerShell as Administrator and paste this complete block:
# Rule 1: Main voice port (UDP 9987)
New-NetFirewallRule `
-DisplayName "TeamSpeak3 - Voice (UDP 9987)" `
-Direction Inbound `
-Protocol UDP `
-LocalPort 9987 `
-Action Allow `
-Profile Any
# Rule 2: ServerQuery (TCP 10011)
New-NetFirewallRule `
-DisplayName "TeamSpeak3 - ServerQuery (TCP 10011)" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 10011 `
-Action Allow `
-Profile Any
# Rule 3: File transfer (TCP 30033)
New-NetFirewallRule `
-DisplayName "TeamSpeak3 - FileTransfer (TCP 30033)" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 30033 `
-Action Allow `
-Profile Any
# Rule 4: TSDNS (TCP 41144)
New-NetFirewallRule `
-DisplayName "TeamSpeak3 - TSDNS (TCP 41144)" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 41144 `
-Action Allow `
-Profile Any
Write-Host "✅ 4 firewall rules created successfully" -ForegroundColor Green
Check that the rules are created:
Get-NetFirewallRule | Where-Object { $_.DisplayName -like "TeamSpeak3*" } | Select-Object DisplayName, Enabled, Direction
Note: If your host provides a network firewall (in addition to the Windows firewall), be sure to open the same ports from your client area.
Step 5: Automatic startup via Task Scheduler
This is the step that most guides skimp on. Here is the complete and reliable method.
Create the startup script
# Create the startup script
$scriptContent = @'
# TeamSpeak 3 startup script
$tsPath = "C:\TeamSpeak3-Server"
$tsExe = "$tsPath\ts3server.exe"
# Check if the server is already running
$running = Get-Process -Name "ts3server" -ErrorAction SilentlyContinue
if (-not $running) {
Start-Process -FilePath $tsExe `
-WorkingDirectory $tsPath `
-ArgumentList "inifile=ts3server.ini" `
-WindowStyle Hidden
Write-EventLog -LogName Application -Source "TeamSpeak3" -EventId 1000 `
-EntryType Information -Message "TeamSpeak 3 Server started" `
-ErrorAction SilentlyContinue
}
'@
New-Item -ItemType Directory -Path "C:\Scripts" -Force | Out-Null
$scriptContent | Out-File -FilePath "C:\Scripts\Start-TeamSpeak3.ps1" -Encoding UTF8
Write-Host "✅ Script created: C:\Scripts\Start-TeamSpeak3.ps1" -ForegroundColor Green
Create the scheduled task
# Task parameters
$taskName = "TeamSpeak3-AutoStart"
$scriptPath = "C:\Scripts\Start-TeamSpeak3.ps1"
$description = "Automatic startup of TeamSpeak 3 server on boot"
# Action: launch PowerShell with the script
$action = New-ScheduledTaskAction `
-Execute "powershell.exe" `
-Argument "-NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File `"$scriptPath`""
# Trigger: at system startup, with a 30-second delay
$trigger = New-ScheduledTaskTrigger -AtStartup
$trigger.Delay = "PT30S" # 30 seconds delay (important for stability)
# Settings: run even without an open session, with SYSTEM rights
$settings = New-ScheduledTaskSettingsSet `
-ExecutionTimeLimit (New-TimeSpan -Hours 0) `
-RestartCount 3 `
-RestartInterval (New-TimeSpan -Minutes 1)
$principal = New-ScheduledTaskPrincipal `
-UserId "SYSTEM" `
-LogonType ServiceAccount `
-RunLevel Highest
# Register the task
Register-ScheduledTask `
-TaskName $taskName `
-Action $action `
-Trigger $trigger `
-Settings $settings `
-Principal $principal `
-Description $description `
-Force
Write-Host "✅ Scheduled task '$taskName' created successfully" -ForegroundColor Green
Check functionality
# Check that the task exists
Get-ScheduledTask -TaskName "TeamSpeak3-AutoStart" | Select-Object TaskName, State
# Test manually (simulate a startup)
Start-ScheduledTask -TaskName "TeamSpeak3-AutoStart"
# Wait 5 seconds then check the process
Start-Sleep -Seconds 5
Get-Process -Name "ts3server" -ErrorAction SilentlyContinue
Restart your VPS and check that ts3server.exe appears in the Task Manager after boot.
Step 6: Initial connection and configuration
Download the TeamSpeak client
Download the client from teamspeak.com/en/downloads → Client section.
Connect to the server
Open the TeamSpeak client
Connections → Connect (or
Ctrl+S)Address:
YOUR_VPS_IP:9987Nickname: your username
Click on Connect
Use the privilege key (admin token)
On the first connection, a window will prompt you to enter a token. Paste your privilege key saved in step 3. You will gain Server Admin rights.
If the window does not appear automatically: Permissions → Use privilege token.
Basic server settings
Right-click on the server name → Edit virtual server:
Server name: choose a clear name for your community
Message of the Day (MOTD): message displayed upon connection
Maximum slots: 32 with the free license, up to 1024 with a Gamer license
Password: optional, to restrict access
Step 7: Advanced permission system
The permission system of TeamSpeak 3 is powerful but often misunderstood. Here’s how to approach it.
Enable advanced mode
In the client: Tools → Options → Application → check Advanced mode. Without this, you only have access to a fraction of the permissions.
Group hierarchy
TeamSpeak distinguishes between two types of groups:
Server groups: apply across the entire server:
Group | Typical Role |
|---|---|
Server Admin | Full control of the server |
Moderator | Kick, ban, move |
Member | Access to standard channels |
Guest | Limited access, read-only |
Channel groups: apply only within a channel:
Group | Typical Role |
|---|---|
Channel Admin | Manages sub-channels and local permissions |
Channel Operator | Can kick members from the channel |
Normal | Speaks and listens |
Create a custom group
Permissions → Server groups
Right-click → Add group
Name it (e.g., "VIP", "Streamer")
Check the desired permissions (e.g.,
b_channel_create_permanentto create permanent channels)
Assign permissions by channel
Right-click on a channel → Edit channel
Permissions tab: set the values
i_channel_needed_join_powerto restrict accessOr use Permissions → Channel permissions for granular control
Practical tip: use i_channel_join_power on the group side and i_channel_needed_join_power on the channel side. If the group value is lower than the channel value, access is denied.
Step 8: Advanced security
Hosting a TeamSpeak server exposes your VPS. These steps go beyond just the firewall.
1. Change the ServerQuery password
The default password is randomly generated, but it’s better to change it. Connect via telnet or a ServerQuery client:
telnet VPS_IP 10011
login serveradmin YOUR_CURRENT_PASSWORD
clientupdate client_login_password=NEW_STRONG_PASSWORD
Or via PowerShell with the TS3 module:
# Connect to ServerQuery via TCP
$client = New-Object System.Net.Sockets.TcpClient("127.0.0.1", 10011)
$stream = $client.GetStream()
# Then send the login + clientupdate commands
2. Disable unused ports
If you are not using file transfer, disable port 30033:
# Disable the file transfer rule
Set-NetFirewallRule -DisplayName "TeamSpeak3 - FileTransfer (TCP 30033)" -Enabled False
3. Enable channel encryption (Opus Voice codec)
In the client, right-click on each channel → Edit channel → Codec: choose Opus Voice and enable encryption. Opus offers the best quality/compression and supports end-to-end encryption.
4. Limit connections by IP
Via ServerQuery:
serveredit virtualserver_max_clients_per_identity=3
This limits to 3 simultaneous connections per identity, reducing the impact of floods.
5. Ban malicious IPs
# Via ServerQuery
banclient clid=CLIENT_ID banreason=Spam time=3600
# or ban an IP directly
banadd ip=1.2.3.4 banreason=Flood time=0
time=0 = permanent ban.
6. Security checklist: 6 points
ServerQuery password changed (different from the generated password)
Port 10011 (ServerQuery) accessible only from your IP if possible
Opus Voice codec + encryption enabled on sensitive channels
Connection limit per configured IP
Server password enabled if the community is private
Logs enabled and regularly checked (
C:\TeamSpeak3-Server\logs\)
Step 9: Backups and Restoration
Critical Files to Backup
File | Content | Priority |
|---|---|---|
| Complete database (users, channels, permissions) | 🔴 Critical |
| Your TeamSpeak license | 🔴 Critical |
| Allowed IPs for ServerQuery | 🟡 Important |
| Banned ServerQuery IPs | 🟡 Important |
| Server configuration | 🟡 Important |
Automated Backup PowerShell Script
# Script : C:\Scripts\Backup-TeamSpeak3.ps1
# Daily backup with rotation for 7 days
$sourceDir = "C:\TeamSpeak3-Server"
$backupRoot = "C:\Backups\TeamSpeak3"
$date = Get-Date -Format "yyyy-MM-dd_HH-mm"
$backupDir = "$backupRoot\$date"
$maxBackups = 7
# Create the backup directory
New-Item -ItemType Directory -Path $backupDir -Force | Out-Null
# Files to backup
$filesToBackup = @(
"ts3server.sqlitedb",
"licensekey.dat",
"query_ip_allowlist.txt",
"query_ip_denylist.txt",
"ts3server.ini"
)
foreach ($file in $filesToBackup) {
$src = Join-Path $sourceDir $file
if (Test-Path $src) {
Copy-Item -Path $src -Destination $backupDir -Force
Write-Host "✅ Backed up: $file" -ForegroundColor Green
} else {
Write-Host "⚠️ File not found: $file" -ForegroundColor Yellow
}
}
# Rotation: delete backups older than 7 days
$allBackups = Get-ChildItem -Path $backupRoot -Directory | Sort-Object CreationTime
if ($allBackups.Count -gt $maxBackups) {
$toDelete = $allBackups | Select-Object -First ($allBackups.Count - $maxBackups)
foreach ($dir in $toDelete) {
Remove-Item -Path $dir.FullName -Recurse -Force
Write-Host "🗑️ Old backup deleted: $($dir.Name)" -ForegroundColor Gray
}
}
Write-Host "✅ Backup completed: $backupDir" -ForegroundColor Cyan
Schedule Daily Backup
$backupAction = New-ScheduledTaskAction `
-Execute "powershell.exe" `
-Argument "-NonInteractive -ExecutionPolicy Bypass -File `"C:\Scripts\Backup-TeamSpeak3.ps1`""
$backupTrigger = New-ScheduledTaskTrigger -Daily -At "03:00"
Register-ScheduledTask `
-TaskName "TeamSpeak3-DailyBackup" `
-Action $backupAction `
-Trigger $backupTrigger `
-Principal (New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount) `
-Description "Daily TeamSpeak 3 Backup" `
-Force
Write-Host "✅ Daily backup scheduled at 03:00" -ForegroundColor Green
Restoration Procedure
# 1. Stop the TeamSpeak server
Stop-Process -Name "ts3server" -Force -ErrorAction SilentlyContinue
Start-Sleep -Seconds 3
# 2. Set the backup to restore (adjust the date)
$backupToRestore = "C:\Backups\TeamSpeak3\2026-05-27_03-00"
$targetDir = "C:\TeamSpeak3-Server"
# 3. Restore the files
$filesToRestore = @("ts3server.sqlitedb", "licensekey.dat", "query_ip_allowlist.txt", "ts3server.ini")
foreach ($file in $filesToRestore) {
$src = Join-Path $backupToRestore $file
if (Test-Path $src) {
Copy-Item -Path $src -Destination $targetDir -Force
Write-Host "✅ Restored: $file" -ForegroundColor Green
}
}
# 4. Restart the server
Start-Process -FilePath "$targetDir\ts3server.exe" -WorkingDirectory $targetDir
Write-Host "✅ TeamSpeak 3 server restarted" -ForegroundColor Cyan
Step 10: Update TeamSpeak Server
Never replace binaries while running. Follow this procedure.
Manual Procedure
# Step 1: Stop the server
Stop-Process -Name "ts3server" -Force -ErrorAction SilentlyContinue
Start-Sleep -Seconds 5
Write-Host "✅ Server stopped"
# Step 2: Backup before update
& "C:\Scripts\Backup-TeamSpeak3.ps1"
# Step 3: Download the new version
$newVersion = "3.13.7" # Update this number
$downloadUrl = "https://files.teamspeak-services.com/releases/server/$newVersion/teamspeak3-server_win64-$newVersion.zip"
$zipPath = "$env:TEMP\ts3server_update.zip"
Invoke-WebRequest -Uri $downloadUrl -OutFile $zipPath
Write-Host "✅ New version downloaded"
# Step 4: Extract to a temporary folder
$tempDir = "$env:TEMP\ts3server_new"
Expand-Archive -Path $zipPath -DestinationPath $tempDir -Force
# Step 5: Copy new binaries (without overwriting the DB and config)
$filesToUpdate = @("ts3server.exe", "*.dll", "redist")
foreach ($pattern in $filesToUpdate) {
Copy-Item -Path "$tempDir\teamspeak3-server_win64\$pattern" `
-Destination "C:\TeamSpeak3-Server\" `
-Recurse -Force -ErrorAction SilentlyContinue
}
Write-Host "✅ Binaries updated"
# Step 6: Clean up and restart
Remove-Item $zipPath, $tempDir -Recurse -Force
Start-Process -FilePath "C:\TeamSpeak3-Server\ts3server.exe" -WorkingDirectory "C:\TeamSpeak3-Server"
Write-Host "✅ Server restarted with version $newVersion" -ForegroundColor Green
Tip: check the official release notes before each update to verify configuration changes.
Step 11: DNS Configuration (Custom Domain)
Instead of sharing a raw IP (185.x.x.x:9987), configure a domain like ts.mydomain.com.
Why use a DNS SRV record?
Your users connect with
ts.mydomain.comwithout typing the portIf you change IP, just update the DNS: no need to redistribute a new address
Professional appearance for your community
Create DNS Records
Step 1: A Record (in your DNS manager):
Type : A
Name : ts
Value : YOUR_VPS_IP
TTL : 3600
Step 2: SRV Record:
Type : SRV
Name : _ts3._udp.ts.mydomain.com
Priority : 0
Weight : 5
Port : 9987
Target : ts.mydomain.com
TTL : 3600
At most registrars (OVH, Namecheap, Cloudflare), the form looks like this:
Field | Value |
|---|---|
Service |
|
Protocol |
|
Name |
|
Priority |
|
Weight |
|
Port |
|
Target |
|
After DNS propagation (a few minutes to 24 hours), your users can connect with ts.mydomain.com without specifying the port.
Check Resolution
# Check the SRV record
Resolve-DnsName -Name "_ts3._udp.ts.mydomain.com" -Type SRV
Troubleshooting: 6 Common Errors
1. "failed to bind network interface": port already in use
The port 9987 is occupied by another process.
# Identify the process using port 9987
netstat -ano | findstr :9987
# Find the process name from the PID
Get-Process -Id PID_NUMBER
Stop the conflicting process or change the TeamSpeak port in ts3server.ini:
default_voice_port=9988
2. The server does not start after reboot
The scheduled task is misconfigured. Check:
# Check the task status
Get-ScheduledTask -TaskName "TeamSpeak3-AutoStart" | Select-Object State, LastRunTime, LastTaskResult
# LastTaskResult = 0 → success | other value → error
# Restart manually to test
Start-ScheduledTask -TaskName "TeamSpeak3-AutoStart"
Common cause: the PowerShell execution policy blocks the script. Check with Get-ExecutionPolicy and ensure that the -ExecutionPolicy Bypass parameter is included in the task action.
3. Unable to connect from outside
Two firewalls to check:
Windows Firewall: ensure that the rules created in step 4 are enabled
Get-NetFirewallRule | Where-Object { $_.DisplayName -like "TeamSpeak3*" } | Select-Object DisplayName, EnabledHost provider network firewall: log in to your client area and check that ports 9987/UDP, 10011/TCP, 30033/TCP are open for inbound traffic.
4. "You are banned": IP mistakenly banned
Via ServerQuery (telnet on port 10011):
login serveradmin YOUR_PASSWORD
use sid=1
banlist
bandel banid=BAN_ID
If your own IP is banned and you can no longer connect, add your IP to query_ip_allowlist.txt and restart the server.
5. Lost privilege key
If you have lost the admin token, retrieve it via ServerQuery:
login serveradmin YOUR_PASSWORD
use sid=1
tokenadd tokentype=0 tokenid1=6 tokenid2=0
This generates a new token for the Server Admin group (group ID 6 by default).
6. Corrupted database
# 1. Stop the server
Stop-Process -Name "ts3server" -Force
# 2. Rename the corrupted DB
Rename-Item "C:\TeamSpeak3-Server\ts3server.sqlitedb" "ts3server.sqlitedb.corrupt"
# 3. Restore from the latest backup
$latestBackup = Get-ChildItem "C:\Backups\TeamSpeak3" -Directory | Sort-Object CreationTime -Descending | Select-Object -First 1
Copy-Item "$($latestBackup.FullName)\ts3server.sqlitedb" "C:\TeamSpeak3-Server\"
# 4. Restart
Start-Process -FilePath "C:\TeamSpeak3-Server\ts3server.exe" -WorkingDirectory "C:\TeamSpeak3-Server"
If you do not have a backup, the server will recreate an empty database on the next startup: you will lose channels, groups, and users, but the server will become functional again.
FAQ
TeamSpeak 3 or TeamSpeak 5 in 2026?
TeamSpeak 3 remains the recommended choice for a self-hosted server in 2026. TS5 offers a more modern interface, but the permission system and administration tools are still incomplete on the server side. For a serious gaming community, stick with TS3: it's stable, lightweight, and the ecosystem of bots/plugins is mature.
How many simultaneous users on a 4 GB RAM VPS?
A 4 GB RAM VPS with 2 vCPUs comfortably handles 100 simultaneous users with TeamSpeak 3. The TS3 server consumes about 30-50 MB of RAM for 50 active users. Bandwidth is the real limiting factor: expect ~10 Kbps per user in Opus Voice, or ~1 Mbps for 100 people.
Is TeamSpeak free for private use?
Yes. The free license (Non-Profit License) covers up to 32 simultaneous users and 1 virtual server, at no cost. For more slots, the Gamer License (up to 1024 slots) is available upon request from TeamSpeak. Check teamspeak.com/features/licensing for details.
How to change the default port (9987)?
Edit ts3server.ini in C:\TeamSpeak3-Server\:
default_voice_port=9988
Then update the firewall rule:
Remove-NetFirewallRule -DisplayName "TeamSpeak3 - Voice (UDP 9987)"
New-NetFirewallRule -DisplayName "TeamSpeak3 - Voice (UDP 9988)" -Direction Inbound -Protocol UDP -LocalPort 9988 -Action Allow
And update your DNS SRV record if you have one.
Can TeamSpeak and FiveM run on the same VPS?
Yes, as long as you have enough resources. FiveM consumes much more than TeamSpeak: expect at least 8 GB of RAM and 4 vCPUs to run both comfortably. The ports do not overlap (FiveM uses 30120, TeamSpeak 9987), so there is no network conflict.
How to migrate an existing TeamSpeak server to a new VPS?
Backup critical files on the old server:
ts3server.sqlitedb,licensekey.dat,ts3server.ini,query_ip_allowlist.txtInstall TeamSpeak Server on the new VPS (steps 1 to 5 of this guide)
Stop the new server before copying the files
Copy the backed-up files to
C:\TeamSpeak3-Server\on the new VPSRestart the server: all your channels, groups, and users are restored
Update your A DNS record to point to the new IP
Useful Sources
Official TeamSpeak Download Page: server and client, all versions
TeamSpeak Licenses (free vs paid): details of the Non-Profit License
TeamSpeak Support: DNS SRV records: official configuration of SRV records
Microsoft Documentation: Register-ScheduledTask: PowerShell reference for Task Scheduler
