A modern, lightweight customer panel for XUI.ONE based IPTV services.
Customers can sign in with their line username and password, view subscription details, manage assigned bouquet/channel groups, change their password, and copy their M3U playlist URL from one clean interface.
Built with plain PHP. No framework, no database, easy upload, easy configuration.
- 🔐 Customer login with XUI.ONE line username and password
- 📊 Dashboard with account details, expiry date, connection count and bouquet summary
- 🧩 Bouquet management for customer-assigned package/bouquet groups
- 🔑 Password change with automatic sign-out after update
- 📺 M3U playlist URL display with one-click copy button
- 📱 Fully responsive design with mobile hamburger menu
- 🎨 Modern dark UI with vibrant colors and clean cards
- 📩 Configurable contact menu for email, Telegram, WhatsApp or support URL
- 🛡️ Security-focused defaults for sessions, CSRF, rate limiting and protected files
- 🚀 cPanel and Plesk compatible
| Step | What You Do | Result |
|---|---|---|
| 1️⃣ | Upload the files to cPanel or Plesk | The panel files are ready on your hosting |
| 2️⃣ | Copy config.example.php to config.php and enter your XUI.ONE API details |
The panel connects to your XUI.ONE server |
| 3️⃣ | Customers sign in with their line username and password | They can manage bouquets, password and playlist URL |
- PHP 8.1+
- PHP cURL extension
- PHP JSON extension
- Apache
.htaccesssupport for clean URLs - XUI.ONE panel with Admin API access enabled
- cPanel, Plesk or any compatible PHP hosting environment
This panel uses:
- XUI.ONE Player API to verify customer login credentials
- XUI.ONE Admin API to read account, package and bouquet details
- XUI.ONE Admin API mysql_query action to update only the required line fields:
lines.bouquetfor bouquet preferenceslines.passwordfor password changes
The customer never sees your Admin API key. All API calls are executed server-side.
- Open cPanel → File Manager.
- Go to your domain folder, usually
public_htmlor a subfolder such aspublic_html/xpanel. - Upload all project files.
- Rename or copy:
config.example.php → config.php
- Open
config.phpand enter your XUI.ONE details:
'base_url' => 'https://your-xui-panel.com:port',
'access_code' => 'YOUR_ADMIN_API_ACCESS_CODE',
'api_key' => 'YOUR_ADMIN_API_KEY',- Open your panel URL:
https://yourdomain.com/xpanel
- Open Plesk → Domains → Your Domain → Files.
- Upload all project files into
httpdocsor your selected subfolder. - Rename or copy:
config.example.php → config.php
- Edit
config.phpand enter your XUI.ONE Admin API details. - Make sure Apache rewrite rules are enabled for clean URLs.
- Open the customer panel URL in your browser.
- Sign in to your XUI.ONE admin panel.
- Go to:
Management → Access Control → Access Codes
- Create a new access code.
- Select Admin API as the access type.
- Assign it to an administrator group.
- Save the generated access code.
Use this value in config.php:
'access_code' => 'YOUR_ADMIN_API_ACCESS_CODE',- Open your XUI.ONE administrator profile.
- Find the API key section.
- Generate or refresh the API key.
- Save the profile.
- Copy the API key into
config.php:
'api_key' => 'YOUR_ADMIN_API_KEY',Use your panel URL, including protocol and port if needed:
'base_url' => 'https://panel.example.com:8080',or:
'base_url' => 'http://123.123.123.123:25461',Main settings are inside config.php.
'xui' => [
'base_url' => 'https://your-xui-panel.com:port',
'access_code' => 'YOUR_ADMIN_API_ACCESS_CODE',
'api_key' => 'YOUR_ADMIN_API_KEY',
]'contact' => [
'enabled' => true,
'label' => 'Contact',
'type' => 'auto',
'value' => 'support@example.com',
]Supported contact values:
support@example.com
https://t.me/yourchannel
https://wa.me/905xxxxxxxxx
https://yourdomain.com/support
'playlist' => [
'enabled' => true,
'path' => 'get.php',
'type' => 'm3u_plus',
'output' => 'ts',
]Common output values:
ts
m3u8
This package includes several security-focused protections:
- CSRF protection on forms
- Login rate limiting
- Server-side Admin API usage only
- Protected
config.php,app/andstorage/paths - Strict session settings
- Secure cookie flags when HTTPS is used
- Basic security headers
- Password policy enforcement
- Direct SQL updates limited to whitelisted table and column names
- Raw API errors hidden in production
A basic security review and PHP syntax check were performed for this package, and no obvious issue was found in the prepared release. You should still test it on your own hosting environment before public production use.
xui-one-customer-panel/
├── app/
│ ├── Controllers/
│ ├── Core/
│ ├── Services/
│ └── Views/
├── assets/
│ ├── css/
│ ├── img/
│ └── js/
├── screenshots/
├── storage/
├── .htaccess
├── config.example.php
├── index.php
├── LICENSE
└── README.md
After installation:
- Open the panel URL.
- Sign in with an active XUI.ONE line username and password.
- Check dashboard account details.
- Open Bouquet Management and save a test change.
- Open Change Password and test with a temporary line.
The footer includes a credit link to:
https://github.com/rootwcore
If you keep the footer link unchanged, it helps support future free and open-source projects like this one.
Thank you for your support. 🙏
This project is an independent customer panel for XUI.ONE-based services. It is not an official XUI.ONE product and is not affiliated with the XUI.ONE developers.
Use it responsibly and only on systems you own or are authorized to manage.
Released under the MIT License.




