Releases: tuxxin/iNetPanel
v1.24 — Backup Restore with CF Migration Support
New Features
- Backup Restore — Full account restore from backup archives with 4-step wizard: Upload (web with progress bar, FTP, SSH/SCP) → Review (username, domains, ports, databases) → Cloudflare routing check with override → Execute with progress and credential summary.
- Domain availability checker —
inetp check_domainsuses RDAP (free, no API key) for single, bulk, and auto-generated variant checks. - CF tunnel migration — Restore override adds route to new tunnel and removes from old tunnel automatically. Searches all account tunnels for domain conflicts, not just the current server's tunnel.
Bug Fixes
- Tunnel creation fails on fresh install — Removed invalid
tunnel_secretfrom API-managed tunnel creation. - Beta channel update detection — Was always showing "up to date"; now compares commit SHAs.
- Beta version string stacking — Stripped
-beta.x-beta.ychains to just base + latest hash. - Domain deletion "Connection error" — FPM reload in
remove_domain.shkilled panel worker; deferred to after response. - Restore connection reset at 95% — Same FPM reload issue in
restore_account.sh. - Restore FTP login — Fixed nologin shell, sudo permissions, password (now copies root's shadow hash).
- Restore parse on large backups — Replaced full
tar -tzfbuffering with streaming grep pipes (constant memory). - CF CNAME safety —
removeTunnelHostname()now only deletes CNAME if it points to the specific tunnel being cleaned up, preventing breakage when domains are migrated between servers. - CF domain conflict detection —
check_domainandadd_domainnow search all account tunnels, not just the current server's.
v1.23.3 — Fix tunnel creation, beta update detection, add domain checker
Bug Fixes
- Tunnel creation fails on fresh install — Removed
tunnel_secretfromcreateTunnel(). API-managed tunnels (config_src: cloudflare) reject client-side secrets; Cloudflare's Rust serde threw a JSON deserialize error. Token is already retrieved separately viagetTunnelToken(). - Beta channel update detection broken —
update_check.phpandsettings.phpcheck_updatesaction only queried GitHub releases API, never checking main branch commits. Beta channel now compares latest commit SHA against installed SHA to properly detect available updates.
New Features
- Domain availability checker — Added
check_domains.sh(inetp check_domains). Uses RDAP (free, no API key). Supports single domain, bulk file (-f), and auto-generated variant checks (-g keyword).
v1.23.2
Hotfix
- Installer fails to download panel source —
install_LAMP.shwas pointing atinetpanel.tuxxin.com/inetpanel-latest.zip(404). The zip is a GitHub release asset, not hosted on the website. Fixed URL togithub.com/tuxxin/iNetPanel/releases/latest/download/inetpanel-latest.zip.
Install / Update
bash <(curl -s https://inetpanel.tuxxin.com/latest)v1.23.1
Hotfix
- Multi-PHP install fails silently on fresh installs — The
/var/www/inetpanel/storage/directory wasn't created during deployment, causing status files and logs to never be written. The API now creates the directory if missing and returns a clear error if it can't.
Install / Update
bash <(curl -s https://inetpanel.tuxxin.com/latest)Existing installs: run inetp panel_update from the admin panel or CLI.
v1.23
New: Release Channels (Stable vs Beta)
- Installer now uses release tarballs instead of
git clone— the repo (mainbranch) is now beta code, while GitHub Releases are stable.inetpanel.tuxxin.com/latest— stable installer (downloads release zip)inetpanel.tuxxin.com/latest-beta— beta installer (clonesmainbranch)
- Settings → Updates → Release Channel — toggle between stable and beta without reinstalling. Stable pulls from tagged releases, beta pulls the latest commit from
main.
Fixes
- Multi-PHP install broken on all environments —
systemd-run --scopefails silently in LXC/Proxmox containers with no fallback, leaving the status file stuck at "running" forever. Added direct background execution fallback when systemd-run fails. Simplified the API exec() call and set a 3-minute timeout.
Install / Update
bash <(curl -s https://inetpanel.tuxxin.com/latest)Existing installs: run inetp panel_update from the admin panel or CLI.
v1.22.3
Fixes
- Dashboard disk stats inflated —
disk_free_space()excludes ext4 reserved blocks (~5%), making "used" appear ~10 GB higher than reality. Now usesdfoutput for accurate numbers matching what the OS reports. - PHP 5.6 install timeout — Polling timeout increased from 120s to 360s. Older PHP versions take longer to install via apt.
- SSH port fix for LXC containers — Previous fix only checked
is-activeonssh.socket, which misses cases where the socket is enabled but not yet active (common in LXC). Now checkslist-unit-filesandmasks the socket unit to prevent reactivation.
Install / Update
curl -o latest https://inetpanel.tuxxin.com/latest && bash latestExisting installs: run inetp panel_update from the admin panel or CLI.
v1.22.2
Fixes
- SSH port ignored on Debian 12 — Installer now disables
ssh.socket(systemd socket activation hardcodes port 22, overridingsshd_config Port 1022) - SSL cert reissue blocked after self-signed fallback — Cleans up non-LE certs from
/etc/letsencrypt/live/before certbot retry - CertBot DNS propagation timeout — Added
--dns-cloudflare-propagation-seconds 30(default 10s was too short) - Dashboard graph empty on fresh install —
inetpanel_statswas missing frommanage_cron.shallowed list, so the stats collector cron was never created
New
inetp optimize_server— Auto-tunes Apache2mpm_eventand MariaDB InnoDB/buffers based on detected RAM, CPU cores, disk type (SSD/HDD), and hosted domain count. Dry-run by default,--applyto write changes with automatic config backups.
Install / Update
curl -o latest https://inetpanel.tuxxin.com/latest && bash latestExisting installs: run inetp panel_update from the admin panel or CLI.
v1.22.1
Logo rebrand & dark mode fixes (v1.22.1)
New branding
- New logo — redesigned iNetPanel logo (PNG with transparency), replaces old
.webp - Favicon — new
Logo-Icon.webpfavicon added to admin and account portals - Logo automatically inverts to white in dark mode via CSS filter
- Account portal logo resized to 28px for cleaner navigation fit
Dark mode — root-level fix
The core issue with dark mode was that Bootstrap 5.3 uses internal CSS variables (--bs-body-color, --bs-table-color, --bs-border-color, etc.) that our custom [data-theme="dark"] wasn't overriding. This caused all Bootstrap components to inherit dark text colors regardless of theme.
Fix: Override all Bootstrap 5.3 internal CSS variables at the [data-theme="dark"] root level. This makes every Bootstrap component — tables, cards, headings, links, borders — automatically inherit correct dark mode colors without needing per-component overrides.
Specific fixes
- Table headers —
.table-light<thead>elements now display light text (previously black on dark background) - Nav tabs — dark mode styling for tabbed interfaces (multi-php, firewall pages)
- Bootstrap 5.3 subtle utilities —
bg-success-subtle,bg-primary-subtle,bg-warning-subtle,bg-danger-subtlewith proper dark variants - Close button — filter inversion for visibility on dark backgrounds
- Warning badges — retain dark text for contrast on yellow background
- Table borders — consistent border color in dark mode
Pages fixed
Accounts, DNS, Email, SSL, Firewall, Multi-PHP, Services, and all other pages that use Bootstrap tables, cards, or badges.
Closes #10
v1.22
Dark mode audit & fixes (v1.22)
Addresses #10 — dark mode inconsistencies and unreadable text.
CSS additions (58 new dark mode rules)
- Badges —
bg-light,text-dark,bg-secondarynow theme-aware - Alerts — info, success, warning, danger with proper dark backgrounds and contrast
- Pre/code blocks — proper dark background and text colors
- Buttons —
outline-dark,outline-secondary,btn-lightvariants - Components — breadcrumbs, nav pills, pagination, input groups, progress bars, accordion, offcanvas, toast
- Logo — brightness inversion filter for dark sidebar backgrounds
Hardcoded color fixes
- Dashboard chart grid/tick colors now adapt to theme
- QR code colors invert in dark mode (light modules on dark background)
- Removed hardcoded
#e8f4f8alert background in settings - WireGuard code block uses theme-aware
bg-lightinstead ofbg-white
Closes #10
v1.21.9
Fix PHP package extension install/remove (v1.21.9)
Same root cause as v1.21.8 — dpkg triggers restart php-fpm during apt-get install/remove of individual extensions (e.g. php8.5-uploadprogress), killing the PHP worker mid-request.
Changes
- Extension install/remove now runs inside
systemd-run --scopeto escape the FPM cgroup - Frontend uses async status polling with progress modal (matches multi-php pattern)
- Modal only shown after API confirms operation started (prevents stuck modal on errors)
- Added
pkg_statusAPI endpoint for polling extension install/remove progress