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.
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.
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-backupnearby 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.
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.