🎉 Welcome to Catalyst! This guide walks you through everything after installation — from your first login to running your first game server.
If you haven't installed the panel yet, hop over to the Quick Start (5 minutes) or the Installation Guide (full details).
- Before You Begin
- Step 1: Initial Setup and Login
- Step 2: Configure Your Profile
- Step 3: Create a Location
- Step 4: Create a Node
- Step 5: Deploy the Agent
- Step 6: Server Templates
- Step 7: Create Your First Server
- Step 8: Installation (usually automatic)
- Step 9: Access the Console
- Step 10: Basic Server Management
- Next Steps
Welcome! This guide assumes you already have the Catalyst panel running. If you haven't installed it yet, check out:
- Quick Start — Get the panel running in 5 minutes with Docker
- Installation Guide — Full installation details for every scenario
You'll also need:
- Access to a node machine (can be the same server or a separate one) with:
- Linux (Ubuntu 22.04+, Debian 12+, or similar)
- Root or sudo access
- containerd installed and running
- At least 2 CPU cores and 2 GB RAM available for game servers
🎉 The panel is running — let's get you set up!
This guide walks you through everything after installation: logging in for the first time, setting up a node, deploying the agent, and creating your first game server.
- Open your browser to your
PUBLIC_URL(for examplehttp://localhost:8080, not bare:80unless you changedFRONTEND_PORT). - On a fresh install the panel requires Setup (
/setup):- Welcome
- Admin Account — email, username, password for the first administrator
- Appearance — branding/theme options
- Finish setup. Catalyst creates the Administrator role (
*), assigns it to your user, and disables open self-registration. - Sign in with Sign in using the credentials you just created.
You land on the dashboard overview.
Do not rely on seed accounts for production. Seed users exist only if you deliberately ran a seed script in a development environment.
If you ran pnpm run db:seed / db:seed:admin (or equivalent) in a dev environment, you may sign in with the seed admin:
- Email:
admin@example.com - Password:
admin123
Change this password immediately. Seed credentials are not part of the Docker one-liner production path.
Open registration is off after setup. Admins can re-enable it under Admin → Security. When enabled, new users use Create account with:
- Email — unique
- Username — 2–32 characters, unique
- Password — minimum 8 characters (complexity rules apply)
New self-registered users receive the default User role (limited access). They do not become administrators.
If you forget your password after creating an account:
- On the login page, click Forgot Password?
- Enter the email address associated with your account.
- Click Send Reset Link.
- Check your email for the reset message.
- Click the link in the email and enter your new password.
- Sign in with the new password.
Note: Password recovery requires SMTP to be configured by your administrator. If you don't receive the email, contact your server admin to verify email settings.
After clicking the reset link, you'll be taken to the Reset Password page (/reset-password):
- The page validates the reset token (1-hour expiry, single-use only).
- Enter your new password (min 8 characters) and confirm it.
- Click Reset Password.
- You're redirected to the login page.
Security: Reset tokens use constant-time comparison to prevent timing attacks. Failed attempts are rate-limited.
Catalyst automatically keeps your sessions synchronized across all open browser tabs:
- When you log in to Catalyst in one tab, all other open tabs are automatically logged in.
- When you log out from any tab, you are logged out of ALL tabs simultaneously.
- When your session expires, all tabs are notified and redirect to the login page.
- Password changes revoke all other sessions across all tabs.
This is powered by the BroadcastChannel API and localStorage event listeners, ensuring that even if a tab is in a different browser window, it will still receive session state updates within milliseconds.
Note: Cross-tab sync only works within the same browser and the same Catalyst panel. It does not sync across different browsers or different panel instances.
After your first login, update your admin profile:
- Click your avatar or username in the top-right corner
- Navigate to Profile Settings
- Update your display name, first name, and last name
- Upload an avatar image (JPEG, PNG, GIF, or WebP, max 2 MB). Note: SVG files are not accepted due to XSS risk.
It's strongly recommended to enable 2FA for admin accounts:
- Go to Profile (sidebar user entry →
/profile) → Security → Two-Factor Authentication. (There is no standalone/two-factorpage — that route redirects to/login; 2FA setup is inline.) - Click Enable 2FA.
- Enter your password to confirm your identity.
- A QR code is displayed — open your authenticator app (Google Authenticator, Authy, Microsoft Authenticator, etc.) and scan the code.
- The QR code contains a TOTP secret encoded as
otpauth://totp/URI. - Your app will start generating 6-digit codes that change every 30 seconds.
- The QR code contains a TOTP secret encoded as
- Enter the 6-digit verification code from your app to confirm setup.
- Save your backup codes — 10 one-time codes are provided. Store them in a password manager, printed document, or other secure location.
- Each backup code can be used only once.
- If you lose your authenticator device, backup codes are your only way to log in.
The 2FA Setup page (/two-factor) includes:
| Feature | Description |
|---|---|
| Password Verification | You must enter your current password before enabling 2FA |
| QR Code Display | Scannable TOTP secret for authenticator apps |
| Verification Code Input | Enter the 6-digit code from your app to confirm |
| Backup Code Generation | 10 one-time codes displayed after successful verification |
| Trust Device Checkbox | "Trust this device for 30 days" option during verification |
| Revoke Trusted Devices | View and revoke trusted devices at any time |
| Disable 2FA | Toggle 2FA on/off with current code verification |
| Generate New Backup Codes | Invalidate old codes and generate a new set |
During 2FA verification, you'll see a "Trust this device for 30 days" checkbox:
- When checked, future logins from the same device/browser won't require a 2FA code for 30 days.
- Device identity is verified via a cryptographic browser fingerprint (not just cookies).
- Each trusted device shows its registration date and fingerprint hash.
- You can revoke a trusted device at any time by clicking Revoke Trust next to it.
- Revoking a trusted device immediately requires 2FA on the next login attempt.
For passwordless login support:
- Go to Profile → Security → Passkeys.
- Click Add Passkey.
- Enter a name for the passkey (e.g., "MacBook Touch ID", "YubiKey").
- Click Continue.
- Follow your browser's biometric prompt (Face ID, Touch ID, Windows Hello, or security key).
2-step registration: Passkeys use a 2-step process — first you name the passkey, then you authenticate. This prevents phishing by committing to the name before biometric verification.
- Go to Profile → Security → Change Password
- Enter your current password
- Enter and confirm the new password
- Optionally check Revoke other sessions to sign out all other devices
Locations are logical groupings for your nodes (for example data centers or regions).
- Navigate to Admin → Nodes.
- Open Locations (modal from the Nodes page — there is no
/admin/locationsroute). - Create a location with a Name (for example
US East 1) and optional description. - Save.
Locations organize nodes and help users choose where to deploy servers.
A node is a physical or virtual machine that runs game server containers via the Catalyst agent.
- Navigate to Admin → Nodes.
- Click Register Node (UI label; not “Create Node”).
- Fill in the required fields:
| Field | Description | Example |
|---|---|---|
| Name | Unique identifier for the node | node-1 |
| Description | Optional description | Main game server node |
| Location | The location from Step 4 | US East 1 |
| Hostname | System hostname of the machine | node-1.example.com |
| Public Address | IP address or hostname reachable from the panel | 192.168.1.100 |
| Max Memory (MB) | Total RAM available for servers | 32000 |
| Max CPU Cores | Total CPU cores available | 16 |
| Server Data Dir | (Optional) Override data directory path | /var/lib/catalyst |
- Click Register node
After creation, the node will appear in the list with an offline status until the agent connects.
Allocations define the IP:port combinations available on a node. They are managed on a separate page, not in the creation wizard:
- Select the node from the list
- Click Allocations (opens
/admin/nodes/:nodeId/allocations) - Click Add Allocation
- Enter the IP address and port range:
- IP:
192.168.1.100or a CIDR range like10.0.0.0/24 - Ports:
25565-25585(supports individual ports, ranges, and comma-separated values)
- IP:
- Click Save
When creating a server, you'll assign it an allocation from the available pool.
The agent needs an API key to authenticate with the panel. Node details has no separate Agent tab — key management lives on the node details page:
- Select the node
- Click Generate Key (or Regenerate Key if one exists)
- Copy the API key — you'll need it for the agent configuration
Important: The API key is only shown once. Store it securely.
The Catalyst agent is a Rust binary that runs on each node. It manages containers using containerd and communicates with the panel over WebSocket.
On each node machine:
- OS: Linux (Ubuntu 22.04+, Debian 12+, or similar)
- containerd installed and running (with CRI plugin)
- Root access (required for containerd socket access and network management)
- Ports: Agent needs outbound access to the panel's WebSocket endpoint (
/ws) - Network: The panel must be able to reach the node's public address
The easiest way to deploy the agent:
- In the panel, open the node details page and click Deploy
- Click Generate Deployment Token if needed
- This creates a one-time deployment URL (valid for 24 hours) and an API key
- On the node machine, run the deployment command shown in the dialog (form:
curl -s 'deployUrl?apiKey=...' | sudo bash -x; use Copy to grab it exactly), for example:curl -s 'https://your-panel.com/api/deploy/YOUR_TOKEN?apiKey=...' | sudo bash -x
The deployment script will:
- Install the agent binary
- Generate
config.tomlwith the correct settings - Set up systemd service
- Start the agent
If you prefer manual installation:
-
Build or download the agent binary:
# From source cd catalyst-agent cargo build --release sudo cp target/release/catalyst-agent /usr/local/bin/
-
Create the configuration file at
/opt/catalyst-agent/config.toml(the path shown in the panel;CATALYST_CONFIG_PATHoverrides it):[server] backend_url = "wss://panel.example.com/ws" node_id = "your-node-uuid" api_key = "your-api-key-from-panel" hostname = "node-1" data_dir = "/var/lib/catalyst" max_connections = 100 [containerd] socket_path = "/run/containerd/containerd.sock" namespace = "catalyst" [logging] level = "info" format = "json"
-
Create a systemd service:
[Unit] Description=Catalyst Agent After=network-online.target containerd.service Requires=containerd.service [Service] Type=simple ExecStart=/usr/local/bin/catalyst-agent --config /opt/catalyst-agent/config.toml Restart=always RestartSec=5s [Install] WantedBy=multi-user.target
-
Start the agent:
sudo systemctl daemon-reload sudo systemctl enable --now catalyst-agent
The agent supports multiple networking modes for game server containers:
macvlan gives each container its own MAC address and IP on the network, which is essential for games that need direct IP access (e.g., Minecraft).
Add network configuration to the agent's config.toml:
[[networking.networks]]
name = "mc-lan-static"
interface = "eth0"
cidr = "10.5.5.0/24"
gateway = "10.5.5.1"
range_start = "10.5.5.50"
range_end = "10.5.5.200"If no networks are configured, the agent will automatically create a default network based on the primary interface.
For servers that need to bind directly to the host's network interfaces:
When creating a server, set the networkMode to host. The server will use the node's public IP address directly.
Standard Docker bridge networking. The panel handles port forwarding from the host to the container.
Templates define how game servers are configured and deployed. Catalyst comes with built-in templates and supports custom ones.
After seeding, you'll have two default templates:
| Setting | Value |
|---|---|
| Image | Eclipse Temurin 21 JRE |
| Default RAM | 1024 MB |
| Default CPU | 2 cores |
| Port | 25565 |
| Features | Auto-restart, mod manager, plugin manager, file editor |
Template Variables:
| Variable | Default | Description |
|---|---|---|
MEMORY |
1024 |
Amount of RAM in MB (512–16384) |
MEMORY_XMS |
512 |
Initial heap size in MB (256–8192) |
PORT |
25565 |
Server port (1024–65535) |
VERSION |
1.21.11 |
Minecraft version to install |
BUILD |
(latest) | Paper build number (empty = latest) |
| Setting | Value |
|---|---|
| Image | Node.js 20 (Debian Slim) |
| Default RAM | 1024 MB |
| Default CPU | 1 core |
| Port | 3000 |
| Features | Auto-restart, Git-based deployment |
Template Variables:
| Variable | Default | Description |
|---|---|---|
GIT_REPO |
(required) | Git clone URL |
GIT_BRANCH |
main |
Branch or tag to deploy |
NPM_INSTALL_COMMAND |
npm install --no-audit --no-fund |
Dependency install command |
START_COMMAND |
npm start |
Fallback startup command |
BOT_START_COMMAND |
(empty) | Optional startup command override |
PORT |
3000 |
Application listen port (1024–65535) |
NODE_ENV |
production |
Node.js runtime environment |
Templates use {{VARIABLE_NAME}} syntax for interpolation in startup commands and install scripts. When you create a server, the panel replaces these placeholders with the values you provide.
Example — Minecraft startup command:
java -Xms{{MEMORY_XMS}}M -Xmx{{MEMORY}}M -jar paper.jar nogui
With MEMORY=2048 and MEMORY_XMS=1024, this becomes:
java -Xms1024M -Xmx2048M -jar paper.jar nogui
Built-in placeholders available in install scripts:
| Placeholder | Description |
|---|---|
{{SERVER_DIR}} |
Absolute path to the server data directory |
{{VARIABLE_NAME}} |
Any user-defined template variable |
{{TEMPLATE_IMAGE}} |
The container image specified in the template |
- Navigate to Servers → New server (the dashboard Create Server shortcut links to
/servers) - Fill in the server details:
| Field | Description | Example |
|---|---|---|
| Name | Display name for your server | My Minecraft Server |
| Description | Optional description | Survival server for friends |
| Node | The node to deploy on | node-1 |
| Template | Server template | Minecraft Server (Paper) |
| Field | Description | Example |
|---|---|---|
| Memory (MB) | RAM to allocate (backend range 512–131072) | 2048 |
| CPU Cores | CPU cores to allocate (backend range 1–128) | 2 |
| Disk (MB) | Disk space to allocate (backend range 1024–1048576) | 10240 |
Optional extras on the same step: Swap (MB), Backup (MB), and Database Allocation (blank = provider defaults). If the template defines Image Variants, pick one on the details step.
The creation wizard offers two Network Modes: Host (port mapping) and Macvlan.
| Field | Description | Example |
|---|---|---|
| Primary Allocation | Allocation picked from the node's pool (host mode) | 192.168.1.100:25565 |
| Primary Port | Read-only in host mode — populated from the allocation | 25565 |
| Additional Port Bindings | Extra allocation → container-port mappings | 25566 |
| Interface / IP Allocation | Macvlan interface + Auto-assign |
eth0 |
Fill in the template-specific variables (e.g., for Minecraft: Memory, Version, Build). Required fields are marked with an asterisk.
- Click Create server
The server is created and installation starts immediately — you land on /servers/:id/console. The server is not left stopped waiting for a manual install.
If someone invited you to a server, you'll receive an invite link:
For existing users:
- Click the invite link.
- Log in if prompted.
- Click Accept Invite on the invite page.
- You'll gain access to the invited server.
For new users:
- Click the invite link.
- You'll be taken to the registration page with your email pre-filled.
- Fill in:
- Username — your desired username (min 3 characters)
- Password — your password (min 8 characters)
- Click Register.
- You'll automatically gain access to the invited server after registration.
Note: The email on the invite cannot be changed during registration. If you need a different email, contact the person who sent the invite.
Creating a server starts installation immediately in typical flows — you usually do not click a separate Install button after create.
While installing, the agent:
- Pulls the container image
- Creates the server data directory
- Runs the template install script in a temporary container
- Downloads game files (for example Paper.jar for Minecraft)
- Writes default configuration files
Watch progress on the Console tab. For Minecraft, installation typically fetches the Paper jar and creates default server.properties / eula.txt.
If installation fails or you need a clean reinstall:
- Open the server detail page
- Use Admin → Reinstall (or the reinstall control your role exposes)
- Confirm — reinstall wipes server data and re-runs the install script
Warning: Reinstall is destructive. Back up first if you need existing files.
The real-time console lets you interact with your server:
- Go to your server's detail page
- Click the Console tab
- The console shows real-time server output via WebSocket
- Type commands in the input field and press Enter to send them
Console features:
- Real-time output streaming (WebSocket)
- Command history (use arrow keys)
- Scroll through past output
- The console buffer is configurable via
CONSOLE_OUTPUT_BYTE_LIMIT_BYTES(default: 256 KB)
Common Minecraft console commands:
help — Show available commands
list — List online players
op <username> — Grant operator status
whitelist add <player> — Add player to whitelist
stop — Stop the server gracefully
Use the control buttons on the server page:
| Action | Description |
|---|---|
| Start | Boot the server container |
| Stop | Gracefully stop (sends the stop command, then SIGTERM) |
| Restart | Stop and start the server |
| Kill | Force-stop (sends SIGKILL immediately) |
Access your server files through the web UI:
- Go to your server → Files tab
- Browse the server directory structure
- You can:
- Upload files (drag and drop or click to select)
- Download files
- Edit text files directly in the browser
- Create new files and directories
- Delete files and directories
- Compress / decompress archives (
.tar.gz) - Rename files and directories
For SFTP access (agent-hosted on the game node):
- Open the server → SFTP tab (or connection details from the UI)
- Generate or copy the SFTP token from the panel (
GET /api/sftp/connection-info) - Connect with your SFTP client using the values the panel shows:
Host: <node public address or hostname> Port: <node SFTP port, often 2022> Username: <server-id> # not your panel username Password: sftp_<token> # opaque token, not a JWT
Create and manage server backups:
- Go to your server → Backups tab
- Click Create backup (button label is sentence-case)
- Backups can be stored locally or on S3 (configured per-server in Backups → storage settings; hidden when allocation is zero)
- Download existing backups or restore them to the server
Configure your server across two tabs:
- Settings: rename the server, update description, adjust memory/CPU/disk
- Configuration: edit template (startup) variables
- Admin (owner or admin-write/server-delete holders): node transfer, ownership transfer, port allocations, restart policy, suspension, archive/restore, delete, reinstall
Congratulations — you now have a fully working Catalyst setup with a running game server! 🎉
Here's where to go next:
- System Configuration (
/admin/system) — SMTP settings, Mod Manager API keys, auto-updater, platform health dashboard - Security Settings (
/admin/security) — rate limits, lockout policy, file tunnel security, brute-force protection, lockout viewer - System Errors (
/admin/system-errors) — client-side error reporting dashboard for debugging frontend issues - Theme Settings (
/admin/theme-settings) — panel branding, colors, custom CSS, light/dark mode - Database Hosts (
/admin/database) — configure remote database servers for per-server provisioning - System-wide Alerts (
/admin/alerts) — create and manage platform-level alert rules - Migration Tool (
/admin/migration) — migrate from Pterodactyl Panel to Catalyst - Audit Logs (
/admin/audit-logs) — system-wide activity trail with filtering, CSV export, and 15-second auto-refresh
- Node Details (
/admin/nodes/:nodeId) — view live metrics (CPU, memory, disk), server summary, allocation management, agent health - Template Details (
/admin/templates/:templateId) — edit template variables, configuration, and features
- Server Transfer Ownership — transfer server ownership to another user (Settings → Transfer Ownership)
- Server Suspension — admins can suspend/resume servers temporarily
- Archive & Restore — preserve servers without deleting them (Admin tab)
- File Editor — edit text files directly in the browser with save/cancel and dirty state tracking
- Console Filters — toggle visibility of stdout (green), stderr (red), system (blue), and stdin (yellow) streams
- Cross-Tab Session Sync — automatically synced across all browser tabs via BroadcastChannel API
- Brute Force Protection — rate limiting, IP blocking, email lockout, and lockout viewer
- Invites Page (
/invites/:token) — accept invites for existing users or register + accept for new users - API Keys — create scoped API keys with rate limits and expiration
- Mod Manager — browse and install mods from CurseForge, Modrinth, and Paper
- Plugin Manager — browse and install plugins from Modrinth, Spigot, and Paper
| Guide | For You If... |
|---|---|
| Quick Start | You haven't installed Catalyst yet |
| Installation Guide | You want full installation details |
| Docker Setup | You need Docker Compose reference |
| Admin Guide | You manage users, roles, and system config |
| Agent Guide | You need advanced agent configuration |
| API Reference | You're building integrations |
| Automation Guide | You want scheduled tasks, webhooks, or plugins |
| User Guide | You manage servers day-to-day |
| Architecture Overview | You want to understand how Catalyst works |
| Troubleshooting | Something went wrong |
Part of the Catalyst Documentation. Last updated: 2026-05-11