Skip to main content

Config Profiles

A config profile is a complete Xray-core config from which nodes assemble their working config. The profile holds inbounds, outbounds, and routing rules; a node takes from the profile only the inbounds that are enabled on it.

Creating a profile​

Config Profiles → Create Config Profile. Specify a name (2–30 characters), then edit the configuration JSON in the editor.

A minimal profile looks like this:

{
"log": { "loglevel": "info" },
"inbounds": [
{
"tag": "VLESS",
"port": 443,
"protocol": "vless",
"settings": { "clients": [], "decryption": "none" },
"streamSettings": { "network": "tcp", "security": "reality" }
}
],
"outbounds": [
{ "protocol": "freedom", "tag": "DIRECT" },
{ "protocol": "blackhole", "tag": "BLOCK" }
],
"routing": { "rules": [] }
}

The panel parses the inbounds from config.inbounds automatically: each one gets tag, type, port, and security. These inbounds are then selected in squads and hosts.

note

The profile does not configure Xray "for you" — the syntax and behavior of the core are described in the Xray documentation. What matters here is only how the panel stores and serves the config.

Snippets​

A snippet is a reusable configuration fragment. It saves you from copying the same rules across dozens of profiles.

[
{
"ip": ["geoip:private"],
"outboundTag": "BLOCK"
}
]

A snippet is included by name in the outbounds, routing.rules, routing.balancers, and snippets arrays:

"routing": {
"rules": [
{ "snippet": "Block Private" }
]
}

Snippets are shared across all profiles: editing one fragment changes behavior everywhere it is included at once.

warning

You cannot delete a snippet that is used somewhere — the panel checks references to it in profiles.

Applying to nodes​

Each node has an active profile and a list of active inbounds. You change them in the node card (Change Profile) or in bulk on the Bulk actions → Profile modification page — for several nodes at once, with a single inbound list.

After you edit the profile configuration, the nodes that use it receive the new config on the next sync; if the client set has not changed, Xray is not restarted. To force a restart, use the Restart node button, see Nodes.

Versions and rollback​

The panel does not keep a history of profile versions: a profile has only its current state and updatedAt. So rollback is your job, and it is better to prepare it in advance:

# database snapshot before edits
docker exec xpanel-db pg_dump -U xpanel xpanel > backup-$(date +%F).sql

Practical techniques:

  • keep a copy of the profile named something like Sample-backup nearby and switch nodes to it if something goes wrong;
  • export the profile JSON to a file or git before major changes;
  • edit the configuration in small steps so you understand what exactly broke the config.
danger

Changing the profile on a node is applied immediately. A wrong Xray config means a broken proxy on all nodes of that profile — check the JSON before saving.

What's next​

  • Nodes — applying a profile and restarting.
  • Hosts — inbounds in the subscription.
  • Squads — user access to inbounds.
  • Upgrading — backups and migrations.