How would you like to explore?

Choose your preferred way of managing Panelica. You can switch anytime from the sidebar.

Panel UI
Recommended
Step-by-step visual guides using the panel sidebar, menus, and pages. Navigate with clicks.
Command Line
Advanced
Terminal commands using the panelica CLI binary. Automate with scripts.

You can switch between modes at any time from the sidebar toggle.

Panel Overview

Access, navigate, and understand the Panelica management interface.

Accessing the Panel

Panelica runs on HTTPS port 8443 by default. After installation, open your browser and navigate to:

https://your-server-ip:8443

The panel uses a self-signed SSL certificate initially. You can replace it with a valid certificate from Panel Settings → SSL. Login credentials are configured during the setup wizard.

The panel runs on its own isolated Nginx instance (nginx-panel) separate from customer websites. Panel access never interferes with hosted sites.

Dashboard

The Server Dashboard (Dashboard) provides a real-time overview of your entire server with live WebSocket updates.

Quick Stats Row — Four clickable cards at the top showing:

  • Total Domains — Number of hosted domains. Click to go to Domains page, or use the quick Create Domain button.
  • Active Databases — Number of MySQL databases. Click to go to Databases page.
  • Email Accounts — Number of email accounts across all domains.
  • Total Users — Number of panel users. Click to go to Users page, or use the quick Create User button.

System Resources — Three real-time gauges in the main content area:

  • CPU Gauge — Analog gauge (0-100%) with current load average. Shows connection status indicator (green = live, red = disconnected).
  • RAM Gauge — Analog gauge showing used/total GB. Toggleable history chart.
  • Disk Usage — Multi-segment progress bar with separate system and /home partition usage, total/used/free breakdown, and top disk user.

Network Traffic Chart — Interactive ApexCharts area graph showing real-time RX (download) and TX (upload) traffic with:

  • Time range selector: 1h, 6h, 24h
  • Unit selector: Auto, Mbps, Gbps, KBps, MBps, GBps
  • Live speed indicators for both RX and TX

Right Sidebar Widgets:

  • System & Security Alerts — Shows active issues: high CPU (>80%), high memory (>85%), critical disk (>90%), high server load, and security advisor findings. Displays "All Systems Operational" when no issues.
  • Quick Stats Card — Hostname, public IP (auto-detect), system uptime, CPU cores, total RAM, total disk, server time, load average (1/5/15 min).
  • Top Processes — Live table showing top processes sorted by CPU or RAM. Configurable count (5/10/15/20/25). Each row shows process name, CPU%, memory%, and owner. Includes a Kill button with confirmation dialog.

Navigation Structure

The panel sidebar organizes features into logical groups:

SectionContents
DashboardServer overview, resource gauges, network chart, alerts, top processes
DomainsAll Domains, Create Domain, DNS, SSL/TLS, Subdomains, Redirects, CloudFlare
UsersAll Users, Create User, Page Permissions
Service PlansAll Plans, Create Plan
WP ToolkitSites, Install, Plugins, Themes, Updates, Security, Staging
DockerDocker Manager (ROOT only)
MailAccounts, Forwarders, Autoresponders, Webmail, Mail Queue, Email Routing, Spam Filters, Mailing Lists, Settings
DatabasesMySQL Databases, Database Users, Remote MySQL
FilesFile Manager, FTP Accounts, Disk Usage
BackupCreate, Restore, Schedules, Snapshots, Activity Log, Migration, Remote Storage
Remote AccessSSH Access, Web Terminal
ToolsPanel Settings, PHP Settings, Cron Jobs, Package Manager, Server Info, License
SecurityAntivirus, Security Advisor, IP & Fail2ban, ModSecurity, AppArmor
MonitoringPanelica Monitor, Resource Usage, Process Manager, Log Management, Bandwidth Usage
DeveloperAPI Management, Webhooks
Some menu items are only visible based on your role (ROOT, ADMIN, RESELLER, USER) and license features. Items requiring a higher plan show a lock icon.

Setup Wizard

The Setup Wizard runs automatically on first access and configures essential server settings in 5 steps.

Wizard Steps

Step 1: Welcome

Introduction screen. Click Begin Setup to start.

Step 2: Administrator Account

Set up the root administrator credentials:

  • Email Address — Your admin email (e.g., [email protected])
  • Password — Minimum 8 characters. Use the Generate button for a secure 16-character password with uppercase, lowercase, numbers, and symbols. A strength indicator shows Weak / Medium / Strong.
  • Confirm Password — Must match the password above

Step 3: License Activation

Enter your license key in the format PNLC-XXXX-XXXX-XXXX. This step is optional — you can skip it and activate later from Tools → License.

Step 4: Panel Access Port

Configure the port for accessing the panel. Default is 8443. Must be between 1024 and 65535. If you don't want to change it, click Skip (Keep Current).

Step 5: Terms & Conditions

Read and accept the terms of service. You must scroll to the bottom of the terms text before the acceptance checkbox becomes active. Select your preferred language (20 languages available), then click Accept & Complete.

A language selector is available in the top-right corner of every wizard step. Panelica supports 20 languages including English, Turkish, Arabic, German, Spanish, French, Japanese, Korean, Chinese, and more.

License Activation

How to activate, manage, and monitor your Panelica license.

Activating Your License

Your license key is available in the customer portal after purchase.

Go to Tools → License
Click Activate License (or Change Key if a license is already active)
Enter your license key in the format PNLC-XXXX-XXXX-XXXX
Click Activate — the license binds to your server's hardware fingerprint automatically
$ panelica license activate PNLC-XXXX-XXXX-XXXX

License Status Page

The Tools → License page has several sections:

  • License Status Card — Shows your plan name, current status badge (Active, Expired, Suspended, Grace Period, Invalid), license key (masked), and expiration date. Actions: Change Key, Sync Now, Deactivate.
  • Sync Status Card — Shows the last sync time, connection status, failed attempt count, and any error messages. The panel syncs with the license server at a regular interval (default every 6 hours).
  • Heartbeat Monitor — An interactive chart showing the history of license sync responses. Displays success rate (%), average response time (ms), and countdown to the next heartbeat. Green markers = success, red markers = failure.
  • Features Section — Collapsible list of all enabled features grouped by category. Shows a badge with the total enabled feature count.
  • Resource Limits — Collapsible grid showing plan limits (e.g., max domains, max users, max databases). Unlimited values show an infinity icon.
  • Server Information — Displays the server hardware fingerprint and the central server URL.

Server Binding

The license is bound to your server's hardware fingerprint (CPU, disk, OS hash). If you move to a different server, you must deactivate the license on the old server first, then activate it on the new one.

Feature Enforcement

Your license plan determines what features are available:

  • Resource limits — Maximum domains, users, databases, email accounts
  • Feature access — SSH access, backup, Docker, WordPress staging, remote backup storage, AppArmor, monitoring, API access, etc.
  • Sidebar visibility — Menu items for features not included in your plan display a lock icon and are inaccessible

Grace Mode

If the license server is unreachable for more than 48 hours, the panel enters Grace Mode: all existing sites continue to work normally, but new operations (domain creation, user creation) are restricted until connectivity is restored. The license page shows a grace time countdown.

License Alerts

When a license issue is detected, a prominent red alert banner appears at the top of the license page with a description of the problem (Suspended, Expired, or Invalid) and quick action buttons to enter a new key or force a sync.

CLI Commands

$ panelica license status       # Show current license status
$ panelica license activate KEY  # Activate a license
$ panelica license deactivate    # Release license from this server
$ panelica license features      # List available features

User Management

Create, manage, and organize user accounts with role-based access control.

Users List

Navigate to Users → All Users. The page shows four statistic cards at the top: Total Users, Active Users, Suspended Users, and Resellers.

Two display modes are available:

  • Tree View (default) — Hierarchical view showing who created whom. ROOT → ADMINs → RESELLERs → USERs. Expand/collapse branches.
  • Table View — Traditional sortable table with columns: Username, Full Name, Email, Role, Plan, Status, System Username, Created Date.

Use the search box to filter by username, full name, or email. Filter by role (ROOT, ADMIN, RESELLER, USER).

Creating a User

Navigate to Users → Create User. The form has two columns:

Account Information (left column):

FieldDescriptionRequired
UsernameSystem username (lowercase, numbers, underscore only, max 32 chars). A character counter shows progress. This creates a Linux system user.Yes
EmailUser's email address for notifications and loginYes
PasswordMinimum 8 characters. Real-time strength meter shows Weak / Fair / Good / Strong with a color-coded progress bar. Requirements checklist (lowercase, uppercase, numbers, special chars) updates live.Yes
Confirm PasswordMust match the password aboveYes
Full NameDisplay name in the panelNo

User Settings:

FieldDescriptionRequired
RoleADMIN, RESELLER, or USER. Available options depend on your own role and license features. RESELLERs can only create USERs.Yes
IP AddressesMulti-select of available server IPs. Shows interface name and status.Yes

Service Plan (right column):

Select a hosting plan from the dropdown. The default plan is marked. Once selected, a collapsible Features panel shows the plan's quota summary: max domains, disk quota (GB), bandwidth (GB), max databases, email accounts, subdomains, FTP accounts, cron jobs, and feature toggles (SSH access level, FTP, MySQL, cron, SSL, backup).

When you create a user, Panelica automatically:

Creates a Linux system user with a unique UID/GID
Creates the home directory at /home/username/
Sets up Cgroups v2 resource limits based on the assigned plan
Creates PID and Mount namespaces for isolation
Configures SSH access level (none, jailed SFTP, or full SSH)
$ panelica users create --username=johndoe --email=[email protected] --password=SecurePass123 --role=user --plan=starter

Managing Users

Each user row in the list has action buttons:

  • Login as User — Impersonate the user to see their panel view (ROOT/ADMIN only). Opens their dashboard in a new session.
  • Edit — Opens the edit form to change username, email, role, plan, IP addresses
  • Suspend / Unsuspend — Temporarily disable a user (sites stay on disk but become unreachable). Toggle button changes based on current status.
  • Delete — Remove the user and all associated data (domains, databases, emails). Requires confirmation.

Bulk Operations

Select multiple users with checkboxes. A selection bar appears showing the count:

  • Bulk Suspend — Suspend all selected users at once
  • Bulk Unsuspend — Reactivate all selected users
  • Bulk Delete — Delete all selected users (requires typing confirmation text)
  • Delete All Users — ROOT only. Removes every user from the server (destructive, requires typed confirmation)

Roles & Permissions (RBAC)

Panelica uses a 4-level role hierarchy to control access to features and data.

Role Hierarchy

RoleLevelCan CreateDescription
ROOT0 (highest)ADMIN, RESELLER, USERFull system access. Server settings, service management, all users. One per server.
ADMIN1RESELLER, USERNear-full access. Can manage most settings except ROOT-only features (key rotation, server config).
RESELLER2USERCan create end-users within their own quota. Limited by their assigned plan. Ideal for hosting resellers.
USER3 (lowest)End-user. Manages their own domains, databases, email, and files. Cannot create other users.

Data Visibility Rules

  • ROOT sees everything on the server including system logs
  • ADMIN sees their own data + all users they created + system logs
  • RESELLER sees their own data + USERs they created (no system logs)
  • USER sees only their own data
Each user can only manage resources owned by users at a lower level in their hierarchy. A RESELLER cannot modify another RESELLER's users.

Page Permissions

Navigate to Hosting Management → Users → Page Permissions. This is a 2-panel enterprise layout for managing page-level and feature-level RBAC.

Header Controls:

ControlDescription
Role SelectorButton group to switch between ADMIN, RESELLER, and USER. ROOT has full access and cannot be edited.
SearchReal-time search across page names, codes, and route paths
Reset RoleReset permissions for the selected role to defaults (with confirmation)
Reset AllReset all roles' permissions to defaults (with confirmation)

Left Panel — Page Navigation Tree:

Pages are organized into 10 collapsible categories:

CategoryIconExamples
Dashboardri-dashboard-2-lineDashboard
Domainsri-global-lineDomain List, Create Domain, DNS, SSL, Subdomains, Redirects, CloudFlare
Usersri-user-lineUser List, Create User
Plansri-archive-linePlan List, Create Plan
Databasesri-database-2-lineMySQL, DB Users, Remote MySQL
Filesri-folder-lineFile Manager, FTP, Disk Usage
Backupri-save-lineBackup Manager, Snapshots, Schedules, Migration, Remote Storage
Toolsri-tools-linePanel Settings, PHP, Cron Jobs, Package Manager, Server Info
Securityri-shield-keyhole-lineAntivirus, WAF, Firewall, AppArmor, Advisor
Monitoringri-line-chart-linePanelica Monitor, Resource Usage, Processes, Logs, Bandwidth

Each category header shows a status dot: green = all pages allowed, red = all denied, yellow = mixed. Click a category to expand and see individual pages.

Each page row shows: status dot (allowed/denied), page name, and feature count badge (if the page has sub-features).

Right Panel — Permission Details:

Select a page from the left panel to see its details. The header shows the page name, route path, and a three-way access control:

StateButtonMeaning
AllowAllowExplicitly grant access to this page for the selected role
DenyDenyExplicitly deny access to this page for the selected role
InheritDefaultUse the role's default permission (shown as a sub-badge)

All changes auto-save immediately when you click a permission button — no save button needed.

Feature-Level Permissions

Below the page access control, the right panel shows granular feature permissions for the selected page. Features are grouped by category:

Feature GroupIconExample Features
Generalri-settings-3-lineview, edit, delete, suspend, unsuspend
Web Serverri-server-linemode switch, nginx config, apache config, vhost edit
PHP Settingsri-code-s-slash-lineversion change, resource limits, FPM settings, INI editor
SSLri-lock-lineview status, HTTPS settings, Let's Encrypt, custom upload, renew
DNSri-earth-lineview, create, edit, delete records, import/export zones
Subdomainsri-folder-3-lineview, create, edit, delete, suspend
ModSecurityri-shield-linetoggle, settings, rules, custom rules, IP blocking, headers
Cron Jobsri-time-lineview, create, edit, delete, execute, toggle, logs
Bulk Actionsri-stack-linebulk select, bulk execute, bulk enable/disable, bulk delete
Templatesri-file-copy-lineview templates, use templates
Execution Logsri-file-list-3-lineview logs, filter logs

Each feature has the same Allow / Deny / Inherit three-way toggle. Additional indicators:

  • Danger — Dangerous operations (delete, bulk actions, root-level, system-level). Restricted to ROOT by default.
  • Pro — Features that require a specific hosting plan to be available.

Feature Bulk Actions (per page):

  • Allow All — Grant access to all features on the selected page
  • Deny All — Deny access to all features on the selected page
  • Reset to Defaults — Revert all features to their default permissions

Stats Footer: At the bottom, a summary bar shows: total pages, total features, implemented features, and the currently selected role.

The permission system covers 500+ granular features across all panel pages, giving ROOT administrators complete control over what each role can see and do.

Hosting Plans

Plans define resource limits, feature access, and quotas for users.

What is a Plan?

A hosting plan is a template that defines what resources and features a user gets. When you assign a plan to a user, all limits from that plan are enforced automatically via Cgroups v2, PHP-FPM pools, and the panel's quota system.

Creating a Plan

Navigate to Service Plans → Create Plan and configure:

CategorySettings
BasicName, description, status (active/inactive), display order, default plan toggle
Resource LimitsDisk quota (MB), monthly bandwidth (MB), RAM limit, CPU limit (%), I/O read/write limits, max process count
DomainsMax domains, max subdomains
EmailMax email accounts
DatabasesMax databases
FTPMax FTP accounts, FTP access enabled/disabled
CronMax cron jobs, cron jobs enabled/disabled
PHPPHP memory limit (MB), max execution time (seconds), max PHP-FPM children
SSHSSH access enabled/disabled, access level: none / jailed (SFTP only) / full (SSH + SFTP)
SecuritySSL enabled/disabled, ModSecurity WAF enabled/disabled
BackupBackup enabled/disabled, max server snapshots, max snapshots per domain, max snapshot storage (GB)
Quota Modemonitor (soft limit, warnings only) or strict (hard limit, operations blocked)
Use value 0 or -1 for unlimited. For example, max_domains: 0 means unlimited domains.

Plan Templates

Panelica provides predefined plan templates to get started quickly:

TemplateDiskBandwidthDomainsEmailsDatabases
Basic10 GB100 GB152
Professional50 GB500 GB55010
Business100 GB1000 GB1010020
EnterpriseUnlimitedUnlimitedUnlimitedUnlimitedUnlimited

Assigning Plans to Users

Plans are assigned during user creation from the Service Plan dropdown. The default plan is marked with a badge. To change a user's plan later, edit the user from Users → All Users → Edit and select a new plan. Resource limits (Cgroups, PHP-FPM pools) update immediately.

Quota Enforcement

Quotas are enforced at multiple levels:

  • Cgroups v2 — CPU, RAM, I/O, and process limits at the kernel level
  • PHP-FPMmemory_limit, max_children, max_execution_time per pool
  • Panel Logic — Domain/database/email count checks before creation
  • Disk Quota — Filesystem quota (monitor or strict mode)

Domain Management

Add, configure, and manage domains on your server.

Domain List

Navigate to Hosting Management → Domains to see all domains on the server. The page title shows All Domains with the total count.

Table columns:

ColumnDescriptionNotes
#Row number
DomainDomain name with status indicator iconSortable (alphabetic)
OwnerUsername badge of the domain owner
PlanHosting plan assigned to the user
PHP VersionCurrent PHP version (inline dropdown for quick change)See Quick PHP Change
Web ServerCurrent mode: Nginx + Apache or Nginx OnlyInline dropdown for quick change
Disk UsageDisk space used by this domainSortable (largest first)
BandwidthMonthly bandwidth consumptionSortable (highest first)
StatusStatus badge: active, suspended, quota_exceeded, pendingMay also show a maintenance badge
ActionsAction buttons (see below)

Controls:

  • Search — Real-time search box that filters domains by name
  • Show per page — Choose 10, 20, 30, 50, or 100 results per page (default: 30)
  • Sort — Click column headers (Domain, Disk Usage, Bandwidth) to toggle sort direction
  • Add Domain button — Opens the domain creation form

Action buttons per domain:

ButtonIconAction
Edit SettingsOpens the domain edit page with all settings
Visit SiteOpens https://domain in a new tab
PreviewOpens a server-IP-based preview URL (useful before DNS propagation)
PHPinfoOpens https://domain/phpinfo.php in a new tab
SuspendSuspends the domain (sites become unavailable)
UnsuspendReactivates a suspended domain
DeletePermanently removes the domain and all its data
Click anywhere on a table row to quickly open the domain edit page. Rows with exceeded quotas appear with a faded red background.

Quick PHP & Web Server Change

You can change a domain's PHP version or web server mode directly from the domain list without opening the edit page:

Find the domain in the list and click the PHP version dropdown in the PHP column
Select the desired version (PHP 8.1, 8.2, 8.3, or 8.4) from the dropdown menu
The PHP-FPM pool is recreated automatically — a spinner shows while updating

The same inline dropdown is available for the Web Server column, letting you switch between Nginx + Apache (reverse proxy) and Nginx Only modes instantly.

If PHP-FPM for a domain is stopped, a warning icon appears next to the version number. Click the dropdown to restart it by selecting a version.

Bulk Operations (ROOT Only)

ROOT users see a checkbox column on the left side of the table. Select multiple domains using the checkboxes (or the "select all" checkbox in the header), then use the red action bar that appears at the top:

  • Delete Selected — Permanently removes all selected domains
  • Clear Selection — Deselects all domains

Creating a Domain

Navigate to Hosting Management → Domains → Add Domain and configure:

OptionDescriptionDefault
Domain NameThe domain to host (e.g., example.com)
OwnerAssign to a user account (ROOT/ADMIN can select any user)Current user
Web Server ModeNginx + Apache (reverse proxy) or Nginx OnlyNginx + Apache
PHP Version8.1, 8.2, 8.3, or 8.48.3
Document RootWeb root relative to domain folderpublic_html
SSLAuto (Let's Encrypt), custom certificate, or noneAuto
ModSecurityEnable/disable WAF for this domainEnabled

What happens when you create a domain:

Directory structure created: /home/username/example.com/public_html/
Nginx and/or Apache virtual host configuration generated
BIND DNS zone created with A, NS, MX, SOA records
Per-domain PHP-FPM pool configured (isolated socket per domain)
Let's Encrypt SSL certificate requested (if auto SSL enabled)
File permissions and ownership set correctly
# CLI equivalent
$ panelica domains create --domain=example.com --user=johndoe --php=8.3 --ssl=auto

Directory Structure

# Domain directory layout
/home/username/example.com/
├── public_html/        # Document root (web accessible)
├── logs/               # Access and error logs
├── tmp/                # PHP temp directory
├── .system/            # System configs (vhost, PHP pool, etc.)
│   └── conf/
│       ├── nginx.conf
│       ├── apache.conf
│       └── php-fpm.conf
└── backup/             # Domain backups

Edit Domain (7 Tabs)

Click on any domain row or the Edit Settings () button to open the domain edit page. The edit page has 7 tabs:

TabIconDescription
GeneralDomain info, maintenance mode, cron jobs, quick actions
Web ServerNginx/Apache mode, custom configs, vhost editors
PHP SettingsPHP version, resource limits, FPM pool, php.ini editor
SSLCertificate status, HTTPS settings, Let's Encrypt, custom cert
DNSDNS zone records (A, AAAA, CNAME, MX, TXT, NS)
SubdomainsSubdomain list, create, redirect
SecurityModSecurity WAF, rule sets, IP blocking, headers (Apache mode only)

General Tab

Domain Information:

FieldDescription
IP AddressAssign a server IP to the domain (dropdown selector)
Document RootWeb root path (must be within user home directory)

Maintenance Mode: Toggle maintenance mode on/off. When enabled, visitors see a maintenance page. Status shown as Maintenance or Live.

Domain Cron Jobs: View, create, edit, and delete cron jobs associated with this domain. Shows plan-based limits. Each job displays command, schedule, and execution logs.

Quick Actions:

  • Visit Site — Open the domain in a new browser tab
  • Clear Cache — Clear Nginx/Apache cache for this domain
  • Restart Services — Restart PHP-FPM and web server for this domain
  • Suspend Domain — Temporarily disable the domain
  • Delete Domain — Permanently remove with confirmation modal

Web Server Tab

Web Server Mode: Switch between two modes:

ModeDescription
Nginx OnlyFaster performance, serves all content directly via Nginx
Nginx + ApacheNginx as reverse proxy, Apache as backend. Required for ModSecurity WAF and .htaccess support

Nginx Custom Configuration: Add custom Nginx directives (e.g., rewrite rules, proxy settings) via a code editor. Saved as nginx_custom.conf.

Apache Custom Configuration: Add custom Apache directives (only visible in Nginx + Apache mode). Saved as apache_custom.conf.

Vhost Editors (ROOT only): View and edit the raw Nginx vhost and Apache vhost configuration files directly. Changes take effect after save.

Switching web server mode regenerates all virtual host configurations. A confirmation modal is shown before applying.

PHP Settings Tab

PHP Version Selector: Choose from available PHP versions (e.g., 8.1, 8.2, 8.3, 8.4). The PHP-FPM pool is recreated automatically. A View phpinfo.php button opens the PHP info page.

Resource Limits:

SettingDescription
Max Execution TimeMaximum script execution time in seconds
Memory LimitMaximum memory per PHP process (MB/GB)
Upload Max SizeMaximum upload file size (MB/GB)
Post Max SizeMaximum POST data size (MB/GB)

PHP-FPM Pool Settings:

SettingDescription
Pool NamePool identifier (read-only)
Min Spare ServersMinimum idle worker processes
Max Spare ServersMaximum idle worker processes
Max ChildrenMaximum concurrent PHP processes
Request Terminate TimeoutTimeout in seconds to kill a slow request

PHP.ini Editor: Add custom PHP directives in key-value format. Directives are applied to this domain's PHP-FPM pool only.

SSL Tab

Certificate Status: Shows current certificate information — issuer (Let's Encrypt / Custom / Self-Signed), issued date, expiry date, days remaining, subject, and SANs (Subject Alternative Names).

HTTPS Settings:

SettingDescription
Force HTTPSRedirect all HTTP requests to HTTPS
HSTS EnabledEnable HTTP Strict Transport Security header
HSTS Max AgeHSTS cache duration in seconds
Auto RenewAutomatically renew certificate before expiry

Let's Encrypt: Renew or Reissue the certificate with one click. Shows expiry countdown.

Custom Certificate Upload: Upload your own certificate, private key, and CA bundle files.

DNS Tab

Manage DNS zone records for this domain. Records table columns:

ColumnDescription
TypeA AAAA CNAME MX TXT NS
NameRecord name (@ for root domain)
ContentRecord value (IP address, hostname, text)
TTLTime to live in seconds (default: 3600)
PriorityPriority value (MX records only)
StatusActive / Disabled
ActionsEdit, Delete

Click Add Record to create a new DNS record. Select the record type, enter the name, content, TTL, and priority (for MX).

Subdomains Tab

Manage subdomains within the edit domain page. Each subdomain shows: full name, document root, status, and creation date.

Create Subdomain: Enter the subdomain name (prefix), optionally specify a document root or redirect URL. The full path is calculated automatically (e.g., /home/user/example.com/subdomain/).

Actions: Edit (redirect URL), Visit (open in browser), Suspend/Activate, Delete.

Security Tab (Apache Mode Only)

This tab is only available when the domain uses Nginx + Apache web server mode. It is hidden in Nginx Only mode.

ModSecurity WAF: Enable or disable the Web Application Firewall for this domain. When enabled:

SettingDescription
ModeDetectionOnly (log only) or On (active protection — blocks attacks)
Paranoia LevelLevel 1 (low) to Level 4 (high) — higher levels catch more but may cause false positives
Inbound ThresholdAnomaly score threshold for incoming requests (1-100)
Outbound ThresholdAnomaly score threshold for outgoing responses (1-100)
Audit LogEnable domain-specific audit logging

Rule Sets: Toggle individual security rule sets on/off:

  • OWASP Core Rule Set (CRS) — 150 rules, core web attack protection
  • SQL Injection Protection — 42 rules
  • XSS Protection — 38 rules
  • WordPress Security Rules — 28 rules
  • File Upload Restrictions — 15 rules
  • Directory Traversal Protection — 12 rules

Custom Rules: Add custom ModSecurity rules in the code editor (expert users only). Syntax errors can break web access.

IP Access Control: Block specific IP addresses from accessing this domain. Add IPs one by one; each blocked IP appears as a badge with a remove button.

HTTP Security Headers:

HeaderValueDescription
X-Frame-OptionsDENY / SAMEORIGINPrevents clickjacking attacks
X-Content-Type-OptionsnosniffPrevents MIME type sniffing
X-XSS-Protection1; mode=blockBrowser XSS filter
HSTSToggleHTTP Strict Transport Security

Subdomains

Create and manage subdomains under your existing domains.

Page Layout

Navigate to Hosting Management → Subdomains. The page uses a two-panel layout:

  • Left panel (25%) — Domain list with search. Click a domain to select it. A badge shows the subdomain count for each domain.
  • Right panel (75%) — Subdomain management area for the selected domain.

Use the search box at the top of the left panel to filter domains by name. The domain count is shown below the search box. A refresh button in the panel header reloads the domain list.

Subdomain Table

After selecting a domain, the right panel displays a table with the following columns:

ColumnDescription
SubdomainFull subdomain name (e.g., blog.example.com) with the short name below
PHP VersionPHP version badge (e.g., PHP 8.3)
SSLGreen badge with provider name if enabled; grey badge if disabled
Document RootFilesystem path in monospace (truncated if longer than 30 characters)
Statusactive or suspended
ActionsVisit (opens subdomain in new tab), Copy Name (copies to clipboard), Delete

A summary footer shows the total number of subdomains, active count, and SSL-enabled count.

Creating a Subdomain

Click the Create button in the right panel toolbar. A modal dialog opens with the following fields:

FieldTypeDescription
Subdomain Name *TextEnter the subdomain prefix (e.g., blog). The parent domain is shown as a suffix: .example.com
Document RootTextOptional custom path. The full path preview updates automatically: /home/user/example.com/subdomains/blog/...
Redirect URLTextOptional — if set, the subdomain redirects to this URL instead of serving files
Subdomains inherit PHP version, SSL, and web server settings from the parent domain. You can change these after creation from the subdomain edit page.
$ panelica subdomains create --domain=example.com --subdomain=blog

Document root: /home/username/example.com/subdomains/blog/public_html/

DNS Management (BIND)

Manage DNS zones and records with the integrated BIND DNS server.

Page Layout

Navigate to Hosting Management → DNS. The page uses a two-panel layout:

  • Left panel (25%) — Searchable domain list. Click a domain to load its DNS zone.
  • Right panel (75%) — DNS record table with search, inline editing, and an Add Record drawer.

The zone header shows the zone name and provides Validate and Reload action buttons.

Automatic Zone Creation

When you create a domain, Panelica automatically creates a BIND DNS zone with:

  • SOA Record — Start of Authority with auto-incrementing serial number
  • NS Records — Points to your configured nameservers (ns1/ns2)
  • A Record — Points to the server IP
  • MX Record — Mail exchange (if email is enabled)

Record Table

The record table displays all DNS records for the selected domain with these columns:

ColumnDescriptionEditable
NameRecord hostname. @ shows a "root" badge.Yes (inline)
TypeColor-coded badge: A, AAAA, CNAME, MX, TXT, NS, SRV, CAANo
ValueRecord content in monospace (truncated to 50 chars). Click the copy icon to copy the full value.Yes (inline)
TTLTime to live in secondsYes (inline)
PriorityPriority number for MX and SRV records; dash for other typesYes (MX/SRV only)
Statusactive or disabledNo
ActionsEdit (switches row to inline edit mode) and Delete

A search bar above the table filters records by name, type, or value in real-time.

Click the Edit button on a record row to switch it to inline edit mode. The Name, Value, TTL, and Priority fields become editable inputs. Click the green checkmark to save or the X to cancel.

Adding a Record

Click the Add Record button to open a slide-in form from the right side. Fill in the fields:

FieldTypeDescription
Record Type *SelectChoose from A, AAAA, CNAME, MX, TXT, NS, SRV, CAA. A description of the selected type appears below.
Name *TextHostname (e.g., @ for root, www, mail)
Value *Text / TextareaRecord content. Placeholder changes based on type (e.g., 192.168.1.1 for A records, v=spf1 ... for TXT). TXT records use a multi-line textarea.
TTLNumberTime to live in seconds (60–86400)
Priority *NumberOnly for MX and SRV records (0–65535)
WeightNumberOnly for SRV records (0–65535)
PortNumberOnly for SRV records (1–65535)
$ panelica dns list --domain=example.com
$ panelica dns add --domain=example.com --type=A --name=@ --value=1.2.3.4 --ttl=3600
$ panelica dns delete --domain=example.com --id=5

Quick Templates

Below the Add Record form, Panelica provides quick templates that pre-fill common configurations:

TemplatePre-fills
Root A RecordType: A, Name: @, TTL: 3600
WWW A RecordType: A, Name: www, TTL: 3600
Mail Server (MX)Type: MX, Name: @, Value: mail., Priority: 10, TTL: 3600

Click a template button to auto-fill the form, then adjust the value field and submit.

Zone files are stored at /opt/panelica/var/dns/zones/. Changes take effect immediately after BIND reload.

SSL Certificates

Automated SSL via Let's Encrypt or custom certificate uploads.

Page Layout

Navigate to Hosting Management → SSL Certificates. The page uses a two-panel layout:

  • Left panel (25%) — Searchable domain list. Each domain shows an SSL status indicator (green badge with provider name if enabled, grey if disabled).
  • Right panel (75%) — SSL certificate details, HTTPS settings, and upload/renew actions for the selected domain.

Certificate Status

After selecting a domain, the right panel shows the certificate status card with:

  • Certificate validity — Valid/Invalid indicator
  • Issuer — Certificate authority name (e.g., Let's Encrypt, Self-Signed)
  • Expiry date — When the certificate expires
  • Days until expiry — Color-coded countdown (green = safe, yellow = expiring soon, red = expired)
  • SAN list — Subject Alternative Names covered by the certificate
  • Provider — Let's Encrypt, Self-Signed, or Custom

Let's Encrypt (Auto SSL)

When SSL is set to "Auto" during domain creation, Panelica automatically requests a Let's Encrypt certificate. You can also issue or renew manually:

For domains with an existing Let's Encrypt certificate, the panel shows a status section with two action buttons:

  • Renew Certificate — Renews the current certificate before it expires
  • Reissue Certificate — Requests a fresh certificate (useful if domain names changed)
$ panelica ssl issue --domain=example.com
$ panelica ssl renew --domain=example.com
$ panelica ssl status --domain=example.com

Custom Certificate Upload

To upload your own certificate, use the upload form in the right panel:

FieldAccepted FormatsRequired
Certificate File.crt, .pem, .cerYes
Private Key File.key, .pemYes
CA Bundle File.crt, .pemNo (recommended)

Click Upload to install the certificate. Panelica validates the certificate and key match before applying.

To upload your own certificate, provide the certificate, private key, and optionally the CA bundle file.

HTTPS Settings

Below the certificate details, configure HTTPS behavior with these toggles:

SettingDescriptionDefault
SSL EnabledEnable or disable SSL for this domainOn
Force HTTPS301 redirect from HTTP to HTTPS at the Nginx level (zero PHP overhead)Off
HSTS EnabledHTTP Strict Transport Security — tells browsers to always use HTTPSOff
HSTS Max AgeDuration in seconds browsers should remember the HSTS policy31536000 (1 year)
Auto RenewAutomatically renew Let's Encrypt certificates before they expireOn
Enabling HSTS is recommended for production sites. Once enabled, browsers will refuse to connect via plain HTTP for the configured max-age duration.

URL Redirects

Create and manage URL redirects per domain with support for multiple redirect types and match patterns.

Page Layout

Navigate to Hosting Management → Redirects. The page uses a two-panel layout:

  • Left panel (25%) — Searchable domain list. Each domain shows a badge with the total and active redirect counts.
  • Right panel (75%) — Redirect table and management for the selected domain.

Redirect Table

After selecting a domain, the right panel shows all configured redirects in a table:

ColumnDescription
Source PathThe URL path that triggers the redirect. Description text (if any) appears below in smaller text.
Destination URLThe target URL in monospace (truncated if long)
TypeHTTP status code badge: 301 (permanent), 302 (temporary), 307 (temp, preserve method), 308 (perm, preserve method)
MatchPattern matching mode: exact, wildcard, regex
Statusactive or disabled
ActionsToggle enable/disable, Edit, Delete

Creating a Redirect

Click the Add Redirect button to open a modal dialog with these fields:

FieldTypeDescription
Source Path *TextThe URL path to redirect from (e.g., /old-page)
Destination URL *URLThe full URL to redirect to (e.g., https://example.com/new-page)
Redirect Type *Select301 (Permanent), 302 (Temporary), 307 (Temporary, preserve method), 308 (Permanent, preserve method)
Match Type *SelectExact, Wildcard, or Regex
DescriptionTextareaOptional note about the redirect purpose
Enable ImmediatelyCheckboxWhether to activate the redirect right away (checked by default)

The same modal is used for editing existing redirects — click the Edit button in the Actions column to modify a redirect.

$ panelica redirects create --domain=example.com --source=/old-page --target=https://example.com/new-page --type=301
$ panelica redirects list --domain=example.com
$ panelica redirects delete --domain=example.com --id=5

Redirect Types

CodeTypeUse Case
301Permanent RedirectPage permanently moved. Search engines transfer SEO value to the new URL.
302Temporary Redirect (Found)Page temporarily moved. Search engines keep indexing the original URL.
307Temporary RedirectSame as 302 but preserves the HTTP method (POST stays POST).
308Permanent RedirectSame as 301 but preserves the HTTP method.

Match Types

MatchDescriptionExample
ExactMatches the exact path only/about matches only /about
WildcardMatches paths with wildcard patterns/blog/* matches /blog/post-1, /blog/post-2, etc.
RegexRegular expression pattern matching^/product/(\d+)$ matches /product/123
Use the Toggle button in the Actions column to quickly enable or disable a redirect without deleting it. Disabled redirects remain in the list but have no effect.
Redirects are applied at the Nginx level for maximum performance. They execute before PHP processes the request.

PHP Management

Multiple PHP versions, per-domain configuration, and PHP-FPM pool management.

PHP Settings Overview

Navigate to Tools → PHP Settings. The page shows four statistics cards at the top:

CardDescription
Total VersionsNumber of installed PHP versions
Active VersionsNumber of PHP versions currently running
Total DomainsTotal domains across all PHP versions
Default VersionThe server-wide default PHP version

Below the cards, a control bar lets you change the default PHP version from a dropdown and access the Bulk Change button. The main content area has three tabs: PHP Versions, Extensions, and Configuration.

PHP configuration follows a 3-level hierarchy: Server (global) → Plan (per plan) → Domain (per domain). Each level overrides the one above it.

PHP Versions Tab

Panelica supports multiple PHP versions running simultaneously:

VersionStatusPath
PHP 8.1Supported/opt/panelica/services/php/8.1/
PHP 8.2Supported/opt/panelica/services/php/8.2/
PHP 8.3Default/opt/panelica/services/php/8.3/
PHP 8.4Supported/opt/panelica/services/php/8.4/

The PHP Versions tab shows a table for each installed version with these columns:

ColumnDescription
VersionPHP version number with the default version marked with a badge
StatusRunning or Stopped
Sites UsingClickable link showing the domain count — opens a modal listing all domains on this version
Domain DistributionProgress bar showing the percentage of domains using this version
Memory LimitCurrent memory_limit setting
Max Exec TimeCurrent max_execution_time setting
ActionsPHPInfo, Edit Config, Manage Extensions, Reload FPM, Restart FPM

Action buttons per version:

  • PHPInfo — Opens /tools/phpinfo/{version}/ in a new tab showing full PHP configuration
  • Edit Configuration — Opens a modal with Form Editor and Text Editor modes to modify php.ini settings
  • Manage Extensions — Switches to the Extensions tab with this version pre-selected
  • Reload FPM — Gracefully reloads the PHP-FPM service (no downtime)
  • Restart FPM — Full restart of the PHP-FPM service

Extensions Tab

Select a PHP version from the dropdown to view and manage its extensions. The extensions table shows:

ColumnDescription
Extension NameExtension name in monospace (e.g., redis, imagick)
StatusGreen badge (enabled) or grey badge (disabled)
File SizeExtension file size in KB
ActionToggle button to enable or disable the extension

To install a new extension not in the list, click the Install Extension button. This opens a terminal interface where you can install extensions via PECL.

After enabling or disabling an extension, you must Reload PHP-FPM from the PHP Versions tab for changes to take effect.
$ panelica php extensions --version=8.3
$ panelica php install-extension --version=8.3 --extension=redis

Configuration Tab

Select a PHP version to view and edit its server-wide php.ini configuration. The page shows 4 key settings at a glance (memory_limit, max_execution_time, upload_max_filesize, post_max_size) and the total settings count with last-modified date.

Click Edit Configuration to open the config editor modal with two modes:

  • Form Editor — Each modifiable setting is shown as a labeled input field with its current value and category badge
  • Text Editor — Full text editor with monospace font for advanced editing. Non-modifiable settings are ignored.

Bulk PHP Version Change

Click the Bulk Change button in the control bar to migrate multiple domains between PHP versions at once:

Select the Source Version (shows domain count for each version)
Select the Target Version
The domains using the source version are listed with checkboxes — use Select All or pick individual domains
Click Start Migration to begin. A results table appears showing the outcome for each domain (succeeded, failed, or warning)
$ panelica php switch --domain=example.com --version=8.4

PHP-FPM Pool Architecture

Each domain gets its own isolated PHP-FPM pool:

# Per-user PHP-FPM structure
/opt/panelica/etc/php-fpm-users/{username}/
├── php-fpm.conf               # Main config
└── pool.d/
    ├── {username}_{domain1}.conf  # Pool for domain1
    └── {username}_{domain2}.conf  # Pool for domain2

# Each pool runs as the system user
# Socket: /opt/panelica/var/run/php-{version}-{username}_{domain}.sock

Pool settings from the hosting plan: pm = ondemand, max 10 children, 10s idle timeout, 500 max requests per child.

Disabled Functions

For security, certain PHP functions are disabled by default in each PHP-FPM pool:

# Default disabled functions (per-domain pool)
exec, passthru, shell_exec, system, proc_open, popen,
curl_exec, curl_multi_exec, parse_ini_file, show_source

ROOT/ADMIN can enable specific functions per domain from Domains → [domain] → PHP → Disabled Functions.

Database Management

Create and manage MySQL databases with web-based tools and phpMyAdmin integration.

MySQL Overview

Navigate to Databases → MySQL Databases. The page displays four statistics cards at the top:

CardDescription
Total DatabasesNumber of MySQL databases on the server
Total TablesCombined table count across all databases
ConnectionsActive connections / Maximum connections
Total SizeCombined disk usage of all databases

Below the cards, a phpMyAdmin button opens the web-based database management tool with single sign-on (SSO). The MySQL server status and uptime are also displayed.

Database Table

The main table lists all MySQL databases with these columns:

ColumnDescription
Database NameName with charset/collation badge below
DomainAssociated domain badge, or "System" for internal databases
UserDatabase owner username in monospace
SizeDatabase size (e.g., 256.50 MB)
TablesNumber of tables
Statusactive, maintenance, or error
ConnectionsActive/Max connections with a progress bar
ActionsAction buttons (see below)

Controls: A domain filter dropdown (All Domains, System Only, or specific domains), a search box, and the Create New MySQL Database button.

Action buttons per database:

  • Connection Info — Opens a wizard showing connection strings for WordPress, Laravel, Django, Node.js, and PHP PDO with copy/download options
  • Backup — Creates and downloads a database backup (.sql dump)
  • Optimize — Optimizes all tables in the database (reclaims unused space)
  • Repair — Repairs corrupted tables in the database
  • phpMyAdmin — Opens phpMyAdmin in a new tab with SSO for this database
  • Delete — Permanently deletes the database (destructive confirmation required)

Creating a MySQL Database

Click Create New MySQL Database to open the creation modal:

FieldTypeDescription
Domain *SelectThe domain this database belongs to. Database name prefix auto-updates based on selection.
Database Name *TextCreated as {domain_prefix}_{name}
Database User *TextUsername for accessing this database
Password *PasswordPassword for the database user

Charset is automatically set to utf8mb4_unicode_ci.

$ panelica db create --name=myapp --user=johndoe
$ panelica db create-user --database=johndoe_myapp --dbuser=johndoe_admin --password=SecurePass

Connection String Wizard

Click the Connection Info button on any database to open the connection wizard. It generates ready-to-use configuration code for 5 frameworks:

  • WordPresswp-config.php database constants
  • Laravel.env file database variables
  • Djangosettings.py DATABASES dictionary
  • Node.js — mysql2 connection configuration
  • PHP PDO — PDO connection code

Each code block includes Copy to Clipboard and Download File buttons.

Server Information

A side panel on the right shows MySQL server details: version, type, platform, uptime, socket path, port, max connections, active connections, data directory, default charset, and total database/table counts.

Database Users

Manage MySQL database users, privileges, and access control independently from databases.

Users Overview

Navigate to Databases → Database Users. Four statistics cards are shown at the top:

CardDescription
Total UsersNumber of MySQL users
Active UsersUsers with active status
Total PrivilegesSum of all granted privileges across users
Total DatabasesNumber of databases available for assignment

Users Table

The main table displays all MySQL users with a search box and user/database count badges:

ColumnDescription
UserMySQL username
HostConnection host pattern in monospace (e.g., localhost, %)
DatabasesNumber of databases assigned to this user (badge)
PrivilegesTotal privilege count (badge)
StatusActive or Disabled
CreatedCreation date
ActionsManage Privileges, Change Password, Toggle Status, Delete

Creating a Database User

Click Create MySQL User to open the creation modal:

FieldTypeDescription
Username *TextMySQL username (e.g., myapp_user)
Host *Selectlocalhost, Any Host (%), or custom subnet (e.g., 192.168.1.%)
Password *PasswordMust meet minimum strength requirements
Confirm Password *PasswordMust match the password field
Databases *Multi-selectHold Ctrl/Cmd to select multiple databases
Max ConnectionsNumberMaximum connections for this user (0 = unlimited)
$ panelica db create-user --dbuser=johndoe_admin --password=SecurePass123
$ panelica db list-users
$ panelica db delete-user --dbuser=johndoe_admin

Managing Privileges

Click the Manage Privileges button to open the privilege editor. Four quick-apply templates are available:

TemplatePrivileges Granted
Read OnlySELECT
Read/WriteSELECT, INSERT, UPDATE, DELETE
Full (no admin)All data + structure privileges, no admin
All PrivilegesEvery available privilege

Individual privileges are organized in three categories:

  • Data — SELECT, INSERT, UPDATE, DELETE
  • Structure — CREATE, ALTER, DROP, INDEX, CREATE TEMPORARY TABLES, LOCK TABLES
  • Administration — EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER

Changing Passwords

Click the Change Password button next to a user. The modal provides an Auto-generate Strong Password button that creates a 16-character password with special characters. A password strength indicator (Weak/Medium/Strong) with a color-coded progress bar helps you assess password quality.

Remote MySQL

Allow external applications and servers to connect to your MySQL databases remotely.

Remote Access Overview

Navigate to Databases → Remote MySQL. Four statistics cards are shown at the top:

CardDescription
Total HostsNumber of remote access entries
Active HostsHosts currently allowed to connect
Disabled HostsHosts with disabled status
Recent (7 days)Hosts added in the last 7 days

Remote Hosts Table

The main table lists all configured remote access hosts:

ColumnDescription
Host/IP AddressIP address or hostname pattern in monospace
DescriptionUser-provided description of the host
AddedDate the host was added
Statusactive or disabled
ActionsToggle (enable/disable), Edit, Delete

Adding a Remote Host

Click Add Host to open the creation modal:

FieldTypeDescription
Host/IP Address *TextIP address, hostname, or wildcard pattern
DescriptionTextOptional description of what this host is for

Wildcard examples:

  • 192.168.1.100 — Specific IP address
  • 192.168.1.% — All IPs in a subnet
  • %.example.com — All subdomains of a hostname
  • % — Any host (not recommended for security)
$ panelica db remote-add --ip=203.0.113.10 --database=johndoe_myapp
$ panelica db remote-list
$ panelica db remote-remove --ip=203.0.113.10
Be restrictive with remote access. The firewall rule and MySQL GRANT statement are configured automatically. Only add trusted hosts and avoid using % (any IP) in production.

Connection Details

Use the following settings to connect from your remote application:

# Remote MySQL connection
Host: your-server-ip
Port: 3306
Database: username_dbname
User: username_dbuser
Password: your-password

Email System

Postfix + Dovecot powered email with full authentication, spam filtering, and queue management.

Email Accounts

Navigate to Mail → Email Accounts to manage email addresses on your domains.

Creating an email account:

Click Create Account to open the creation modal with the following fields:

FieldTypeDescription
Username *TextThe local part of the email address (e.g., info)
EmailDisplayFull email address preview (username@domain)
Domain *SelectThe domain for this email account
Password *PasswordAccount password
QuotaNumber (GB)Maximum mailbox storage size
IMAP EnabledToggleAllow IMAP access (email sync across devices)
POP3 EnabledToggleAllow POP3 access (email download)
SMTP EnabledToggleAllow sending emails via SMTP
Spam FilterToggleEnable spam filtering for this account
Virus CheckToggleEnable antivirus scanning for incoming mail
AutoresponderToggleEnable automatic reply
$ panelica email create --account=[email protected] --password=SecurePass --quota=1024

Mail client configuration: Click the Configuration button on any account to view IMAP/POP3/SMTP server settings, ports, and encryption details for setting up email clients (Outlook, Thunderbird, etc.).

Email Forwarders

Navigate to Mail → Email Forwarders to route emails from one address to multiple destinations.

Click Create Forwarder to open the creation modal:

FieldTypeDescription
Domain *SelectSelect the domain for the source email
Source Email *TextThe email address that will be forwarded
Destination Emails *Multiple text fieldsOne or more destination addresses. Use the add/remove buttons to manage multiple destinations.
Keep CopyCheckboxKeep a copy of forwarded messages in the original mailbox
EnabledToggleWhether the forwarder is active
$ panelica email forwarder create --source=[email protected] --dest=[email protected] --keep-copy
$ panelica email forwarder list
$ panelica email forwarder delete --id=5

Autoresponders

Navigate to Mail → Autoresponders to set up automatic out-of-office or vacation replies.

Click Create Autoresponder to configure:

FieldTypeDescription
Email Account *SelectThe email account to add the autoresponder to
Subject *TextSubject line of the automatic reply
Message *TextareaBody of the automatic reply
Message TypeRadioPlain Text or HTML
Start DateDateOptional — when to start sending auto-replies
End DateDateOptional — when to stop (vacation mode)
Respond Once Per SenderCheckboxOnly reply once to each unique sender (default: on)
Response FrequencyNumber (hours)Minimum hours between replies to the same sender (default: 24)
Respond to SpamCheckboxWhether to reply to messages flagged as spam (default: off)
Respond to Mailing ListsCheckboxWhether to reply to mailing list messages (default: off)
$ panelica email autoresponder create --account=[email protected] --subject="Out of Office" --message="I am currently away."
$ panelica email autoresponder list

Spam Filters

Configure spam protection at Mail → Spam Filters:

  • Account Settings — Enable/disable spam filtering per account with adjustable threshold (1-10 score)
  • Blacklist — Block specific emails, domains, or wildcard patterns (e.g., *@spam-domain.com)
  • Whitelist — Always allow emails from trusted senders/domains

Threshold guide: 1-3 = Aggressive, 4-5 = Balanced (recommended), 6-8 = Lenient, 9+ = Very lenient.

$ panelica email spam blacklist-add --pattern=*@spam-domain.com
$ panelica email spam whitelist-add --pattern=[email protected]
$ panelica email spam set-threshold --account=[email protected] --score=5

Mailing Lists

Create distribution lists at Mail → Mailing Lists:

Click Create Mailing List
Enter list name, description, and select domain
Configure options: public subscription, require confirmation, moderation, archive
Add members individually or in bulk
$ panelica email mailing-list create --name=team --domain=example.com
$ panelica email mailing-list add-member --list=[email protected] --email=[email protected]
$ panelica email mailing-list list

Email Routing & MX Records

View and verify email routing configuration at Mail → Email Routing:

  • MX Records tab — Shows all MX records across domains with priority and host. Use the Verify button to check DNS propagation via Google DNS.
  • Forwarders tab — Quick overview of all active email forwarders

Mail Queue

View and manage queued messages from Mail → Mail Queue. Actions: flush (force delivery), hold, release, requeue, delete. Useful for troubleshooting delivery issues.

Email Authentication (DKIM/SPF/DMARC)

Panelica automatically configures email authentication when a domain is created:

  • SPF — TXT record added to DNS zone: v=spf1 a mx ip4:SERVER_IP ~all
  • DKIM — Domain key generated and published as a DNS TXT record
  • DMARC — Policy record for email validation

Manage from Mail → Authentication.

Webmail

Access webmail directly from the panel sidebar. The link opens in a new tab with automatic authentication.

Firewall & Fail2ban

Network security with UFW/iptables firewall rules, IP blocking, Fail2ban jail management, and SSH authentication logging.

Firewall Rules Overview

Navigate to Security → Firewall Rules. Panelica uses UFW with iptables fallback. Four statistics cards at the top:

CardDescription
Total RulesTotal firewall rules with active count badge
Firewall StatusFirewall type (UFW/iptables) and current status
Direction SplitInbound vs. Outbound rule counts
Active StatusActive vs. Inactive rules with a progress bar

Firewall Rules Table

The main table shows all firewall rules (all columns sortable):

ColumnDescription
DescriptionRule description with creator username
DirectionInbound or Outbound
ProtocolTCP, UDP, ICMP, or ANY
Source IPSource address or CIDR (e.g., 0.0.0.0/0)
Destination IPDestination address or CIDR
PortPort number or * for all ports
ActionAllow, Deny, or Reject
StatusActive or Inactive
ActionsEnable/Disable toggle, Delete

Adding a Rule

Click Add New Rule to open the creation modal:

FieldTypeOptionsDefault
DirectionSelectInbound, OutboundInbound
ProtocolSelectTCP, UDP, ICMP, AnyTCP
ActionSelectAllow, Deny, RejectAllow
PortNumber1–65535 (empty = all)
Source IP/CIDRTextIP or CIDR notation
Destination IP/CIDRTextIP or CIDR notation
DescriptionTextareaFree text

Quick Actions

One-click buttons to quickly create common firewall rules:

  • Block All Incoming Traffic — Blocks all inbound traffic (requires confirmation)
  • Allow SSH (22) — Opens SSH port
  • Allow HTTP/HTTPS (80/443) — Opens web server ports
  • Allow MySQL (3306) — Opens MySQL port
  • Allow FTP (21) — Opens FTP port

IP Blocking Page

Navigate to Security → IP Blocking. Summary cards at the top show: Total Blocked IPs (permanent count badge), Whitelist Count, Temporary/Auto Blocks, and Today’s Activity. Quick action buttons: Block IP, Add to Whitelist, Bulk Import, Export List, and Refresh. The page has 6 tabs.

1. Blocked IPs Tab

All manually and automatically blocked IP addresses. Search field filters by IP or reason. Pagination at 10 items per page.

ColumnDescription
IP AddressSingle IP or CIDR notation (e.g., 192.168.1.0/24)
ReasonBlock reason (spam, bruteforce, malicious, ddos, suspicious, policy, manual)
Block TypeAutomatic or Manual
Blocked DateLocalized timestamp
Expires AtDate if temporary, Permanent badge if permanent
LocationCountry flag + location name
ActionsUnblock button

Block IP Modal:

FieldTypeDescription
IP Address *TextIPv4 address or CIDR to block (inline validation)
Block Reason *Select7 options: spam, bruteforce, malicious, ddos, suspicious, policy, manual
Block Type *SelectPermanent or Temporary
Duration HoursNumberDuration for temporary blocks (min 1, disabled if permanent)
NotesTextareaOptional additional information

Preset Block Rules (collapsible section with 8 one-click presets):

PresetDurationDescription
SSH Brute Force24 hoursSSH brute force attacks
FTP Attack12 hoursFTP service attacks
Panel Attack1 hourPanel login attacks
SMTP SpamPermanentMail server spam
DDoS AttackPermanentDDoS attacks
SQL InjectionPermanentSQL injection attempts
XSS Attack24 hoursXSS attacks
Port Scanning12 hoursPort scanning activity

Click a preset, enter the IP address in the prefilled modal, and confirm to block.

Bulk Import: Open the Import modal, paste IP addresses (one per line), the system shows a “Total IPs detected” counter, then click Import to block all.

2. Whitelist Tab

Trusted IPs that can never be blocked. Essential to prevent locking yourself out. Supports CIDR notation.

ColumnDescription
IP AddressIP or CIDR, highlighted in green
DescriptionUser-provided description
Added DateLocalized timestamp
Added ByUsername who added the entry
ActionsDelete button

Add Whitelist Modal: IP Address (text, required, IPv4/CIDR validation) and Description (text, required). Use cases: office IPs, your own IP, trusted API services, monitoring services.

3. Temporary Bans Tab

Time-limited blocks with automatic expiration countdown.

ColumnDescription
IP AddressBlocked IP
Remaining TimeHuman-readable countdown badge (e.g., “2h 30m”)
ReasonBlock reason text
ActionsRemove (early release) button

Temporary blocks are automatically removed when the countdown expires. Click Remove to unblock early.

4. Failed Login Attempts Tab

Failed SSH and panel login attempts with quick block/whitelist actions.

ColumnDescription
IP AddressBold/semibold text
UsernameAttempted login username
Last AttemptLocalized timestamp
Total AttemptsColor-coded badge: 1–4, 5–9, 10+
CountryFlag icon + country name
User AgentBrowser/client info (truncated)
ActionsBlock (danger) and Whitelist (success) buttons

Rows with 5+ attempts are highlighted with a red background. Click Block to immediately add the IP to the blocked list, or Whitelist to mark it as trusted.

5. Fail2ban Jails Tab

Summary cards at the top: Active Jails, Total Banned, Current Failed, and All Time Banned. Action buttons: Sync fail2ban to database and Refresh.

Each jail is shown as an expandable card with the jail name, status badge (Enabled / Disabled), and quick stats (currently banned, currently failed, total banned). Click to expand and see 3 sub-tabs:

Sub-tab: Banned IPs — Shows all currently banned IPs as tag badges. Click the × on a badge to unban a specific IP.

Sub-tab: Config

SettingTypeDescription
Ban TimeNumber (seconds)How long an IP stays banned. Shows human-readable format (e.g., “1d 2h”). Min: 60s.
Find TimeNumber (seconds)Window for counting failed attempts. Min: 60s.
Max RetryNumberFailed attempts before banning. Min: 1.
Log PathRead-onlyMonitored log file path (code snippet)

Click Save Config to apply or Reload Jail to restart the jail.

Sub-tab: Filter Regex

  • Fail Regex — Patterns that match failed attempts. Dynamic list — add or remove regex entries. Each entry is a monospace text input.
  • Ignore Regex — Patterns to exclude from fail regex. Same dynamic management.

Click Save & Reload to apply regex changes immediately.

Filter regex changes take effect immediately after save & reload. Test your patterns carefully to avoid blocking legitimate users.

6. SSH Auth Logs Tab

Real-time SSH authentication logs. Filter by type: All, Failed only, or Accepted only. Scrollable table (max 600px height, sticky header).

ColumnDescription
TimestampFormatted date/time
TypeAccepted, Failed / Invalid, or Other
UsernameBold font SSH username
IP AddressCode snippet format
PortPort number
ServiceService name (typically “ssh”)
ActionsBlock button for failed/invalid entries (prefills Block IP modal with IP and reason)

Failed/invalid rows are highlighted red, accepted rows are highlighted green. Click Block on any failed entry to immediately open the Block IP modal with the IP and reason pre-filled.

$ panelica firewall list
$ panelica firewall add --direction=in --protocol=tcp --port=443 --action=allow
$ panelica firewall delete --id=5
$ panelica ipblock list
$ panelica ipblock add --ip=1.2.3.4 --reason="bruteforce" --type=permanent
$ panelica ipblock whitelist --ip=10.0.0.1
$ panelica fail2ban status
$ panelica fail2ban unban --jail=sshd --ip=1.2.3.4

ModSecurity WAF

Web Application Firewall with OWASP Core Rule Set for SQL injection, XSS, and other attack prevention.

ModSecurity runs as an Apache module with OWASP CRS. It uses anomaly scoring: each matching rule increases a score, and the request is blocked when the score exceeds the threshold.

Navigate to Security → ModSecurity. 4 dashboard cards: Total Blocked Attacks, Logged Events, False Positives, WAF Status ("Per Domain"). The page has 5 tabs:

Tab 1: CRS Rules

OWASP Core Rule Set management. Header shows CRS version and status badge.

Configuration Cards (2 columns):

SettingTypeDescription
Paranoia LevelSlider (1–4)Minimum / Normal / High / Maximum sensitivity. Per-domain configuration.
Inbound ThresholdSlider (1–10)Block requests when anomaly score exceeds this value
Outbound ThresholdSlider (1–10)Block responses when anomaly score exceeds this value

CRS Rulesets Table:

ColumnDescription
RulesetName and ID
DescriptionWhat the ruleset protects against
VersionVersion badge
Rule CountNumber of rules in set
StatusToggle on/off switch
ActionsView Details, Configure, Export Rules

Tab 2: Custom Rules

Create and manage custom ModSecurity rules. Add New Rule, Export Rules, Import Rules buttons at top.

ColumnDescription
Rule IDUnique ID with category badge
DescriptionWhat the rule does
PatternRegex pattern (truncated)
ActionBlock / Log / Allow / Deny badge
SeverityCritical / Error / Warning / Notice (color-coded)
StatusToggle on/off
Last TriggeredTimestamp or "Never"
Trigger CountHow many times fired
ActionsEdit, Delete

Rule Creation Modal: Rule ID, Description, Type (SecRule/SecAction/SecDefaultAction), Pattern (regex), Action (block/log/allow/deny), Severity, and Category (custom/owasp/system).

Tab 3: Whitelist

Exclude trusted sources from WAF inspection. 4 whitelist types:

  • IP — Whitelist specific IP addresses (supports bulk import)
  • URL — Whitelist URL paths (useful for admin pages or API endpoints)
  • User-Agent — Whitelist specific user agents (e.g., monitoring bots)
  • Parameter — Whitelist form parameters to reduce false positives

Each entry includes: Type badge, Value, Description, Status toggle, Rule Exclusions count (skip specific rules for this entry), and Edit/Delete actions.

Tab 4: Logs

Filters: Search by request URI/IP/user-agent, Action dropdown (All/Blocked/Logged/Passed), Severity dropdown (All/Critical/Error/Warning/Notice), Date range picker.

ColumnDescription
TimestampSortable date/time
Request URIURL path (clickable for details)
Attack TypeBadge: SQLi, XSS, RFI, LFI, RCE, etc.
Source IPCountry flag + IP address
User AgentBrowser/client info (truncated)
ActionBlocked / Logged / Passed
Rule IDModSecurity rule link
SeverityColor-coded: Critical / Error / Warning / Notice
CountryFlag emoji
Anomaly ScoreNumeric score

Expandable row details show: full request details, response info, triggered rule details, and matched attack signatures. Paginated at 50 items per page.

Attack Statistics Charts: Pie chart (attack type distribution), Time series (blocked vs logged trends), Bar chart (top attacking IPs with countries), and Geographic distribution map.

Tab 5: Configuration

SettingTypeDefault
Engine StatusOn/Off toggleOn
Request Body AccessToggleOn
Response Body AccessToggleOff
Debug Log LevelDropdown (0–9)3
Audit Log EnabledToggleOn
Audit Log LevelOff / On / RelevantOnly / FullRelevantOnly
Request Body LimitNumber (bytes)13 MB
Response Body LimitNumber (bytes)512 KB
Anomaly ScoringToggleOn
Rate Limit EnabledToggleOff
Rate Limit RequestsNumber per window100
Rate Limit WindowSeconds60

Actions: Save Configuration, Reload Config (with warning), Reset to Defaults.

Protected Against

  • SQL Injection (SQLi)
  • Cross-Site Scripting (XSS)
  • Local/Remote File Inclusion (LFI/RFI)
  • Remote Code Execution (RCE)
  • PHP-specific attacks
  • Session Fixation
  • Scanner/Bot detection
  • Protocol violations

ClamAV Antivirus

On-demand and real-time malware scanning with automatic quarantine, signature management, and configurable settings.

Navigate to Security → Antivirus. The right sidebar shows status cards: Daemon Status (live indicator), Service Status, Last Scan time/type, Threats Found, and Boot Status. The page has 5 tabs:

Tab 1: Dashboard

Scan Options (3 interactive cards):

  • Quick Scan — Scans critical system areas
  • Full Scan — Deep scan of all user directories
  • Custom Scan — Specify a custom path. Quick-select buttons for /home, /tmp, /var/www, /opt

Real-Time Protection Toggle: Enable/disable real-time file monitoring with status display showing monitored file count and last blocked threat.

Live Scan Progress (while scanning):

MetricDescription
Files ScannedNumeric counter
Directories ScannedNumeric counter
Data ScannedIn MB
Threats FoundCounter (danger badge)
ErrorsError count
Worker ThreadsActive threads
Scan Type & PathCurrent scan info
Started AtTimestamp

Click Cancel to abort the scan at any time.

Tab 2: Scan History

ColumnDescription
TypeQuick / Full / Custom scan type
StartedDate and time
DurationIn minutes/seconds
FilesTotal files scanned
ThreatsCount of threats found
StatusRunning / Completed / Failed
ActionsView Details (complete scan report with file breakdown)

Paginated at 10 items per page.

Tab 3: Quarantine

Filter by status: All / Active / Deleted / Restored.

ColumnDescription
File NameFull file path
ThreatDetected malware/threat name
SeverityCritical / High / Medium / Low
StatusQuarantined / Restored / Deleted
SizeFile size
DateQuarantine date
ActionsView Content (first 500 bytes), Restore, Delete permanently

Bulk action: Dismiss All Threats. Quarantined files are stored at /opt/panelica/var/quarantine/.

Tab 4: Definitions

Virus signature database information displayed in 4 cards: Total Signatures, Main Version, Daily Version, and Bytecode Version. Shows database size progress bar, last update timestamp, and update status.

Update Frequency: Select from Real-time / Hourly / Daily / Weekly. Click Update Now to manually trigger a definitions update.

Tab 5: Settings

Scan Settings:

SettingTypeOptions
Scan SensitivityDropdownLow / Medium / High / Maximum
Action on ThreatDropdownQuarantine / Delete / Ignore / Report Only
Max ThreadsNumber (1–16)Parallel scan workers
Max File SizeNumber (MB, 1–1000)Skip files larger than this
Scan ArchivesToggleScan ZIP, RAR files
Heuristic AnalysisToggleDetect unknown threats via behavior
Deep ScanToggleDeeper analysis (slower)

Exclusions:

  • File Type Exclusions — Exclude file extensions (e.g., .log). Add/remove badges.
  • Directory Exclusions — Exclude directories (e.g., /opt). Add/remove badges.

Buttons: Save Settings (green) and Reset to Defaults (secondary).

Security Advisor

Automated security audit with scoring, category-based checks, one-click auto-fix with preflight safety verification, and rollback support.

Security Score Dashboard

Navigate to Security → Security Advisor. Four summary cards at the top:

CardValueColor Logic
Security Score0–100 numeric score with status labelGood (≥80), Fair (≥60), Poor (<60)
Passed ChecksCount of passed checksGreen
Warning ChecksCount of warning checksYellow
Failed ChecksCount of failed checksRed

If critical issues are found, a red alert banner appears: “X critical issues found, urgent action required.”

AppArmor Status Card (shown if AppArmor is active) displays: Protection Active (enforced profiles), Learning Mode (complain profiles), Last 24h Blocks (denied events), and Pending Suggestions with a link to manage AppArmor.

Action buttons: Refresh Checks (re-run all security checks) and View Fix History (toggle fix history section with rollback count badge).

Check Categories

Security checks are grouped into 8 expandable/collapsible categories. Each category header shows the category icon, title, total check count, and a badge row with failed/warning/unknown/passed counts.

CategoryIconChecks Include
SSHri-terminal-box-lineSSH port, root login, password auth, empty passwords
Panelri-dashboard-3-lineAdmin port, admin account security, panel settings
Firewallri-shield-lineUFW/iptables enabled, basic rules configured
Servicesri-server-lineService hardening, unnecessary services disabled
Authenticationri-lock-password-linePassword policies, 2FA, root account security
Databaseri-database-2-lineExternal access, root account, backup status
PSE (PHP Settings)ri-shield-keyhole-linePHP security settings, disabled functions, open_basedir
AppArmorri-shield-check-lineProfile enforcement, system coverage (link to AppArmor page)

Check Details

Each security check within a category shows:

  • Status icon Passed, Warning, Failed, or Unknown
  • Severity badgeCritical / High / Medium / Low
  • Current Value — Shown in red code snippet (for warning/failed checks)
  • Recommended Value — Shown in green code snippet
  • Recommendation — Explanation and reasoning text

Action buttons per check (right-aligned):

  • Configure — Blue button that navigates to the relevant settings page (e.g., SSH config, Profile settings, Panel settings). Available for checks like: ssh_port → SSH Configuration, root_2fa → Profile Security, panel_port → Panel Settings.
  • Auto Fix — Green button for checks that can be automatically resolved
  • Manual — Gray badge if the check requires manual intervention and has no navigation link

Auto-Fix Flow

Checks marked with Auto Fix follow a safety-verified process:

Click the Auto Fix button on a failed/warning check
A preflight safety check runs on the backend, returning blocking errors, warnings, and suggestions
If safe: A green confirmation dialog shows what will change, any warnings, and a general caution message. Click Apply Fix to proceed.
If dangerous: A red error dialog shows blocking errors and suggestions to resolve them. You can click Cancel (recommended) or Apply Anyway (force) which requires a second “Are you really sure?” confirmation.
After the fix is applied, security checks refresh automatically and the fix appears in Fix History.

Fix History & Rollback

Click View Fix History to expand the history section. Header shows “Total fixes: X | Rollback available: Y”.

ColumnDescription
CheckCheck name (bold) with check_id below
TypeCategory badge (ssh, firewall, panel, etc.) with color
ChangesFrom value (red) → To value (green) in code format
AppliedTimestamp + applied_by username
StatusApplied, Rolled Back, or Failed
ActionRollback button (if applied and rollback is available)

Rollback Process: The confirmation dialog shows the check name, applied date, current value (will revert from), and original value (will revert to). Enter a rollback reason and confirm. After rollback, the status changes to “Rolled Back” and security checks refresh automatically.

Common Security Checks

CheckCategorySeverityAuto-FixNavigate
SSH on default port 22SSHMediumNoSSH Config
Root login enabledSSHHighYesSSH Config
Password authentication enabledSSHMediumYesSSH Config
Empty passwords allowedSSHCriticalYesSSH Config
Panel on default portPanelMediumNoPanel Settings
Firewall (UFW) inactiveFirewallHighNo
Fail2ban not runningFirewallHighNo
ModSecurity disabledServicesMediumNo
Root user lacks 2FAAuthHighNoProfile Security
Weak password policyAuthMediumNoPanel Settings
External database accessDatabaseHighNo
Cgroups v2 not enabledPSEMediumNo
AppArmor profiles not enforcingAppArmorMediumNoAppArmor

AppArmor Profiles

Mandatory Access Control with AppArmor profiles for additional process-level security. PRO+

What is AppArmor?

AppArmor is a Linux kernel security module that restricts what applications can access (files, network, capabilities). Panelica manages AppArmor profiles per service for defense-in-depth security.

Dashboard Cards

Navigate to Security → AppArmor. Four summary cards at the top:

CardIconDescriptionColor
Protection Activeri-shield-check-fillCount of enforced profilesGreen
Learning Moderi-shield-flash-lineCount of complain profilesYellow
Pending Suggestionsri-error-warning-lineSuggestion count awaiting reviewRed/Gray
Security Scoreri-bar-chart-box-lineScore out of 100Green (≥70), Yellow (≥40), Red (<40)

The page has 3 tabs: Profiles, Events, Suggestions.

1. Profiles Tab

Filter controls: Search (by name, display name, or target path), Type Filter (All, php-fpm, ssh, system), Mode Filter (All, enforce, complain, disabled), and a New Profile button.

ColumnDescription
ProfileMode icon (colored circle: green=enforce, yellow=complain, gray=disabled) + profile name (bold) + display name + target path (muted, truncated)
TypeBadge: PHP-FPM, SSH, System, or Custom
ModeDropdown selector to switch between Enforce, Complain, and Disabled. Shows loading spinner during mode change.
StatusSystem (built-in, locked icon) or User (custom)
ActionsReload (reload profile from kernel) and Delete (only for non-system profiles, requires destructive confirmation)
$ panelica apparmor list
$ panelica apparmor status --profile=usr.sbin.nginx
$ panelica apparmor enforce --profile=usr.sbin.nginx
$ panelica apparmor complain --profile=usr.sbin.nginx

Creating a Profile

Click New Profile to open a 4-step wizard:

Choose Type — System Service, Application, Web Application, or Database
Select Template — Choose a pre-configured ruleset (php-fpm, ssh, system templates available)
Configure Rules — Add file access rules, network rules, and capability rules
Review & Create — Review all rules and set the initial mode (Enforce or Complain)

Profile Modes

ModeBehaviorUse Case
EnforceBlocks and logs policy violationsProduction servers
ComplainLogs but does not block violationsTesting and tuning profiles
DisabledProfile is not activeTroubleshooting

2. Events Tab

AppArmor violation events recorded in the last 24 hours. Paginated with page controls.

ColumnDescription
ResultDENIED (with shield icon) or LOGGED (with eye icon)
UserSystem username (bold, with user icon) or “–” if none
What HappenedHuman-readable explanation: “{profile} tried to {action} {path}”. Actions: exec, read, write, open, create. If a dangerous resource was DENIED, a green Security Protection badge is shown. Below the explanation: {profile_name} → {operation} → {resource_path}
TimeFormatted timestamp
ActionsFor DENIED events: Allow button (opens handling dialog). For LOGGED events: Acknowledge button (removes from list).

Event Handling Dialog: Shows the blocked operation details (profile, operation, resource path). Two options: Switch to Complain Mode (puts the profile in learning mode) or Acknowledge (mark as seen and remove). After switching to Complain mode, a success dialog confirms the change.

3. Suggestions Tab

Auto-generated profile rule suggestions based on learning mode violations. Warning info box explains that suggestions are from AppArmor learning mode and should be reviewed carefully.

ColumnDescription
RiskBadge with icon: Critical, High, Medium, Low
ProfileProfile name in code snippet
OperationBadge: exec, read, write, open, mknod
Resource/DescriptionResource path (code, truncated, tooltip for full path) + human-readable explanation
CountBadge showing frequency (e.g., “5x”)
ActionsApprove (green, adds rule to profile), Reject (red, dismisses permanently), Ignore (gray, hides temporarily)

Paginated with page controls. When all suggestions are processed, an empty state with a green checkmark shows “No pending suggestions — All suggestions have been processed.”

File Manager

Web-based file management with code editor, archive support, drag-and-drop, and permission control.

Navigate to Files → File Manager. The page has a three-panel layout:

  • Left Panel — Expandable/collapsible folder tree. Click arrows or folder names to expand. Current path highlighted in blue.
  • Top Bar — Breadcrumb navigation (clickable path segments), view mode toggle, search box, filter dropdown, and action buttons.
  • Main Area — File listing in Grid or List view with a storage usage bar at the top showing quota percentage.

Storage Usage Bar

The top of the page shows a progress bar indicating your disk usage against the plan quota. Colors change automatically:

UsageColorMeaning
0 – 70%GreenNormal usage
70 – 90%OrangeApproaching limit
90%+RedCritical — free up space soon

View Modes & Filtering

Toggle between Grid View (icon-based) and List View (table with columns) using the buttons in the top bar.

List View columns:

ColumnDescription
CheckboxMulti-select for bulk operations
Icon + FilenameColor-coded icons by file type (yellow=folder, blue=archive, green=image, red=video, purple=code)
Modified DateLast modification timestamp
File SizeHuman-readable size
OwnerFile owner username (visible based on role)
ActionsDropdown menu with file operations

Filter by type: Use the filter dropdown to show only specific file types — All Files, Folders Only, Documents (txt, md, pdf, doc), Images (png, jpg, gif, svg, webp), Videos (mp4, avi, mov, mkv), Archives (zip, tar, gz, rar, 7z), or Code files (php, js, ts, html, css, json, py, go). Toggle Show Hidden Files to reveal dotfiles.

Search: Real-time search box filters files by name as you type (case-insensitive). Search history is preserved in your browser (last 10 searches).

File Operations

Toolbar buttons:

  • Create Folder — Opens a modal for folder name and permissions (default 755)
  • Upload Files — Opens file picker or use drag-and-drop zone. Supports multiple files with a progress bar. Total size validated against quota.
  • Refresh — Reloads current directory listing
  • Back / Forward / Up — Browser-like navigation history (up to 50 paths preserved)

Right-click context menu on a file/folder:

ActionDescription
Open / EditOpen file in code editor (text files) or preview (images)
DownloadDownload the file to your computer
Copy / CutPlace in clipboard for pasting elsewhere
Copy PathCopy the full file path to clipboard
RenameOpens rename dialog with current name pre-filled
PermissionsOpens chmod dialog with Owner/Group/Other checkboxes (Read/Write/Execute) and octal notation
CompressCreate ZIP or TAR.GZ archive. Configure archive name, include subfolders, and exclude patterns.
ExtractExtract archive contents (ZIP, TAR, TAR.GZ supported). Option to extract in-place or to a new folder.
DeleteMove to trash (soft delete). Large items show a size warning.
PropertiesView file details (size, type, permissions, modification date)

Right-click on empty area: Create Folder, Paste, Refresh, Select All, Invert Selection.

Built-in Code Editor

Double-click any text file to open it in the built-in code editor. Features include syntax highlighting (auto-detected by file extension), line numbers, dark/light mode support, and a file size indicator. Click Save to write changes or Cancel to discard.

Selection & Bulk Operations

Select multiple files for bulk operations:

  • Single Click — Select one item
  • Ctrl+Click — Toggle item in selection (add/remove)
  • Shift+Click — Range select from last clicked item to current
  • Lasso Select — Click and drag on empty area to draw a selection rectangle
  • Header Checkbox — Select all visible items

Once multiple items are selected, you can Bulk Copy, Bulk Move, Bulk Delete, or Bulk Rename (supports find/replace patterns and regex).

Trash / Recycle Bin

Deleted files go to the Trash instead of being permanently removed. Access the Trash modal to see:

ColumnDescription
Item NameOriginal file or folder name
TypeFile or Folder
Original PathWhere the file was before deletion
Deleted DateWhen it was deleted
SizeFile size

Actions: Restore (recover to original location), Permanently Delete, or Empty Trash (remove all items).

Keyboard Shortcuts

ShortcutAction
Ctrl+ASelect All
Ctrl+CCopy
Ctrl+XCut
Ctrl+VPaste
DelMove to trash
Shift+DelPermanent delete
F2Rename selected item
F5Refresh
Ctrl+FSearch / Filter
BackspaceGo to parent directory
Alt+UpParent directory

Role-Based Access

The file manager enforces strict directory isolation based on your role:

RoleInitial PathCan Access
ROOT/Full filesystem (except /opt/panelica)
ADMIN/home/home and all subdirectories
RESELLER/homeOwn users' directories only
USER/home/usernameOwn home directory only

File operations are available via CLI as well. The File Manager panel provides a visual interface for the same operations.

FTP Accounts

ProFTPD-based secure file transfer with per-account directory restrictions, sessions, and transfer logs.

Navigate to Files → FTP Accounts. The page shows 4 summary cards at the top:

CardShows
Total AccountsTotal FTP account count + number of active accounts
Active SessionsCurrently connected FTP sessions
Total QuotaTotal quota allocated across all FTP accounts with usage percentage
SSL/TLSNumber of SSL-enabled secure connections

FTP Accounts Tab

The main tab lists all FTP accounts in a table:

ColumnDescription
UsernameFTP username with a type badge: Main Sub Special
System UserAssociated system user ID
DomainLinked domain name or "N/A"
DirectoryHome directory path (monospace)
Quota UsageProgress bar showing X MB / Y MB with percentage
StatusActive / Suspended / Locked
SSL/TLSCheckmark or cross icon indicating secure connection support
Last LoginLast login date/time or "Never"
ActionsEdit, Change Password, Suspend/Unsuspend, Delete, View Logs, Export

Creating an FTP Account

Click Create FTP Account button (top right) to open the dedicated creation page.

Select Panel User — Choose which system user this FTP account belongs to (ROOT/ADMIN/RESELLER only — USER role auto-selects their own account)
FTP Username — Enter a username (alphanumeric, underscore, hyphen only). Must be globally unique.
Password — Enter a password (minimum 8 characters). A strength indicator bar shows: WeakFairGoodStrong. Confirm password in the second field.
Disk Quota — Set a limit in MB or GB using the number input + unit dropdown. Leave empty for unlimited. A real-time quota info panel shows used/available space and warns if the quota exceeds available capacity.
Access Location — Choose the FTP home directory:
  • User Home - Full Access/home/username (default)
  • Domain Root Folder/home/username/domain.com (requires domain selection)
  • Domain Public HTML/home/username/domain.com/public_html (requires domain selection)
  • Custom Path — Enter an absolute path manually (must be under user home, validated by backend)
Click Create FTP Account to save. The account is immediately usable for FTP connections.
Quota Info Panel: When a user is selected, the form shows a blue info card with disk quota status — current usage, available space, and whether the quota is limited by the reseller or the hosting plan.

Account Actions

From the Actions dropdown on each FTP account row:

  • Edit — Modify directory, quota, and SSL settings
  • Change Password — Opens a prompt for a new password (minimum 8 characters)
  • Suspend / Unsuspend — Toggle account access (suspended accounts cannot connect)
  • Delete — Permanently remove the FTP account with confirmation dialog
  • View Logs — Jump to the Transfer Logs tab filtered for this account

Active Sessions Tab

ROOT only: This tab is only visible to ROOT users.

Shows all currently connected FTP sessions in real-time:

ColumnDescription
UsernameConnected FTP user
IP AddressClient IP address
Connected AtConnection start time
DurationHow long the session has been active
StatusActive or Idle
Current PathDirectory the user is currently browsing
Bytes TransferredUpload/download amount
Last ActionMost recent operation (upload, download, list, etc.)

Actions: Disconnect or Force Disconnect to terminate a session. Enable Auto-refresh for live updates.

Configuration Tab

ROOT only: This tab is only visible to ROOT users.

Server-wide FTP configuration settings:

SettingDefaultDescription
FTP Server Port21Main FTP listening port (1-65535)
SFTP Port22SFTP listening port
Enable SFTPOnAllow SFTP connections
Enable TLS/SSLOnRequire or allow encrypted connections
SSL CertificateAuto-selectChoose from available SSL certificates
Max Connections Per User10Concurrent connection limit per account
Timeout (minutes)10Idle session timeout
Enable LoggingOnRecord FTP transfer activity
Log LevelInfoDebug / Info / Warning / Error
Allow AnonymousOffAllow anonymous FTP access
Passive ModeOnEnable passive mode for NAT traversal
Passive Port Range30000-40000Port range for passive connections

Buttons: Save Configuration, Reset to Defaults, Test Connection.

Transfer Logs Tab

Searchable, filterable log of all FTP transfer activity:

ColumnDescription
Date/TimeWhen the action occurred
UsernameFTP user that performed the action
IP AddressClient IP
ActionUpload / Download / Delete / Rename / etc.
File PathFull path of the affected file
SizeFile size (if applicable)
StatusSuccess or Failed
DurationHow long the transfer took

Filters: Search by username/IP/path, filter by date range, and filter by log level. Use Export button to download logs as CSV.

$ panelica ftp create --user=ftpuser --password=SecurePass --directory=/home/johndoe/example.com

Disk Usage

Monitor and analyze disk space usage with charts, user hierarchy, and largest file detection.

Navigate to Files → Disk Usage. The page displays 4 summary cards at the top:

CardShows
Total SpaceTotal disk capacity in GB
Used SpaceCurrently used disk space in GB
Available SpaceFree space remaining in GB
Usage PercentagePercentage bar with color gradient (green → orange → red)
Over-Quota Warning: If any user exceeds their quota, a yellow warning banner appears: "X users are over their quota — These accounts need immediate attention."

Role-Based Visibility

An info banner at the top shows your access level and what data you can see:

RoleCan See
ROOT / ADMINAll users' disk usage across the entire server
RESELLERDisk usage for your own sub-users only
USERYour own disk usage only (user hierarchy section hidden)

User Disk Usage

Visible to ROOT/ADMIN/RESELLER only. This section shows per-user disk consumption in two ways:

Bar Chart (Top 10 Users): A horizontal bar chart showing the 10 largest disk consumers. Bars are color-coded — green for normal usage, red for users over quota. Hover for exact usage and quota values.

User Cards (Grid): A grid of cards (top 20 users) showing:

  • User avatar with role-colored icon (ROOT=red, ADMIN=blue, RESELLER=cyan, USER=green)
  • Username and role badge
  • Over Quota badge if applicable
  • Usage info: "X.XX GB used / Y.XX GB quota (Z%)"
  • Color-coded progress bar (success/warning/danger)
  • Domain count badge (e.g., "5 domains")

Cards with border highlighting indicate over-quota users.

Directory Usage

Toggle between Chart View and Table View using the buttons at the top right:

Chart View (default): A dual-axis bar chart showing the top 10 directories with size in GB (blue bars) on the left axis and file count (green bars) on the right axis. Hover for tooltips with exact values.

Table View:

ColumnDescription
PathFull directory path with folder icon (monospace)
OwnerUsername with colored badge
TypeBadge: user / system / application
SizeDirectory size in GB (sorted largest first)
File CountNumber of files (formatted with commas)
Usage %Percentage of total disk with progress bar

Table supports sortable columns, hover highlights, and pagination (up to 20 rows per page).

Largest Files

The Top 20 Largest Files table helps identify files consuming the most space:

ColumnDescription
File NameFull file path with icon (monospace)
SizeFile size in GB (sorted largest first)
TypeFile extension / category badge
OwnerFile owner username
Modified DateLast modification date

Useful for identifying old log files, backups, or large media that can be cleaned up to free space.

Quota Management

Disk quotas are controlled by the user's hosting plan. When a user exceeds their quota, new file uploads and database writes are blocked until space is freed. Reseller quotas can further restrict allocations for sub-users.

$ panelica disk-usage
$ panelica disk-usage --domain=example.com
$ panelica disk-usage --user=johndoe --format=json

Backup & Recovery

Full and incremental backups with cloud storage, scheduling, encryption, and one-click restore.

Navigate to Backup → Backup Manager. The page header has two action buttons: Create Backup (primary) and Restore (warning). Below are 4 summary cards:

CardShows
Total BackupsTotal number of backups
Total SizeCombined size of all backups in GB
CompletedNumber of successfully completed backups
FailedNumber of failed backups

Backups Tab

The main tab lists all existing backups:

ColumnDescription
NameBackup name with badges: Encrypted Compressed
TypeFull or Incremental
SizeBackup size in GB
SourceWhat was backed up (e.g., "/var/www", "MySQL Databases")
DestinationStorage target (e.g., "Local Storage", "AWS S3")
CreatedCreation date/time + retention period in days
StatusCompleted / In Progress (with spinner) / Failed / Scheduled
ActionsRestore, Download, View Details, Clone, Verify Integrity, Delete

Creating a Backup

Click the Create Backup button to open the creation modal:

Backup Name — Enter a descriptive name for the backup
Backup Type — Choose Full, Incremental, or Differential
Destination — Select target storage: Local Storage, AWS S3, Google Drive, or FTP Server
Source Selection — Enter a path manually or use quick-select checkboxes:
  • All Databases
  • All Websites
  • System Configuration
  • User Home Directories
Exclude Patterns — Enter one pattern per line to exclude files (e.g., *.log, *.tmp, node_modules/)
Schedule — Choose Manual (run now) or set a recurring schedule (Hourly, Daily, Weekly, Monthly)
Retention — Set how many days to keep the backup
Options — Enable Encrypt Backup and/or Compress Backup checkboxes

Restoring a Backup

Click the Restore button (or select Restore from a backup's actions dropdown) to open the restore modal:

Warning: Restoring will overwrite existing data. Make sure you have a current backup before proceeding.

Restore Location:

  • Original Location — Restore files to their original paths
  • Custom Location — Specify a different directory to restore into

Restore Options:

  • Preserve existing permissions
  • Restore to staging environment
  • Create backup of current data before restoring

Schedules Tab

Configure automated backup schedules. Click Create Schedule to add a new one.

ColumnDescription
NameSchedule name
TypeFull or Incremental
FrequencyHuman-readable schedule (e.g., "Daily at 2:00 AM", "Weekly on Sunday")
Next RunScheduled date/time for next execution
Last RunPrevious execution date/time
DestinationsMultiple badges (e.g., Local S3)
StatusActive / Paused / Disabled
ActionsPlay/Pause toggle, Edit, Delete

The schedule creation modal includes fields for name, frequency, backup type, destination, retention period, and options for encryption, compression, and email notifications.

Destinations Tab

Configure where backups are stored. Three destination cards are displayed in a responsive 3-column grid:

DestinationDescriptionUsage Display
Local StorageDefault on-server storage (hard drive icon)Usage bar (e.g., "150 GB / 500 GB")
AWS S3Cloud backup via Amazon S3 (cloud icon)Usage bar (e.g., "75 GB / Unlimited")
Google DriveCloud backup via Google Drive (drive icon)Usage bar (e.g., "10 GB / 15 GB")

Each card shows a connection status badge (Connected or Not Connected) and a Configure button to set up credentials and connection settings.

Settings Tab

Global backup settings:

SettingDefaultDescription
Default Retention Period30 daysHow long to keep backups before auto-cleanup
Maximum Backup Size50 GBMaximum size for a single backup
Auto CleanupOnAutomatically delete expired backups
Verify IntegrityOnVerify backup integrity after completion
Email NotificationsOnSend email on backup completion or failure
Encrypt All BackupsOffEnable encryption by default for all new backups
Use CompressionOnCompress backups to reduce storage
Encryption MethodAES-256Choose encryption algorithm: AES-256, AES-128, or Blowfish

Backup Actions

From the Actions dropdown on each backup row:

  • Restore — Restore backup to original or custom location
  • Download — Download backup archive to your computer
  • View Details — See full backup metadata (source, size, duration, errors)
  • Clone — Create a copy of the backup with a new name
  • Verify Integrity — Check backup file integrity
  • Delete — Permanently remove the backup with confirmation
$ panelica backup create --name="Daily Backup" --type=full --dest=local
$ panelica backup restore --id=5 --location=original
$ panelica backup destination add --type=s3 --bucket=my-backups --region=us-east-1
$ panelica backup destination test --id=3

Snapshots

Instant filesystem snapshots with Btrfs support, pinning, auto-retention, and one-click restore. Domain-level and server-level snapshots.

Navigate to Backup → Snapshots. The page shows a status banner indicating the snapshot mode:

ModeBadgeDescription
Instant ModeInstantBtrfs filesystem detected — snapshots are instant and copy-on-write
Standard ModeActiveRsync-based snapshots — takes longer but works on any filesystem

Summary Cards

CardDescription
Total SnapshotsTotal count with domain/server breakdown
Storage UsedTotal size with compression savings percentage
Pinned SnapshotsCount of snapshots protected from auto-deletion
Free SpaceAvailable space on the storage path

Snapshot Tabs

Filter snapshots by type using 3 tabs:

  • All — All snapshots with count badge
  • Domain — Domain-level snapshots only. Filter by domain using the dropdown.
  • Server — Full server snapshots (ROOT/ADMIN only)

Snapshot List

ColumnDescription
Pin Pinned or Auto-created indicator
TypeServer / Domain
TargetDomain name or "Full Server" + Btrfs/Rsync and +DB indicators
DescriptionUser-provided description
SizeSnapshot size with compression ratio %
StatusCompleted / Creating / Failed / Restoring
CreatedCreation date and time
DurationTime taken to create the snapshot
ActionsRestore, Pin/Unpin, Download, Delete

Creating a Snapshot

Click Domain Snapshot or Server Snapshot (ROOT/ADMIN only) to open the creation modal:

Type — Domain or Server (radio selection)
Domain — Select the domain from dropdown (domain snapshots only)
Description — Optional description for the snapshot
Click Create Snapshot

Snapshot Settings

ROOT users can configure snapshot behavior via the Settings button:

SettingDescription
Btrfs EnabledUse Btrfs copy-on-write snapshots when available
Auto Snapshot Before ChangesAutomatically create a snapshot before major operations
Auto Retention DaysDays to keep auto-created snapshots
Max Snapshots Per DomainMaximum snapshot count per domain
Max Server SnapshotsMaximum server-level snapshot count
Compression EnabledCompress snapshot data
Compression AlgorithmAlgorithm selection for compression
Max Storage (GB)Maximum disk space for all snapshots

Cleanup Expired: ROOT users can manually trigger cleanup of expired snapshots using the Cleanup Expired button in the action bar.

$ panelica snapshot create --type=domain --domain=example.com
$ panelica snapshot create --type=server
$ panelica snapshot list
$ panelica snapshot restore --id=12
$ panelica snapshot delete --id=12

Backup Activity Log

Complete history of all backup operations with filtering, export, and detail views.

Navigate to Backup → Activity Log. The page shows 6 summary cards at the top:

CardColorDescription
Total OperationsPrimaryAll-time operation count
SuccessfulGreenSuccessfully completed operations
FailedRedFailed operation count
TodayInfoOperations performed today
This WeekWarningOperations this week
Backups CreatedSecondaryTotal backup creation count

Filters

FilterOptions
Operation TypeAll, backup_create, backup_restore, backup_delete, backup_upload, backup_download
StatusAll, success, failed, partial, in_progress
UsernameSearch by username
Start DateDate picker
End DateDate picker

Action buttons: Clear Filters, Refresh, Export (ROOT/ADMIN, downloads CSV), Keep Last 300 (ROOT/ADMIN, deletes older entries), Delete All (ROOT only).

Activity Table

ColumnDescription
OperationIcon + label: Create (), Restore (), Delete (), Upload (), Download ()
InfoSchedule name (if scheduled) or "Manual Backup" + username + domain count
Backup FileFilename of the backup
StorageLocal / AWS / GCS / SFTP
SizeTransferred data size
DurationOperation duration (e.g., "2m 15s")
Date/TimeFull timestamp
StatusSuccess / Failed / Partial / In Progress
ActionsView Details (opens modal with full metadata, errors, warnings)

Universal Migrator

Migrate websites, databases, and email accounts from external servers with a guided 5-step wizard. Supports cPanel, Plesk, DirectAdmin, CyberPanel, and raw SSH servers. Requires the migration license feature.

Navigate to Backup → Migration. The migrator supports three source types: Web Panels (cPanel, Plesk, etc.), SSH/SFTP, and Raw Server.

Step 1: Connect

Enter the source server credentials to establish an SSH connection:

FieldDescription
HostSource server IP address or hostname
PortSSH port (default: 22)
UsernameSSH username (typically root)
PasswordSSH password or use key authentication

Once connected, the header shows: Connected to: server-ip

Step 2: Discover

The system automatically scans the source server and discovers:

CardDescription
Sites FoundNumber of websites/domains detected
DatabasesNumber of MySQL/PostgreSQL databases found
Email AccountsNumber of email accounts detected
Total SizeEstimated total data size (e.g., "308.3 MB")

A Discovery Log panel (dark terminal-style) shows real-time scan progress. The detected panel type and version (if any) are displayed automatically.

Step 3: Configure

Review discovered items and configure migration options:

  • Select Items — Choose which sites, databases, and email accounts to migrate
  • User Assignment — Map source server users to Panelica users or create new ones
  • Domain Configuration — Verify domain settings, PHP version, and document root
  • Database Mapping — Review database names, users, and credentials
  • Email Settings — Configure email account migration options

Step 4: Migrate

Click Start Migration to begin the transfer. A real-time progress panel shows:

  • Overall progress bar with percentage
  • Per-item status (pending, transferring, completed, failed)
  • Transfer speed and estimated time remaining
  • Live migration log with detailed output
The migration is read-only on the source server — no data is modified or deleted from the origin.

Step 5: Complete

Migration results summary showing:

  • Total items migrated vs. failed
  • Per-item results with success/failure details
  • Post-migration actions: verify sites, update DNS, test email
  • Option to retry failed items

SSH Session

If the SSH session expires during discovery or migration, an alert appears with a Reconnect button to re-establish the connection. Use Cancel Migration in the header to abort the process at any time.

$ panelica migrate connect --host=199.192.25.141 --user=root
$ panelica migrate discover
$ panelica migrate start --all
$ panelica migrate status

Remote Storage

Configure cloud and remote backup destinations with AWS S3, Google Cloud Storage, Google Drive, and SFTP. Requires the backup_remote license feature.

Navigate to Backup → Remote Storage. The page has 3 tabs.

Destinations Tab

View and manage remote storage destinations:

ColumnDescription
NameDestination display name
ProviderS3 / GCS / Drive / SFTP
DefaultCheckmark if set as default destination
Last SyncLast synchronization timestamp or "Never"
StatusConnected / Error
ActionsView, Edit, Test Connection, Delete

Adding a Destination

Click Add Destination to open the wizard-style form:

Name & Description — Destination name, optional description, and default toggle
Provider Configuration — Settings specific to the chosen provider (see below)
Credentials — Authentication details for the storage provider
Test & Review — Test connection and save

AWS S3 Configuration:

FieldDescription
RegionAWS region (16+ options, e.g., us-east-1, eu-west-1)
BucketS3 bucket name
EndpointCustom endpoint for S3-compatible storage (optional)
Path StyleEnable for S3-compatible storage (e.g., MinIO)
Storage ClassSTANDARD, STANDARD_IA, INTELLIGENT_TIERING, ONEZONE_IA, GLACIER_IR, GLACIER, DEEP_ARCHIVE
SSE ModeServer-side encryption mode (optional)
Access Key IDAWS access key
Secret Access KeyAWS secret key (password field)

Google Cloud Storage (GCS) Configuration:

FieldDescription
Project IDGoogle Cloud project identifier
BucketGCS bucket name
Location30+ locations (multi-region, dual-region, single-region)
Storage ClassSTANDARD, NEARLINE, COLDLINE, ARCHIVE

Google Drive Configuration: Folder ID, folder path, and prefix. Requires OAuth credentials.

SFTP Configuration:

FieldDescription
HostSFTP server address
PortSFTP port (default: 22)
UsernameSFTP username
Remote PathDirectory path on remote server (default: /)
Auth MethodPassword or Private Key
Password / KeyAuthentication credential (conditional)

Sync Jobs Tab

View recent synchronization activity:

ColumnDescription
Start TimeSync start timestamp
DestinationProvider name
StatusSuccess / Failed / In Progress
Size TransferredTotal data transferred
DurationOperation duration
Backups CountNumber of backup files synced
ActionsView Logs

Remote Backups Tab

Browse and manage backup files stored on remote destinations:

ColumnDescription
FilenameBackup file name
DestinationProvider name
SizeFile size
Last ModifiedModification date
Exists LocallyYes / No
ActionsDownload (if not local), Delete
$ panelica remote-storage list
$ panelica remote-storage add --type=s3 --bucket=my-backups --region=eu-west-1
$ panelica remote-storage test --id=1
$ panelica remote-storage sync --id=1

WP Toolkit

WordPress management toolkit with 8 sub-pages: Installations, Install Wizard, Plugins, Themes, Updates, Security, Backup, and Staging.

Navigate to 3rd Party Applications → WP Toolkit. This feature requires the wordpress_toolkit license feature.

Installations Page

Two-column layout: Left panel shows site list with quick stats (Active/Frozen/Issues counts), Right panel shows selected site details.

Site Details Panel:

  • Overview Cards (4) — WP Version, PHP Version, Security Status (Frozen/Unlocked), Installation Date
  • Site Info — Site Title, Site URL (clickable), Admin User, Database, Install Path, Owner

Quick Actions (6 buttons):

ActionDescription
WP AdminOne-click auto-login to WordPress dashboard (disabled if not active)
Visit SiteOpen live site in new tab
Fix PermissionsRepair WordPress file/directory permissions
Freeze / UnfreezeToggle file immutability protection (prevents all file changes)
Change PasswordModal: new password (min 8 chars), confirm, generate strong password button
UninstallDestructive action with confirmation dialog

Manage Cards (4): Plugins, Themes, Security, Staging — each links to the respective sub-page.

Status types: Active Installing Maintenance Broken Updating Suspended

Install Wizard (5-Step)

Step 1: Target Selection
  • Domain — Install on existing domain (select from dropdown)
  • New Domain — Create a new domain + install. Optional: auto-create user (generates username, email, password from domain)
  • Subdomain — Select parent domain, then pick existing or create new subdomain

Common fields: Install Subpath (optional), Use HTTPS toggle, SSL Provider (Let's Encrypt / Self-Signed), Force Reinstall checkbox (with backup option).

Step 2: Site Setup — Site Title (required), Locale (default: en_US), PHP Version (from available versions), Blog Public (allow search engines)
Step 3: Admin Account — Admin Username (cannot be "admin" for security), Password (min 8 chars), Admin Email (format validated)
Step 4: Settings — Table Prefix (default: wp_), Auto-Update Core toggle
Step 5: Review & Confirm — Summary of all settings. Click Install WordPress to begin. Real-time progress bar shows installation status. On success: Site URL, Admin URL (both clickable), Auto-login button, Visit Site button.

Plugins Page

Two-column layout with multi-site selection on the left (checkboxes for batch operations). Right panel has 2 tabs:

Tab 1: Installed Plugins

  • Stats Cards (4) — Total plugins, Active plugins, Needs Update, Must-Use plugins
  • Search & Filter — Search by name, Status filter (All/Active/Inactive/Needs Update)
  • Bulk Actions — Select All checkbox, then: Activate Selected, Deactivate Selected, Update Selected, Delete Selected
  • Columns — Checkbox, Icon, Name, Status badge, Current Version, New Version (if update available), Actions (Activate/Deactivate, Update, Delete)
  • Batch — "Update All Plugins on Selected Sites" button applies to all checked sites

Tab 2: Plugin Store

  • Search — WordPress.org plugin search (debounced, min 2 chars)
  • Popular Categories (8) — Security, SEO, Performance/Cache, Backup, Forms/Contact, E-Commerce, Analytics, Email/SMTP
  • Results — Plugin cards with icon, name, rating (stars), download count, description, Install button (with auto-activate option)
  • Multi-site Install — When multiple sites selected, batch install with success count

Themes Page

Same two-column layout as Plugins. 2 tabs:

Tab 1: Installed Themes — Stats (Total, Active, Needs Update, Parent themes), search/filter, bulk actions (Update/Delete Selected), theme grid. Only one theme can be active per site.

Tab 2: Theme Store — 8 categories (Starter, Blog, Business, Portfolio, E-Commerce, Magazine, Multipurpose, Minimal). Search and install themes from WordPress.org.

Updates Page

Unified updates dashboard for all WordPress components. Multi-site selection on the left.

  • Stats Cards (5) — Total updates, WordPress Core count, Plugins count, Themes count, Translation updates count
  • Search & Filter — Search by name/slug, Type filter (All/Core/Plugins/Themes/Translations)
  • Table Columns — Type badge (Core/Plugin/Theme/Translation with icon), Name, Current Version, New Version, Site, Actions (Update Now — disabled if frozen)
  • Batch — Select multiple updates, click "Update All on Selected Sites"

Security Page (5 Tabs)

Comprehensive WordPress security management. Multi-site selection on the left.

Tab 1: Overview — Security Score (0–100, color-coded circle: green 80+, orange 50–79, red <50). Key metrics: last scan, next scheduled, threats detected, integrity issues. Security alerts list with action buttons.

Tab 2: Scanner — Two scan types:

  • Quick Scan — Core integrity, plugin integrity, suspicious files, PHP in uploads
  • Full Scan — All quick checks + ClamAV malware scan

Real-time progress shows each step with status (pending/running/done/error), elapsed time, and result. Results display: core integrity status, modified files list, suspicious files with delete buttons, malware findings, and PHP files found in uploads directory.

Tab 3: Hardening — Security score bar (0–100) with checklist items:

CheckDescription
User Enumeration ProtectionPrevent user enumeration via REST API
Security HeadersAdd HTTP security headers
File Editor DisableDisable theme/plugin editor in WP dashboard
Hide WordPress VersionRemove WP version from headers
Directory ListingDisable directory browsing

Each item shows status (SECURE/INSECURE/WARNING) and a toggle to enable/disable. Security Agent installation button if not yet installed.

Tab 4: Activity — Login attempt monitoring. Filter by days (7/14/30) and search by IP/username. Stats cards: Total Attempts, Failed, Successful, Blocked. Table columns: IP Address (with country), Time, Username, Event (login_failed/login_success/login_blocked/ip_blocked), Method (wp-login/xmlrpc), User Agent, Reason.

Tab 5: Users — WordPress users table: User ID, Username, Email, Role(s) (Admin/Editor/Author/Contributor/Subscriber), Registered date, Display Name. Highlights suspicious users (multiple admins, recent suspicious registrations).

Security Agent Configuration Modal:

  • Login Protection — Enable toggle, Max Attempts (default: 5), Block Duration (default: 3600s), Rate Window (default: 600s)
  • Rate Limiting — Enable toggle, Requests Per Minute (default: 120), Ban Duration (default: 300s)
  • XML-RPC Protection — Disable XML-RPC toggle
  • IP Blacklist / Whitelist — Add/remove IP addresses (supports CIDR notation)
  • Country Block — Block by 2-letter country code
  • Bot Whitelist (5 categories) — Search Engines (Google, Bing, 17 bots), Social Media (Facebook, Twitter, 10 bots), Uptime Monitoring (Pingdom, 9 bots), SEO & Analytics (Ahrefs, 6 bots), AI & Research (GPTBot, ClaudeBot, 8 bots). RDNS verification toggle for each category.

Backup Page (4 Tabs)

Tab 1: Backup History — Filter by site. Table: Name, Site, Type (Full/Database/Files badge), Size, Created, Duration, Status (Completed/Failed/In Progress), Contents icons, Location (Local/Cloud), Encryption (Yes/No), Actions (Download, Restore, Clone, Delete). Click for detailed modal showing WP version, PHP version, plugin/theme counts, upload folder size.

Tab 2: Create Backup — Select site, choose type (Full/Database Only/Files Only with size estimates), set options: Backup Name, Include Uploads, Compression (None/Gzip/Bzip2), Encryption, Location (Local/S3/Backblaze/Dropbox/FTP). Advanced: Exclude Patterns, Retention Days, Pre/Post Scripts. Real-time progress with estimated time.

Tab 3: Scheduled Backups — Table: Name, Site, Type, Frequency (Daily/Weekly/Monthly/Hourly badge), Time, Retention, Location, Encryption, Status toggle, Next Run, Last Run, Last Status, Actions (Edit/Delete/Run Now). Create schedule: site, frequency, time picker, timezone, type, location, retention, encryption, email notification.

Tab 4: Settings — Max Local Storage (GB), Default Retention Days, Default Compression, Auto-cleanup. Email notifications. Cloud storage integrations: AWS S3 (Access Key, Secret, Bucket, Region), Backblaze (Account ID, Key, Bucket), Dropbox (Token, Path). Each with Test Connection button.

Restore Backup Modal: Options to restore Files and/or Database, create pre-restore backup, downtime warning. Clone Site Modal: Select destination, clone name, database prefix.

Staging Page

Select a site from the left panel to manage its staging environment.

Status types: Creating... Active Syncing... Promoting... Error Deleted

When staging exists, info cards show: Staging URL, Storage Path, Database Name, Created Date, Last Synced, Last Promoted.

Actions:

  • Sync Staging — Pull latest changes from live (select: Files, Database, or both)
  • Visit Staging — Open staging site in new tab
  • Promote to Live — Push staging to production. Requires typing "PROMOTE" to confirm. Options: Push Files/Database, Auto-backup production.
  • Delete Staging — Remove staging environment (destructive confirmation)

Creating Staging: Click "Create Staging" — enter optional notes, choose Clone Files and/or Clone Database, then create. Real-time progress with status messages.

$ panelica wordpress install --domain=example.com
$ panelica wordpress list
$ panelica wordpress plugins list --site=example.com
$ panelica wordpress scan --site=example.com --type=full

Docker Manager

Full Docker lifecycle management with 8 main tabs, plus Docker Compose, Swarm orchestration, Registry management, real-time statistics, and container logging.

Navigate to 3rd Party Applications → Docker. Summary cards: Total Containers, Running Containers, Total Images, Total Volumes, Total Networks.

Tab 1: Overview

Docker installation status and system information:

  • System Info — Docker version, API version, Compose version, OS/Architecture, Kernel version, Storage driver, Root directory
  • Capabilities — Memory limit support, Swap limit support
  • Container Stats — Running/Paused/Stopped breakdown
  • Disk Usage — Breakdown by Containers, Images, Volumes, Build Cache (in GB) + Reclaimable Space

If Docker is not installed, an Install Docker button appears with streaming installation logs. Uninstall provides granular control: remove containers (on), images (on), volumes (off), networks (on), purge data (off).

Tab 2: App Templates

One-click deployment of 50+ pre-configured applications. Search across names/descriptions, filter by category.

Categories: AI, Chat, Automation, DevTools, CMS, Web, Blog, Database, Cache, and more. Each template card shows: Logo, Name, Image tag, Description, Category badges, Memory requirements, Port count, Deploy count (popularity), and "Popular" indicator.

Deploy Modal: Container name (auto-filled), Image tag override, Port mapping customization, Environment variable overrides, Memory limit, Auto-start toggle. On success: shows Container ID, Access URL, Exposed ports, Credentials (if any).

Tab 3: Containers

Search by name/status (All/Running/Stopped/Paused).

ColumnDescription
NameContainer name + truncated ID
ImageImage name:tag
Statusrunning / stopped / paused / restarting / created
PortsPort mappings (host:container)
ResourcesCPU % and Memory usage (MB) with progress bars
CreatedTimestamp
ActionsStart, Stop, Pause, Restart, Logs, Terminal, Inspect, Clone, Link Domain, Delete

Create Container Modal:

FieldTypeDescription
Container NameText (required)Unique container name
ImageText (required)Image name with autocomplete
Port MappingTexthost:container format (comma-separated)
NetworkSelectbridge / host / none / custom
EnvironmentTextareaVAR=value format
Volume MountsTexthost:container (bind/named)
Restart PolicySelectno / on-failure / always / unless-stopped
Memory LimitNumber (MB)Maximum memory
CPU LimitNumber (%)Maximum CPU
CommandTextOverride entrypoint
Working DirTextContainer working directory
HostnameTextContainer hostname
SHM SizeNumberShared memory size
CapabilitiesTextLinux capabilities
DNS ServersTextCustom DNS
Extra HostsTextAdditional host entries

Container Terminal: Full WebSocket-based terminal (xterm.js) with dark theme, TTY support, auto-reconnect, and responsive sizing.

Domain Linking: Associate containers with domains. Auto-detects exposed ports and creates reverse proxy configuration.

Clone Container: Duplicate a container with a new name and optional auto-start.

Tab 4: Images

Stats: Total Images, In Use, Total Size (GB), Dangling images count.

ColumnDescription
RepositoryImage repository name
TagImage tag badge
Image IDSHA256 hash (truncated)
SizeImage size (MB/GB)
CreatedCreation timestamp
StatusIn Use / Unused badge
ActionsRun container, Delete, Inspect, Tag, Push

Pull Image Modal: Enter image name:tag, streaming progress shows layer-by-layer download status.

Tab 5: Docker Hub

Search Docker Hub for images. Results show: Name, Description, Stars, Official badge, Automated badge. One-click pull from search results with streaming progress.

Tab 6: Volumes

Stats: Total Volumes, Total Size, Used Space (%), Orphaned count.

ColumnDescription
NameVolume name + creation date
DriverDriver badge (local, etc.)
Mount PointFilesystem path
Size / UsedWith usage progress bar (green <50%, yellow <75%, red >75%)
ContainersIn-use / Orphaned badge + count
ActionsInspect, Browse, Backup, Delete (orphaned only)

Browse Modal: File explorer with breadcrumb navigation, parent directory navigation. Shows: file name, type (file/directory), size, modification time, permissions. Donut chart shows volume usage distribution.

Create Volume: Name (required), Driver (local/other), Optional bind path.

Tab 7: Networks

Stats: Total Networks, Bridge count, Connected Containers total.

ColumnDescription
NameNetwork name
Driverbridge / host / overlay / macvlan / none badge
Scopelocal / swarm / global badge
Subnet/GatewayIPAM configuration
ContainersConnected container count
PropertiesInternal / Attachable flags
ActionsInspect (view connected containers with IPs and MACs), Delete

Create Network: Name, Driver, Subnet (CIDR), Gateway, Internal toggle, Attachable toggle, Labels.

Docker Compose

Navigate to Docker → Compose for stack management. Stats: Total Stacks, Running, Total Services, Combined Memory.

Stacks Tab:

ColumnDescription
NameStack name
Statusrunning / stopped / partial / error
ServicesRunning / Desired count
Created / UpdatedTimestamps
VersionCompose file version
ActionsView Services, Edit Compose File, Start/Stop Stack, Restart, Delete

Services Tab: Service name, Image, Status, Replicas (running/desired), Ports, Networks, Volumes, Resources, Actions (Scale, Restart, Logs, Inspect).

Compose Editor: Raw YAML editor with syntax highlighting and validation. Supports Compose version 3.7+. Deploy/Update buttons.

Registry Management

Stats: Connected Registries, Total Repositories.

Registries Tab: Table of configured registries with: Name, URL, Type (Docker Hub/Private/GCR/ECR/ACR), Authentication status, Repository count, Last sync, Status (connected / disconnected / error). Actions: Authenticate, Sync, Delete, Edit.

Repositories Tab: Name, Registry, Tags, Stars, Pulls, Size, Last Push, Visibility (public/private). Actions: Pull specific tag, Push, Delete, View Details.

Add Registry Modal: Registry type selection, URL, credentials (username/password/token), Test Connection button.

Container Logs

Real-time log viewer with controls:

  • Container Filter — All Containers or specific container
  • Log Level Filter — All / Error / Warning / Info / Debug
  • Line Count — 50 / 100 / 200 / 500 / 1000 lines
  • Search — Full-text search (regex capable)
  • Auto-scroll — Toggle automatic scroll to latest
  • Timestamps — Show/hide timestamp column
  • Clear / Export — Clear logs or download as file

Columns: Timestamp (optional), Container (badge), Level (ERROR WARN INFO DEBUG), Message (monospace), Source (stdout/stderr).

Performance Statistics

System overview: Total CPU %, Total Memory Used/Limit, Network RX/TX (MB/s).

Charts (4 metric tabs): CPU (time-series area chart), Memory (donut by container), Network (bar chart RX/TX per container), Disk I/O (area chart read/write trends).

Per-Container Stats Table: Name, Status, CPU %, Memory (used/limit/%), Network (RX/TX MB/s), Disk (Read/Write MB/s), Process count. Real-time updates with filter for running containers only.

Docker Swarm

Orchestration management. If not initialized, shows Initialize Swarm button with worker/manager token display. Stats: Total Nodes, Managers, Workers, Running Services.

Nodes Tab:

ColumnDescription
HostnameNode hostname
RoleManager / Worker
StatusReady / Down / Drain
AvailabilityActive / Pause / Drain
IP / CPU / MemoryNode resources
ContainersRunning container count
ActionsPromote/Demote, Drain/Activate/Pause, Inspect, Remove

Services Tab: Name, Image, Mode (Replicated/Global badge), Replicas (running/desired, color: green=all, yellow=partial, red=failed), Status, Ports, Networks. Actions: Scale, Update Image, Restart, Logs, Delete.

Tasks Tab: Individual container instances: Task ID, Service, Node, Status (running/failed/shutdown/accepted/preparing/starting/removing), Desired State, Ports, Updated time. Actions: View Logs, Inspect, Force Update.

Join Modal: Worker join token (copyable), Manager join token, Join command: docker swarm join --token TOKEN MANAGER_IP:2377

Create Service Modal: Service name, Image, Mode (replicated/global), Replicas, Port mappings, Environment variables, Volume mounts, Restart policy, Update config (parallelism, delay), Placement constraints, Labels.

$ panelica docker create --image=nginx:latest --name=my-nginx --port=8080:80
$ panelica docker list
$ panelica docker stop --name=my-nginx
$ panelica docker compose up --file=docker-compose.yml
$ panelica docker swarm init

Server Monitoring

Real-time metrics, service management, Panelica monitoring dashboard, and server metrics with auto-refresh.

Panelica Monitor Dashboard

Navigate to Monitoring → Panelica Monitor for a comprehensive real-time monitoring dashboard with theme-aware widgets:

CPU Section:

  • CPU Usage % gauge (0-100, color thresholds: green <50%, yellow <80%, red ≥80%)
  • Load Average card (1min, 5min, 15min)
  • Context Switches counter and CPU Cores display

Memory Section:

  • Memory Usage % gauge with used/total GB
  • Swap Usage % gauge
  • Available Memory display
  • Memory History line chart (last 1 hour)

Disk Section:

ColumnDescription
DeviceDisk device name (e.g., /dev/sda1)
MountMountpoint path
TotalTotal capacity in GB
UsedUsed space in GB
AvailableFree space in GB
Usage %Percentage gauge

Plus Disk I/O metrics: Read/Write Latency (ms), IOPS.

Network Section: In/Out throughput gauges (bytes/sec), error counter, TCP retransmits, and historical charts.

System: Running/Blocked/Total processes count, Forks per second, TCP connections, Sockets allocated/in use, UDP stats, Conntrack usage.

Panelica Services Status:

ColumnDescription
ServiceName with auto-detected icon (nginx, php, postgres, mysql, redis, etc.)
Statusrunning / stopped / starting
PIDProcess ID
UptimeHuman-readable uptime (e.g., "1d 5h")
CPU %CPU usage percentage
MemoryMemory usage in MB
PortsListening ports

Server Metrics

Navigate to Monitoring → Resource Usage for real-time server metrics with auto-refresh every 5 seconds.

The page shows 4 circular gauge cards at the top:

  • CPU — Usage percentage with color gradient (green <50%, yellow 50-75%, orange 75-90%, red >90%) and core count
  • Memory — Usage percentage with used/total GB display
  • Disk — Usage percentage with used/total GB display
  • Load Average — Three values (1m, 5m, 15m) color-coded relative to CPU core count

Network Traffic: Download (green) and Upload (blue) sections with bandwidth in bytes/sec and Mbps, each with a progress bar.

Service Status: Cards for each service with auto-detected icons (panelica_monitor, panelica_backend, nginx, mysql, postgresql, redis, apache) showing UP or DOWN status.

Quick Stats: Uptime, CPU Cores, Total Memory (with available), Total Disk (with available).

Toggle Auto-refresh on/off. Manual refresh button available. Last update timestamp displayed.

Service Monitor

Navigate to Monitoring → Service Monitor for managing all server services:

ColumnDescription
ServiceService name with auto-detected icon
Statusrunning / stopped / error / starting
PIDProcess ID or N/A
UptimeDuration or "-" if stopped
CPU %CPU usage
MemoryMemory usage in MB
PortsListening ports
BootEnable/disable at boot toggle (with disable reason)
ActionsStart, Stop, Restart buttons
Protected Services: Critical services (backend, postgresql, nginx-panel) cannot be stopped — only restart/start are available. A lock icon indicates protected status.

Disable Service: When disabling boot auto-start, a modal asks for the disable reason. The reason and timestamp are stored and displayed in the Boot column.

Bulk Actions: Start All and Restart All buttons (with confirmation modal). Auto-refresh updates status every 10 seconds.

$ panelica service status --all
$ panelica service restart --name=nginx
$ panelica service enable --name=redis

Bandwidth Usage

Monthly bandwidth monitoring per user and per domain with charts, tables, and distribution analysis.

Navigate to Monitoring → Bandwidth. The page shows 4 summary cards at the top:

CardShows
Total BandwidthTotal GB used for the selected month
Active UsersNumber of users with bandwidth usage
Active DomainsNumber of domains with traffic
Average per DomainCalculated average MB per domain

Period Selector

A dropdown at the top lets you select from the last 12 months (format: "Month Year"). All charts and tables update when you change the period.

Charts

  • Top Users by Bandwidth (left) — Horizontal bar chart showing top 10 users with MB/GB data labels (blue)
  • Top Domains by Bandwidth (right) — Horizontal bar chart showing top 10 domains with MB/GB data labels (cyan)
  • Domain Distribution — Pie chart showing top 5 domains with color-coded slices and legend

Users Details Table

ColumnDescription
UserAvatar + username + domain count
RoleBadge: ROOT / ADMIN / RESELLER / USER
UsedBandwidth used in MB
Limit"Unlimited" badge or formatted limit value
UsageColor-coded progress bar + percentage (green <80%, orange 80-90%, red >90%)
Statusexceeded / critical / warning / unlimited / normal

Domains Details Table

ColumnDescription
DomainGlobe icon + domain name
OwnerUsername of domain owner
Bandwidth UsedFormatted MB value
SharePercentage badge showing share of total bandwidth
DistributionColored progress bar showing usage distribution
$ panelica bandwidth summary
$ panelica bandwidth --user=johndoe --period=month
$ panelica bandwidth --domain=example.com

Bandwidth Enforcement

Monthly bandwidth limits are defined in the hosting plan (monthly_bandwidth_mb). When a user exceeds their limit, their domains are rate-limited (not suspended). Automatic notifications are sent at 80%, 90%, and 100% thresholds.

Statistics & Resource Usage

Comprehensive statistics dashboard with web traffic, system resources, database, email, security, and FTP metrics.

Navigate to Monitoring → Statistics for a multi-tab statistics overview.

Date Range Selector

Select the time period at the top: 24 Hours, 7 Days (default), 30 Days, or 90 Days. All charts and values update accordingly.

Summary Cards

4 animated summary cards with percentage change badges:

CardShowsChange Indicator
Total RequestsHTTP request count with animated counterGreen up arrow or red down arrow
Bandwidth UsedTotal bandwidth in GBPercentage change badge
Unique VisitorsUnique visitor countPercentage change badge
Avg Response TimeAverage response time in secondsPercentage change badge

Statistics Tabs

Web Traffic Tab: Area chart showing Request & Bandwidth Trend over time, Top Pages table (top 5), and Error Distribution pie chart (404, 500, 403, 502, 503 breakdown).

System Resources Tab: Line chart showing CPU %, Memory %, and Swap % over time. Plus 4 average stat cards: Average CPU, Average Memory, Average Load, and Uptime.

Database Tab: Bar chart showing Query Statistics per database engine (MySQL, PostgreSQL, MongoDB, Redis) with queries and connections. Database Sizes shown as progress bars with total allocation info.

Email Tab: 4 stat cards (Emails Sent, Delivery Rate, Open Rate, Click Rate) plus a Spam Report alert showing flagged emails.

Security Tab: 3 cards — Security Threats (Blocked IPs, Failed Logins, Brute Force counts), Malware Scanner (scanned files + threats), Firewall Status (blocked connections).

FTP Tab: Upload/Download statistics with transfer counts and total data, Connection Info card (total connections, active now, total data, average speed).

Export Options

Export statistics in multiple formats using the button group at the bottom:

  • Export as PDF
  • Export as Excel
  • Export as CSV
  • Email Report — Send report via email
  • Schedule Reports — Set up recurring report delivery
$ panelica quota status
$ panelica quota status --user=johndoe
$ panelica resources list-users --sort=cpu

Cgroups v2 Enforcement

Resource limits are enforced at the kernel level using Cgroups v2. Each user runs inside their own cgroup with hard limits for CPU, RAM, and I/O. Exceeding limits results in throttling (CPU) or OOM killing (RAM), not suspension.

Process Manager

Monitor and manage running processes with real-time CPU/memory charts, tree view, and auto-refresh.

Navigate to Tools & Settings → Process Manager. The page shows 4 summary cards at the top:

CardShows
CPU UsageTotal CPU percentage with color-coded progress bar (>80% red, >60% orange, else blue)
Memory UsageTotal memory percentage with color-coded progress bar
Total ProcessesTotal process count + number currently running
UptimeSystem uptime with load average values

Processes Tab

Filters: Search by process name/command/user/PID, filter by User dropdown, filter by Status (running, sleeping, zombie, stopped). Status summary badges show counts: Running Sleeping Zombie.

View Modes: Toggle between Flat List and Tree View (hierarchical with expand/collapse, indented levels). In tree view, Hide Kernel Threads and Expand All / Collapse All buttons appear.

ColumnDescription
PIDProcess ID (sortable)
NameProcess name + command subtitle (monospace, truncated)
UserUsername running the process
StatusColor-coded badge (success/info/warning/danger)
CPUProgress bar + percentage (color-coded by usage)
MemoryProgress bar + MB value (color-coded by usage)
PriorityNice value badge (color-coded)
RuntimeProcess runtime duration
Actions3 buttons: Terminate, Force Kill, Change Priority

Default sort: CPU descending. Click any sortable column header to change.

Process Actions

  • Terminate (SIGTERM) — Gracefully terminate a process. Confirmation dialog shows PID, name, and user.
  • Force Kill (SIGKILL) — Forcefully kill a process immediately. Confirmation dialog with warning.
  • Kill All User Processes — When a user filter is active, a "Kill All" button appears. Shows count and preview of first 5 processes before confirming.
  • Change Priority (Renice) — Dialog shows current priority and accepts a new value (-20 to 19). Validated before submission.

Monitoring Tab

Real-time charts and top process lists:

  • CPU Usage Chart (left) — Area chart showing CPU % over time (blue)
  • Memory Usage Chart (left) — Area chart showing Memory % over time (green)
  • Top 5 by CPU (right) — Table with Name, CPU%, User columns
  • Top 5 by Memory (right) — Table with Name, Memory MB, User columns

Auto-Refresh

Toggle auto-refresh with configurable intervals: 1s, 2s, 5s, 10s, 30s. Manual refresh button always available.

$ panelica processes list
$ panelica processes list --user=johndoe
$ panelica processes kill --pid=12345

Log Management

Centralized log hub with 6 tabs: Overview, Access Logs, Error Logs, System Logs, Logrotate, and Settings.

Navigate to Monitoring → Log Management. The page has 6 tabs accessible via URL hash (#overview, #access, #errors, #system, #logrotate, #settings).

Overview Tab

Dashboard view with 4 summary cards and auto-refresh controls (Off, 30s, 60s, 5m):

CardShowsDetails
Total Log EntriesTotal countError count (red) and warning count (yellow) below
Error RatePercentageColor-coded progress bar (red >100 errors, orange >10, green otherwise)
HTTP RequestsTotal request count2xx OK (green), 4xx (yellow), 5xx (red) breakdown
Log Disk UsageTotal log sizeCategory count + critical badge if oversized logs exist

Below the cards: Errors by Source (top 12 with progress bars), HTTP Overview (methods, status codes, bandwidth, top IPs), Logrotate Status (config counts, critical alerts), Last Error (most recent error entry), and Storage by Category table (category, size, file count, rotation status, usage %).

Access Logs Tab

HTTP request logs with real-time auto-refresh (Off, 5s, 10s, 30s).

Filters: Search by URL/IP, filter by Method (GET, POST, PUT, DELETE, PATCH, HEAD), filter by Status (2xx, 3xx, 4xx, 5xx), filter by Source (service).

ColumnDescription
TimeTimestamp in locale format
IPClient IP address (monospace)
MethodBadge: GET POST PUT DELETE
StatusBadge: 2xx 3xx 4xx 5xx
URLRequest URL (truncated with ellipsis)
SizeResponse size in KB/MB
ViewClick to open detail modal

The table uses monospace font at 12px with a sticky header. Click any row to open a Request Detail modal showing: time, method, status, IP (with country), size, full URL, referer, response time, source file, user-agent, and raw log line.

Error Logs Tab

Error and warning log entries with real-time auto-refresh.

Filters: Search text, filter by Level (Critical, Error, Warning, Info, Debug, Notice), filter by Source.

ColumnDescription
TimeTimestamp in locale format
LevelColor-coded badge: Critical/Error (red), Warning (yellow), Info (blue), Notice (purple), Debug (gray)
SourceService/source name
MessageError message (truncated)
ViewClick to open detail modal

Each row has a colored left border matching the severity level. Click to open a Log Entry Detail modal showing full message, details, file path with line number, and raw log.

System Logs Tab (Audit)

Panel audit log tracking all system events with auto-refresh.

Filters: Search by IP/user, filter by Event Type (26 event types including login, logout, user/domain/database/ftp/dns/email/plan/ssl/settings operations), filter by Severity (Info, Warning, Critical).

ColumnDescription
TimeRelative time ("Just now", "5m ago", "2h ago") or full date
EventColor-coded icon + formatted event name (e.g., "Api User Create")
SeverityInfo / Warning / Critical
UserUsername or "-"
IPClient IP (monospace)
DetailsTruncated detail text
ViewClick to open detail modal

Click any row to open a detail modal with full event information including JSON-formatted details (indented, scrollable).

Logrotate Tab

Manage log rotation configurations to prevent logs from consuming excessive disk space. Shows active configs, rotation schedules, and critical alerts for oversized logs (>500MB).

Settings Tab

Configure log retention, rotation frequency, compression, and notification settings for log management.

Auto-Refresh

All log tabs support auto-refresh with configurable intervals. A live countdown badge shows the next refresh time. The refresh happens silently in the background (no loading spinner if data already exists).

Log files can also be accessed directly from the command line. The panel interface provides search, filtering, and visual formatting.

API Management

REST API with HMAC-SHA256 authentication, scope-based permissions, rate limiting tiers, usage analytics, and mobile device pairing.

Navigate to Developer → API Management. This feature requires the api_access license feature. The page has 6 tabs and 4 summary cards at the top:

CardDescription
Total API KeysCount of all keys with active key count
Total Requests (24h)Request count in the last 24 hours
Success RatePercentage with progress bar
Avg Response TimeMilliseconds with Good/Slow badge

Tab 1: API Endpoints

Browse all External API endpoints organized by category in an accordion layout. Each category header shows the endpoint count.

ColumnDescription
MethodGET POST PUT PATCH DELETE
EndpointAPI path (e.g., /v1/accounts)
DescriptionWhat the endpoint does
AuthHMAC-SHA256 badge
Rate LimitRate limit info per tier
ActionsTest button to open the API tester modal

Use the search box and category dropdown to filter. The Test Modal lets you build a request: select method, enter path, add query parameters, set headers, write request body (JSON), then click Execute to see the response with status code, response time, and formatted JSON body.

Tab 2: API Keys

Manage your API keys. The tab badge shows active key count.

ColumnDescription
NameKey name + tier badge (Frontend/External)
API KeyClickable code block (click to copy)
StatusActive / Inactive / Revoked
PermissionsFirst 2 scopes as badges + "+X more" tooltip
UsageRequest count + "Last: X ago"
CreatedCreation date
ExpiresExpiration date or "Never"
ActionsCopy, Edit, Regenerate Secret, Revoke, Delete

Creating an API Key:

Key Name (required) — Descriptive name (e.g., "Production API Key")
Description — Optional description for this key
Environment — Production (Live) or Sandbox (Test)
Rate Limit Tier — Select tier (shows requests/min or Unlimited)
Expiration — Never, 30 days, 90 days, or 1 year
Permissions (Scopes) — Scrollable 2-column checkbox grid: accounts:read, accounts:write, domains:read, domains:write, plans:read, *:* (Full Access), etc.
IP Whitelist — Optional: comma-separated IPs/CIDRs (leave empty for all)
Important: The API secret is shown only once during creation. A credentials modal displays the key and secret with copy buttons, plus ready-to-use code examples in cURL, PHP, Python, Node.js, Go, and CLI.

Tab 3: SSH Commands

Command-line interface documentation for the External API via SSH. Shows a table of available commands with: command name (code formatted), description, category badge, and usage example. A connection example card displays the SSH connection command:

$ ssh user@server -p 2222
# Authenticate, then run commands:
> list accounts
> create domain example.com
> exit

Tab 4: Analytics

Usage statistics and monitoring:

  • API Usage by Tier — Area chart showing External vs Panel API request trends over time
  • Request Distribution — External API / Panel API / Success / Error request counts with progress bars
  • Response Times — Average, P95, and P99 latency per API type (in ms)
  • API Request Logs — Real-time audit trail table with: Endpoint, Method badge, Status code, User, IP, Date, Response Time (green = fast, yellow = slow). Click any entry to view full request/response details in a modal.

Tab 5: Quick Start Guide

Ready-to-use code examples in 6 languages: cURL, PHP, Python, Node.js, Go, and CLI. Each tab includes a copy button and covers: list accounts, create account, list domains, create domain, get/update web server config, and get server status.

Tab 6: Mobile Pairing

Connect your mobile device (iOS/Android) to manage the server remotely. This tab is available to ROOT users only and is also accessible via the QR code button in the header navbar.

Pairing Process:

Click Generate Pairing Code
Choose mode: QR Code (scan with Panelica app) or Manual Link (copy and open on mobile)
On your mobile device: open the link or scan the QR code. A form appears to confirm device name and model.
Click Connect Device. Unique API credentials (key + secret) are generated and displayed once.
Save the credentials securely — they cannot be retrieved later.

Security Features:

  • HMAC-SHA256 authentication per device
  • Per-device API keys with unique mpk_ prefix
  • AES-256 encrypted communication
  • Scope-based access control — 11 categories (Domains, Server, Monitoring, Backups, Databases, Email, FTP, DNS, SSL, Actions, Files)
  • Time-limited pairing codes with countdown timer and auto-expiry

Paired Devices Management:

InfoDescription
Device NameUser-defined name (e.g., "My iPhone")
PlatformiOS (black icon) or Android (green icon)
ModelDevice model (e.g., iPhone 15 Pro, SM-G991B)
Key PrefixAPI key prefix for identification
StatusActive or Revoked
Request CountTotal API requests made
Last UsedLast activity timestamp and IP
ActionsEdit Permissions, Revoke (with reason), Delete

App Downloads: Apple App Store and Google Play Store links are displayed in the pairing section.

Authentication

All API requests must include three headers:

HeaderDescription
X-API-KeyYour API key
X-TimestampCurrent Unix timestamp
X-SignatureHMAC-SHA256 signature

Signature calculation:

# stringToSign = METHOD + ENDPOINT_PATH + TIMESTAMP + REQUEST_BODY
# signature = HMAC-SHA256(stringToSign, API_SECRET)

# PHP example:
$message = "GET" . "/v1/accounts" . $timestamp . "";
$signature = hash_hmac('sha256', $message, $API_SECRET);

# Node.js example:
const signature = CryptoJS.HmacSHA256(message, apiSecret).toString();

API Endpoints

ResourceEndpoints
AccountsGET/POST/PUT/DELETE /v1/accounts, suspend, unsuspend, change-password
DomainsGET/POST/PUT/DELETE /v1/domains, suspend, unsuspend, webserver config
DatabasesGET/POST/DELETE /v1/databases
FTPGET/POST/PUT/DELETE /v1/ftp-accounts
EmailGET/POST/PUT/DELETE /v1/email-accounts
DNSGET/POST /v1/dns/zones/:id/records, PUT/DELETE /v1/dns/records/:id
SSLGET /v1/ssl/domains/:id, issue, renew, upload
BackupsGET/POST /v1/backups, restore
ServerGET /v1/server/metrics, /v1/server/status
PlansGET /v1/plans
LicenseGET /v1/license/status, features, plan, quotas
API KeysGET/POST/DELETE /v1/api-keys, regenerate

CloudFlare Integration

Multi-account CloudFlare management with zone control, DNS records, cache purge, and security settings.

Navigate to Domains → CloudFlare. This feature requires the cloudflare license feature.

Connecting Your Account

Go to the Settings tab in the CloudFlare page
Enter your CloudFlare Account Email and API Key
Click Test Connection to verify credentials
Once verified, your CloudFlare zones appear in the Zones tab

Zones Tab

ColumnDescription
Zone NameDomain name managed by CloudFlare
NameserversAssigned CloudFlare nameservers
Plan TypeCloudFlare plan (Free, Pro, Business, Enterprise)
StatusActive or Pending
Account EmailAssociated CloudFlare account
ActionsManage, Sync, Disconnect

DNS Tab

Manage CloudFlare DNS records for the selected zone:

ColumnDescription
Record NameDNS record name
TypeA, AAAA, CNAME, MX, TXT, SRV, etc.
Content/TargetRecord value (IP, hostname, etc.)
TTLTime-to-live (or Automatic)
ProxiedToggle: CloudFlare proxy (orange cloud) or DNS Only
ActionsEdit, Delete

Create/edit records via modal: Record Type, Name, Content, TTL, Proxied toggle, and Priority (for MX/SRV).

Quick Actions Tab

  • Purge All Cache — Clear entire CloudFlare cache
  • Purge Cache by URL — Clear cache for specific URLs
  • Development Mode — Bypass cache for 3 hours during development
  • HTTPS Redirect — Enable/disable Always Use HTTPS
  • Security Level — Set CloudFlare security level
  • DDoS Protection — Toggle Under Attack Mode
  • IP Whitelist — Manage whitelisted IPs

Settings Tab

Connection: Account Email, API Key (masked), verified status, Test/Reconnect/Disconnect buttons.

Zone Settings: SSL/TLS Mode, Minimum TLS Version, HSTS, Always Use HTTPS, Auto HTTPS Rewrites.

Performance: Minify (JS/CSS/HTML), Brotli Compression, Image Optimization, HTTP/2 and HTTP/3 toggles.

Webhooks

Multi-destination webhook system supporting HTTP, Telegram, Slack, Discord, and Email with delivery logging and retry logic.

Navigate to Developer → Webhooks. This feature requires the api_access license feature. 4 summary cards at the top show: Total Webhooks (active count), Deliveries (24h) (failed count), Success Rate (%), and Avg Response time (ms).

The page has 4 tabs:

Tab 1: Webhooks List

ColumnDescription
WebhookName + description
DestinationType badge with icon: Telegram Slack Discord HTTP Email
EventsCount of subscribed events
StatusActive / Inactive / Failed
StatisticsDelivery stats and success rate percentage
ActionsEdit, Test, View Logs, Regenerate Secret, Delete

Creating a Webhook

Name & Description — Webhook name and optional description
Destination Type — Choose one of 5 types:
  • Telegram — Bot Token (from @BotFather), Chat ID (negative for groups), Parse Mode (HTML/Markdown/MarkdownV2)
  • Slack — Webhook URL, Channel (#notifications), Username (default: Panelica)
  • Discord — Webhook URL, Username (default: Panelica)
  • HTTP — URL, Method (POST/PUT/PATCH), Custom Headers (JSON), Timeout (default: 30s)
  • Email — To Addresses, CC Addresses, Subject Template
Event Selection — Subscribe to events by category (checkbox grid with "Select All" per category):
  • User — user.created, user.updated, user.deleted, user.suspended, user.unsuspended, user.login, user.login_failed
  • Domain — domain.created, domain.updated, domain.deleted, domain.suspended, domain.unsuspended
  • SSL — ssl.issued, ssl.renewed, ssl.expired, ssl.expiring_soon
  • Security — security.ip_blocked, security.ip_unblocked, security.brute_force_detected, security.modsec_triggered
  • Backup — backup.created, backup.failed, backup.restored
  • Database — database.created, database.deleted
  • FTP — ftp.created, ftp.deleted
  • Email — email.created, email.deleted
  • System — system.service_started, system.service_stopped, system.backend_started, system.disk_warning, system.cpu_warning
Retry Configuration — Retry Count (0–10, default: 3), Retry Delay (seconds, default: 60), Timeout (5–300 seconds, default: 30)

Tab 2: Available Events

Browse all 9 event categories with their available events. Each event shows: Event ID (code formatted), Description, Category badge, and a Payload Example (JSON preview).

Tab 3: Examples

Code examples in multiple languages showing how to: validate webhook signatures, parse webhook payloads, and handle retries.

Tab 4: Recent Calls

Delivery history with charts: Delivery Status Distribution (donut: Success/Failed/Pending) and Average Response Time (fastest/slowest/total). Below the charts:

ColumnDescription
WebhookName + destination type icon
EventEvent type (code formatted)
StatusSuccess / Failed / Pending / Retrying
ResponseHTTP status code badge
TimeResponse time in ms (green = fast, yellow = slow)
DateTimestamp
ActionsRetry (failed only), View Details

The detail modal shows: full request payload (JSON), response body, status code, response time, retry count, and error message if failed.

All webhook payloads (HTTP type) are signed with HMAC-SHA256. Verify with header X-Panelica-Signature:

$expected = hash_hmac('sha256', $payload, $secret);
if ($expected === $receivedSignature) { // valid }

Cron Jobs

Schedule recurring tasks with domain-level and system-level cron jobs, templates, execution logging, and email notifications.

Navigate to Tools & Settings → Cron Jobs. This feature requires the cron_jobs license feature.

Statistics Cards

Seven cards at the top of the page:

CardDescription
Domain JobsTotal domain cron jobs with active/disabled badge counts
System JobsTotal system cron jobs with active/disabled badge counts
Running JobsJobs currently executing
Success RatePercentage of successful executions
Executions (24h)Total executions in the last 24 hours

The page has 4 tabs: Domain Cron Jobs, System Cron Jobs, Templates, and Logs.

1. Domain Cron Jobs Tab

Cron jobs associated with specific domains. Status filter buttons: All, Enabled (green), Disabled (gray).

ColumnDescription
Task NameCron job name
DomainAssociated domain (clickable link)
CommandFull command to execute (code format)
ScheduleHuman-readable schedule (e.g., “Every hour”)
Next RunCountdown timer (HH:MM:SS) to next execution
Last RunFormatted date/time of last execution
StatusEnabled or Disabled
Success RateSuccesses / total runs percentage
ActionsView Logs, Execute Now, Edit, Toggle, Delete

Bulk Actions: Select multiple jobs with checkboxes, then: Execute Multiple, Enable All, Disable All, Delete All, or Clear All Logs. Each bulk action requires feature permission.

2. System Cron Jobs Tab

Server-wide cron jobs (ROOT only). Same table structure as domain cron jobs, plus additional fields:

  • Run as User — Dropdown to select the system user that will execute the command
  • Priority — 1–10 priority level
  • Lock — Lock icon for system-protected jobs that cannot be modified

Expanded execution statistics per job: total runs, success count, failure count, average duration (ms), and last exit code.

Creating a Cron Job

Click Add Cron Job to open the creation modal:

Schedule Type — Toggle between Simple and Advanced. Simple presets: Every minute, Every 5 minutes, Every 15 minutes, Every hour, Daily (midnight/2am/3am), Weekly (Sunday), Monthly (1st). Advanced: manual cron fields (minute, hour, day_of_month, month, day_of_week).
Task Name — Descriptive name, Description — Optional description
Domain — Select associated domain (for domain cron jobs)
Command — Command to execute (textarea, e.g., php /home/user/example.com/artisan schedule:run)
Timeout — Maximum execution time in seconds (default: 300)
Email on Error — Toggle + email recipient input (conditional, shown when enabled)

Job Actions

  • Execute Now — Run the job immediately (shows running status)
  • Edit — Modify schedule, command, and settings
  • Enable / Disable — Toggle job execution
  • View Logs — Opens expandable accordion with execution history per log entry: started at, duration (ms), exit code, status (success/failed), stdout (code block), stderr (code block), error message, triggered by
  • Clear Logs — Remove execution log entries
  • Delete — Remove the cron job

3. Templates Tab

Pre-built templates displayed as a card gallery, organized by 11 categories:

CategoryIconExample Templates
Backupri-hard-drive-2-lineDatabase backup, file backup
Cleanupri-delete-bin-lineLog cleanup, temp file cleanup
Monitoringri-pulse-lineHealth check, uptime monitor
Securityri-shield-check-lineMalware scan, SSL renewal check
CMSri-wordpress-fillWordPress cron (wp-cron.php)
Frameworkri-code-box-fillLaravel scheduler (artisan schedule:run)
Cacheri-refresh-lineCache clear, OPcache reset
SEOri-earth-lineSitemap generation
Databaseri-database-2-lineMySQL optimize, backup rotation
Serviceri-server-lineService restart, queue worker
Customri-tools-lineCustom shell script

Each template card shows icon, name, description, and category badge. Click Use Template to create a new cron job pre-filled with the template’s schedule, command, and timeout. Templates support placeholders: {DOMAIN}, {DOMAIN_PATH}, {PUBLIC_HTML}, {PHP_VERSION}, {USERNAME}.

4. Execution Logs Tab

Paginated history of all cron executions (50 per page). Status filter: All, Success (green), Error (red).

ColumnDescription
Job NameCron job name
Domain/TypeDomain name or “System”
CommandExecuted command (code format)
StartedStart timestamp
DurationHuman-readable duration (ms/s/m)
StatusSuccess or Error
Exit CodeProcess exit code
Triggered ByUsername who triggered (manual) or “Schedule”
ActionsView details (expand), Delete

Click a row to expand and see full stdout/stderr output, error messages, and execution metadata.

Cron Expression Reference

FieldAllowed ValuesExample
Minute0-59*/5 = every 5 minutes
Hour0-232 = 2:00 AM
Day of Month1-311 = first day
Month1-12*/3 = quarterly
Day of Week0-7 (0,7=Sun)1-5 = weekdays
$ panelica cron list
$ panelica cron create --schedule="*/5 * * * *" --command="php /home/user/site/artisan schedule:run"
$ panelica cron delete --id=3
$ panelica cron enable --id=3

SSH & Terminal

SSH key management with multiple key types, active session monitoring, web-based multi-tab terminal, and SSH configuration.

SSH Keys Tab

Navigate to Access → SSH Access. This feature requires the ssh_access license feature.

ColumnDescription
Key NameDescriptive name for the key
TypeRSA, ED25519, ECDSA, or DSA
FingerprintSHA256 hash for identification
User/OwnerAssociated system user
CreatedWhen the key was added
Last UsedLast authentication timestamp
StatusActive / Inactive / Revoked
ActionsEdit, Delete, Revoke, Copy, Download

Adding a Key: Click Add Key to paste an existing public key, or Generate to create a new key pair (private key is downloaded once). Select key type, assign to a user, and set permissions.

Active Sessions Tab

View currently connected SSH sessions in real-time:

ColumnDescription
UsernameConnected user
Client IPClient IP address
TerminalTerminal type
Login TimeConnection start time
DurationSession duration
StatusConnected / Disconnected
ActionsTerminate, View Logs

Bulk: Terminate Selected Sessions, Logout All Users.

SSH Configuration Tab

Server-wide SSH daemon settings:

SettingOptionsDescription
PermitRootLoginyes / no / without-passwordAllow root SSH login
PasswordAuthenticationToggleAllow password-based login
PubkeyAuthenticationToggleAllow SSH key login
SSH PortNumberSSH listening port
MaxAuthTriesNumberMaximum authentication attempts
X11ForwardingToggleAllow X11 display forwarding
AllowTcpForwardingToggleAllow TCP port forwarding
UseDNSToggleDNS lookup for connecting clients

Configuration backups are created automatically. You can Restore from a previous backup or Download the current config.

Web Terminal

Navigate to Access → Web Terminal for a full browser-based terminal powered by xterm.js:

  • Multi-tab sessions — Open multiple terminal tabs simultaneously
  • Local Terminal — Direct PTY connection to the server
  • SSH Connections — Save and connect to remote servers via SSH
  • Dark theme with Neovim-like color scheme and monospace fonts (Monaco, Fira Code, JetBrains Mono)
  • Auto-reconnect on connection loss
  • Responsive sizing — Terminal resizes with browser window

Saved SSH Connections: Create and manage SSH connection profiles with name, host, port, username, and authentication type (password or private key). Test, edit, or delete saved connections.

$ panelica ssh keys list
$ panelica ssh keys add --key="ssh-ed25519 AAAA... user@host"
$ panelica ssh keys generate --type=ed25519

Connection Details

# SSH connection
ssh username@server-ip -p 22

# Using SSH key
ssh -i ~/.ssh/id_ed25519 username@server-ip

SSH access is controlled by the user's hosting plan (ssh_access feature). Users connect to their chroot jail environment and can only see their own files and processes.

Panel Settings

Global server and panel configuration with 12 category tabs. Available to ROOT users only.

Navigate to Tools & Settings → Panel Settings. The settings dashboard shows 12 category cards. Click any card to open that settings tab.

Settings Categories

CategoryIconDescription
Generalri-settings-3-lineAdmin email, hostname, timezone, maintenance mode, session configuration
Brandingri-brush-lineWhite-label customization (requires white_label feature)
Securityri-shield-check-line2FA enforcement, password policies, audit logging, session binding
Rate Limitri-speed-lineLogin, user creation, and API rate limiting per plan
Performanceri-bar-chart-lineDisk usage and bandwidth cache settings
Resource Isolationri-cpu-lineCgroups v2 resource isolation configuration
Monitoringri-bar-chart-grouped-lineMonitoring and alerting configuration
IP Addressesri-global-lineServer IP management, NAT mapping
Servicesri-server-lineWeb, mail, database, DNS, FTP, security services
Backupri-folder-shield-lineBackup retention, encryption, and rate limiting
Notificationsri-notification-3-lineEmail, in-panel, and webhook notification channels
Languagesri-translate-2Multi-language support (20+ languages)

General Settings

Basic server and session configuration:

SettingTypeDescription
Admin EmailTextPrimary administrator email address
Server HostnameTextServer hostname for identification
Panel TimezoneTextServer timezone setting
Maintenance ModeToggleEnable/disable maintenance mode

Session Configuration:

SettingTypeDescription
Session DurationNumberSession lifetime in minutes
Access Token DurationNumberAPI access token expiry
Refresh Token DurationNumberAPI refresh token expiry
Remember Me DurationNumber"Remember me" cookie lifetime
Max Sessions Per UserNumberConcurrent session limit
Session Inactivity TimeoutNumberIdle timeout before logout
Auto Refresh EnabledToggleAutomatically refresh tokens before expiry
Refresh Before ExpiryNumberSeconds before expiry to trigger refresh

Security Settings

Two-Factor Authentication:

  • Enforce 2FA for ROOT — Require TOTP for root users
  • Enforce 2FA for Reseller — Require TOTP for reseller users

Password Policy:

SettingDescription
Minimum LengthMinimum password character count
Require UppercaseAt least one uppercase letter
Require NumbersAt least one digit
Require Special CharactersAt least one special character

Session Security:

  • Session IP Binding — Lock session to originating IP address
  • Concurrent Login Prevention — Prevent simultaneous logins from different locations

Audit Logging:

SettingDescription
Audit EnabledEnable/disable audit logging system
Retention DaysHow many days to keep audit logs
Log User ActionsTrack user operations
Log Admin ActionsTrack administrator operations
Log Failed OperationsRecord failed action attempts

Reserved Usernames: Enable and maintain a list of usernames that cannot be registered (e.g., admin, root, system).

User Deletion Policy: Configure whether user deletion is immediate or has a grace period (configurable days) before permanent removal.

Rate Limiting

Login Rate Limiting:

SettingDescription
Rate Limit EnabledEnable/disable login rate limiting
Max Login AttemptsMaximum failed attempts before lockout
Login Lockout DurationLockout time in minutes
Rate Limit WindowTime window for counting attempts

User Creation Rate Limiting: Prevent mass account creation by limiting the number of users that can be created per hour, with configurable lockout duration.

API Rate Limiting (Per Plan): Set per-minute, per-hour, and burst limits individually for each plan tier (Starter, Professional, Business, Enterprise).

Performance Settings

SettingTypeDescription
Disk Usage Cache EnabledToggleCache disk usage calculations
Disk Usage Cache TTLNumberCache lifetime in seconds
Bandwidth Cache EnabledToggleCache bandwidth statistics
Bandwidth Cache TTLNumberCache lifetime in seconds

Resource Isolation

Cgroups v2 resource isolation configuration (requires resource_isolation_controls license feature):

SettingTypeDescription
Resource Isolation EnabledToggleEnable/disable Cgroups v2 resource isolation globally
Disabling resource isolation shows a warning modal explaining the consequences: resource limits cannot be enforced per-domain, users can exceed allocated resources, all users share limits, and system performance may be affected. Confirm to proceed.

Monitoring Settings

Configure monitoring and alerting thresholds from the Monitoring tab:

  • Real-time monitoring — Enable/disable real-time resource monitoring
  • Alert thresholds — CPU, RAM, disk, and bandwidth warning levels
  • Monitoring interval — Data collection frequency
  • Retention period — How long to keep historical monitoring data

Services Management

Manage all server services from the Services tab. Each service shows a status indicator (Running / Stopped / Error) with restart controls:

  • Web Servers — Nginx, Apache configuration and restart controls
  • Mail Services — Postfix, Dovecot, SpamAssassin settings
  • Database — MySQL, PostgreSQL global settings
  • DNS — BIND named server configuration
  • FTP — ProFTPD server settings
  • Security — Fail2ban, ClamAV, ModSecurity global config

Each service row has: Enable/Disable toggle, Restart button, Reload button, and Configure link to service-specific settings.

Backup Settings

General Settings:

SettingTypeDescription
Retention DaysNumber (1-365)How long to keep backups (default: 10)
Storage PathRead-only/opt/panelica/var/backups/server/

Security:

SettingTypeDescription
Encryption EnabledToggleEncrypt backup files
Delete Confirmation RequiredToggleRequire extra confirmation for backup deletion

Rate Limiting:

SettingTypeDescription
Create Rate LimitToggle + NumberMaximum backups created per hour (default: 5)
Restore Rate LimitToggle + NumberMaximum restores per hour (default: 5)
Restore Concurrent LimitNumberMaximum simultaneous restore operations (default: 2)
Verify Checksum on RestoreToggleVerify backup integrity before restoring
Require Password for RestoreToggleRequire password confirmation for restore operations

Defaults:

SettingTypeOptions
Default Backup TypeSelectFull or Incremental
Compression LevelSelect1 (Fast), 6 (Balanced), 9 (Maximum)

Branding & White Label

Customize the panel appearance from the Branding tab (requires white_label license feature):

SettingTypeDescription
Panel NameTextCustom panel name displayed in header
Company NameTextCompany name for branding
Logo (Light Mode)File uploadDrag-and-drop logo for light theme. Preview + delete.
Logo (Dark Mode)File uploadSeparate logo for dark theme
FaviconFile uploadBrowser tab icon
Primary ColorColor pickerHex color input for primary accent color
Logo HeightNumberLogo display height in pixels
Footer TextTextCustom footer text
Hide Panelica BrandingToggleRemove Panelica branding from the panel

After saving, click Reset to Defaults to revert all branding to Panelica defaults. Changes auto-regenerate branding files.

IP Address Management

Manage server IP addresses from the IP Addresses tab:

  • Add IP — Register shared or dedicated IP addresses
  • Assign IPs — Assign IPs to specific users or domains
  • NAT Mapping — Configure internal/external IP mapping for cloud environments (AWS, GCP, etc.)
  • Whitelist/Blacklist — IP-based access control lists
  • Network Interface — View and manage network interface bindings

Notification Settings

Configure system notification channels from the Notifications tab:

  • Email Notifications — Enable/disable email delivery, configure SMTP templates
  • In-Panel Notifications — Real-time in-panel notification bell
  • Webhook Notifications — Send alerts to external URLs (Slack, Telegram, etc.)

Configure triggers for: disk full, service down, security alerts, user actions, backup completion, SSL expiry, and more. Each event type can be independently enabled/disabled per channel.

Multi-Language

Panelica supports 20+ languages including English, Turkish, German, French, Spanish, Portuguese, Russian, Chinese, Japanese, Korean, Arabic, and more.

  • Default Language — Select the server-wide default language
  • Available Languages — Enable/disable languages users can select
  • Translation Key Editor — Edit individual translation strings
  • Translation Scanner — Scan for missing translation keys
  • Language Pack Management — Import/export language packs
$ panelica settings list
$ panelica settings set --key="admin_email" --value="[email protected]"
$ panelica settings get --key="maintenance_mode"

System Updates

Manage service versions, apply updates, view changelogs, and rollback across all server components.

Navigate to Support → System Updates. The page displays 4 summary cards at the top:

CardDescription
Total ServicesNumber of tracked services/packages
Up to DateServices running the latest version Green
Updates AvailableServices with newer versions available Yellow
CategoriesNumber of service categories

Available Updates

When updates are available, they appear in a table with the following columns:

ColumnDescription
PackageDisplay name and package identifier
Current VersionCurrently installed version
Latest VersionNewest available version
ChannelStable / Beta / Dev
SizeDownload size of the update
SecuritySecurity update indicator with severity level (if applicable)
ActionsUpdate button to apply the update

Toolbar buttons: Check Again (refresh available updates), Expand All / Collapse All (manage category sections), Refresh (refresh service versions).

Installed Services

All installed services are grouped into collapsible category accordions. Each category shows a badge with the service count and whether updates are available.

CategoryExamples
WebNginx, Apache, Caddy
DatabaseMySQL, MariaDB, PostgreSQL, Redis
RuntimePHP versions, Node.js, Python
EmailPostfix, Dovecot, SpamAssassin
FTPProFTPD, vsftpd
DNSBIND, PowerDNS
SecurityFail2ban, ClamAV, ModSecurity
MonitoringPanelica Monitor
WebAppsphpMyAdmin, Roundcube
PanelPanelica Panel, License Agent

Each service within a category shows: service name, current version, status badge (Up to Date or Update Available), and action buttons (Update, Rollback).

Update Process

Click the Update button on the service or package
A confirmation modal appears showing: current version, new version, download size, and security status
Review the Changelog (scrollable) and any Breaking Changes warnings
Click Confirm Update to proceed
A progress bar shows real-time update status. Services are restarted automatically.
If an update includes breaking changes, they are highlighted in red within the confirmation modal. Review carefully before proceeding.
$ panelica update check
$ panelica update install
$ panelica update rollback
$ panelica update channel --set=stable

Release Channels

ChannelStabilityDescription
StableProduction-readyThoroughly tested releases. Recommended for production servers.
BetaNear-stableUpcoming features with minor issues possible. Good for staging.
AlphaDevelopmentLatest features, may have bugs. For testing environments only.

Rollback

Panelica uses a WAL-based update system with automatic rollback support. If an update fails or causes issues, revert to the previous version.

Click the Rollback button next to a service. A confirmation modal warns that the service will be restored from the latest backup and restarted. Health checks run after every update; if they fail, the system rolls back automatically.

Changelog

View the complete version history at Support → Changelog. Each release entry shows a timeline with version number, release date, release type (major/minor/patch), and a summary. Changes are color-coded by type:

TypeColorDescription
NewGreenNew features and capabilities
ImprovedBlueEnhancements to existing features
FixedYellowBug fixes
BreakingRedChanges that may require action
SecurityRedSecurity patches
DeprecatedGrayFeatures scheduled for removal

Package Manager

Search, install, upgrade, and uninstall system packages from the panel. This feature requires the package_manager license feature. Available to ROOT users only.

Navigate to Tools & Settings → Package Manager. The page has 3 tabs and a category sidebar.

Package Categories

The left sidebar filters packages by category:

CategoryIconExamples
All Packagesri-apps-lineAll available packages
Media & Graphicsri-film-lineffmpeg, ffmpegthumbnailer, imagemagick
Developmentri-code-s-slash-linenodejs, python3-pip, git
Web Serversri-server-linenginx, apache2, caddy
Databasesri-database-2-linemysql, mariadb, redis
Network Toolsri-global-linecurl, wget, nmap
System Toolsri-settings-3-linehtop, tmux, screen
Securityri-shield-check-linefail2ban, clamav, ufw
Utilitiesri-tools-lineunzip, zip, tar

Search for packages by name or description. Results appear as you type (with debounce). A Popular Packages section shows 12 commonly used packages for quick installation:

  • ffmpeg — Media transcoding and processing
  • imagemagick — Image manipulation toolkit
  • nodejs — JavaScript runtime
  • python3-pip — Python package manager
  • git — Version control system
  • htop — Interactive process viewer
  • curl / wget — URL transfer tools
  • unzip / zip — Archive utilities
  • screen — Terminal multiplexer

Each result shows the package name, description, installation status badge, and an Install button. Results are paginated (20 per page).

Installed Tab

View all currently installed packages (badge in tab header shows total count). Search field with debounced filtering.

ColumnDescription
Package NamePackage name
VersionCurrent installed version (code format)
SizePackage size on disk
DependenciesNumber of package dependencies
ActionsRemove and Info buttons

Paginated at 50 items per page.

Upgradable Tab

Packages with available upgrades. Risk filter buttons at the top with count badges:

  • Critical — Security-critical upgrades (red)
  • High — High-priority upgrades (orange)
  • Medium — Standard upgrades (blue)
  • Low — Minor version bumps (green)

When a risk filter is selected, the apt upgrade command for those packages is shown with a Copy button and a Terminal link button for direct execution.

ColumnDescription
PackagePackage name
Current VersionCurrently installed version (code format)
New VersionAvailable upgrade version (code format)
Risk LevelColor-coded badge
ActionsUpgrade and View Details buttons
Critical and high-risk upgrades show a Warning Confirmation Modal before proceeding. The modal shows the risk explanation, affected package list, and a “I understand the risks” checkbox that must be checked before confirming. Options: Execute (run apt upgrade), Copy & Navigate to Terminal, or Copy Only.

Installation Progress

During install, upgrade, or uninstall operations, a progress modal shows: operation description, progress percentage, progress bar, and status indicator (In Progress / Completed / Failed).

$ panelica packages search --name="ffmpeg"
$ panelica packages install --name="ffmpeg"
$ panelica packages uninstall --name="ffmpeg"
$ panelica packages upgradable
$ panelica packages upgrade --name="curl"

Server Info

Comprehensive hardware and software information about the server across 5 tabs: System, CPU, Memory, Storage, and Network.

Navigate to Tools & Settings → Server Info. The page shows 4 overview cards at the top:

CardDescription
SystemOS name and architecture
CPUCore count and thread count
MemoryUsage percentage with progress bar
UptimeDays, hours, and minutes since last reboot

System Tab

FieldDescription
HostnameServer hostname
Operating SystemOS version and codename
KernelLinux kernel version
ArchitectureCPU architecture (x86_64, aarch64, etc.)
TimezoneServer timezone
UptimeSystem uptime
Load Average1, 5, and 15 minute load averages (color-coded badges)
VirtualizationKVM, VMware, Xen, LXC, Docker, or Bare Metal
System VendorHardware manufacturer
System ProductServer model/product name
BIOS VersionFirmware version

A side panel shows server status (Online / Offline) and running time.

CPU Tab

CPU Information:

FieldDescription
ModelCPU model name
CoresPhysical core count
ThreadsTotal thread count (including hyper-threading)
SocketsNumber of CPU sockets
Current FrequencyCurrent clock speed in MHz
Max FrequencyMaximum turbo clock speed in MHz
TemperatureCPU temperature with color badge: Normal / Warm / Hot

Cache Information: L1 Data, L1 Instruction, L2, and L3 cache sizes.

Memory Tab

Memory (RAM):

FieldDescription
TotalTotal RAM in GB
UsedUsed RAM in GB
FreeFree RAM in GB
AvailableAvailable RAM in GB (free + reclaimable)
CachedCached memory in GB
BuffersBuffer memory in GB
Usage %Usage percentage with color-coded progress bar

Swap: Total, Used, and Free swap space in GB.

A donut chart shows memory distribution: Used, Cached, Buffers, and Free.

Storage Tab

ColumnDescription
DeviceDisk name and model
Mount PointFilesystem mount point (e.g., /, /home)
TypeSSD / HDD
SizeTotal capacity in GB
UsedUsed space in GB
AvailableAvailable space in GB
Usage %Progress bar with color coding (green < 70%, orange < 90%, red ≥ 90%)

A donut chart provides a visual overview of storage usage per mount point.

Network Tab

ColumnDescription
InterfaceNetwork interface name (e.g., eth0, ens18)
StatusUp / Down
IP AddressIPv4 address (and IPv6 if available)
MAC AddressHardware MAC address
RX BytesTotal received data (formatted)
TX BytesTotal transmitted data (formatted)
SpeedInterface speed (e.g., 1000 Mbps)
$ panelica info system
$ panelica info cpu
$ panelica info memory
$ panelica info disk
$ panelica info network

CLI Reference

Complete command-line reference for the panelica binary at /opt/panelica/bin/panelica.

Domain Commands

$ panelica domains list
$ panelica domains create --domain=example.com --user=johndoe --php=8.3
$ panelica domains delete --domain=example.com
$ panelica domains suspend --domain=example.com
$ panelica subdomains create --domain=example.com --subdomain=blog

User Commands

$ panelica users list
$ panelica users create --username=johndoe --email=[email protected] --role=user --plan=starter
$ panelica users delete --username=johndoe
$ panelica users suspend --username=johndoe
$ panelica users change-password --username=johndoe

PHP Commands

$ panelica php versions
$ panelica php switch --domain=example.com --version=8.4
$ panelica php extensions --version=8.3
$ panelica php install-extension --version=8.3 --extension=redis

Database Commands

$ panelica db list
$ panelica db create --name=mydb --user=johndoe
$ panelica db delete --name=johndoe_mydb

Email Commands

$ panelica email list --domain=example.com
$ panelica email create --account=[email protected] --password=SecurePass
$ panelica email delete --account=[email protected]

SSL Commands

$ panelica ssl issue --domain=example.com
$ panelica ssl renew --domain=example.com
$ panelica ssl status --domain=example.com

Backup Commands

$ panelica backup create --type=full
$ panelica backup create --domain=example.com
$ panelica backup list
$ panelica backup restore --file=backup_20260213.tar.gz

Service Commands

$ panelica services list
$ panelica services restart --name=nginx
$ panelica services stop --name=apache
$ panelica services start --name=apache

Security Commands

$ panelica security scan # Run security advisor
$ panelica security firewall-status
$ panelica security block-ip --ip=1.2.3.4 --reason="Malicious" --duration=24h

License Commands

$ panelica license status
$ panelica license activate PNLC-XXXX-XXXX-XXXX-XXXX
$ panelica license deactivate
$ panelica license features