<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>CtrlPanel.gg Blog</title>
        <link>https://ctrlpanel.gg/blog</link>
        <description>CtrlPanel.gg Blog</description>
        <lastBuildDate>Fri, 23 Oct 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[CtrlPanel 1.3.0 is now in open beta]]></title>
            <link>https://ctrlpanel.gg/blog/1.3.0-open-beta</link>
            <guid>https://ctrlpanel.gg/blog/1.3.0-open-beta</guid>
            <pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[CtrlPanel 1.3.0 is ready for public beta testing, and it is one of our biggest updates yet.]]></description>
            <content:encoded><![CDATA[<p>CtrlPanel 1.3.0 is ready for public beta testing, and it is one of our biggest updates yet.</p>
<p>We want to be upfront: 1.2.0 took us nearly ten months to reach a stable release, and that hurt. We over-promised, under-delivered, and then spent months stabilizing what we should have gotten right the first time. 1.3.0 went the other way. Development started right after 1.2.0 shipped in April, and the beta is here roughly six months later - and it is still a larger update in every measurable sense.</p>
<p>More than 300 commits. Over 50 pull requests. Two-factor authentication, a rebuilt payments flow, reversible server cancellations, a redesigned settings page, database snapshots, and a long list of fixes for bugs you told us about. This is also the first release standing on the new modular extension system we promised when we moved to MPL 2.0 - the groundwork for the addon ecosystem we keep talking about.</p>
<p>But this is a beta, so let's be clear about what that means.</p>
<div class="theme-admonition theme-admonition-danger admonition_xJq3 alert alert--danger"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"></path></svg></span>danger</div><div class="admonitionContent_BuS1"><p>Do not run this on a production instance. This build may contain bugs we have not found yet, and <strong>rolling back after an update is not possible</strong>. If you want to test it, clone your database and set up a second instance on a separate domain. Always back up first.</p></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-the-beta">Getting the Beta<a href="https://ctrlpanel.gg/blog/1.3.0-open-beta#getting-the-beta" class="hash-link" aria-label="Direct link to Getting the Beta" title="Direct link to Getting the Beta" translate="no">​</a></h2>
<p>The beta documentation is live and versioned. Before you use it, make sure the version selector in the top-right of the docs is set to <strong>1.3.0 (Public Beta)</strong>.</p>
<ul>
<li class=""><strong>Updating from 1.2.x?</strong> Follow the <a href="https://ctrlpanel.gg/docs/beta/updating" target="_blank" rel="noopener noreferrer" class="">beta update guide</a>. It covers the maintenance window, pulling the <code>development</code> branch, updating dependencies, running migrations, and the new <code>permissions:sync</code> step. Updating to the beta is only supported from the latest stable release, so make sure you are on 1.2.x first.</li>
<li class=""><strong>Installing fresh?</strong> Follow the <a href="https://ctrlpanel.gg/docs/beta/install" target="_blank" rel="noopener noreferrer" class="">installation guide</a> for Debian and Ubuntu.</li>
<li class=""><strong>Not sure what to test?</strong> The <a href="https://ctrlpanel.gg/docs/beta/beta-testing" target="_blank" rel="noopener noreferrer" class="">beta testing checklist</a> lists the features and fixes most worth your attention.</li>
<li class=""><strong>Want the full details?</strong> Read the <a href="https://ctrlpanel.gg/docs/beta/changelog" target="_blank" rel="noopener noreferrer" class="">changelog</a>.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-changed">What's Changed<a href="https://ctrlpanel.gg/blog/1.3.0-open-beta#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-features--improvements">New Features &amp; Improvements<a href="https://ctrlpanel.gg/blog/1.3.0-open-beta#new-features--improvements" class="hash-link" aria-label="Direct link to New Features &amp; Improvements" title="Direct link to New Features &amp; Improvements" translate="no">​</a></h3>
<ul>
<li class=""><strong>Two-factor authentication.</strong> TOTP with QR setup and recovery codes, built as a module so additional methods can be added without touching core files.</li>
<li class=""><strong>Reversible server cancellations.</strong> Canceled servers now show a <strong>Resume</strong> button instead of Cancel.</li>
<li class=""><strong>Reworked payments.</strong> Admins get manual controls on every payment - confirm, recheck, cancel, reopen, and a one-way refund. Credits are granted only on the transition to paid, so a payment can never be granted twice.</li>
<li class=""><strong>Per-gateway handling fees.</strong> None, percentage, or fixed, with an optional minimum and maximum - shown at checkout, in the order total, in the admin payments table, and on invoices.</li>
<li class=""><strong>Smarter checkout.</strong> Gateways that do not support your currency or fall below their minimum are disabled with the reason. Totals recalculate live, and coupons now apply before tax.</li>
<li class=""><strong>More currencies</strong>, matching what the payment gateways actually accept.</li>
<li class=""><strong>Redesigned settings page.</strong> Grouped and described sections, conditional fields, unit labels, a fixed mobile layout, and masked secrets.</li>
<li class=""><strong>Clearer server status badges</strong> and a sort control on the server creation page.</li>
<li class=""><strong>Ticket priority and category</strong> can now be changed by staff, and the admin ticket list sorts by priority.</li>
<li class=""><strong>Better admin UX.</strong> Delete confirmations on every delete button, single-target mass notifications, and a settings page that enforces its own permission.</li>
<li class=""><strong>Optional protection.</strong> A minimum Discord account age for linking, and a verified email before referral rewards - both off by default.</li>
<li class=""><strong>Privacy Policy / Terms checkbox</strong> on registration, shown when configured.</li>
<li class=""><strong>Database snapshots</strong> with one command - create and restore without <code>mysqldump</code> or any external tool.</li>
<li class=""><strong>Log rotation.</strong> Daily compression with retention, so single log files no longer grow out of control.</li>
<li class=""><strong>Redis</strong> is now the default store for cache, sessions, queues, and settings (still configurable).</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="bug-fixes">Bug Fixes<a href="https://ctrlpanel.gg/blog/1.3.0-open-beta#bug-fixes" class="hash-link" aria-label="Direct link to Bug Fixes" title="Direct link to Bug Fixes" translate="no">​</a></h3>
<ul>
<li class="">Fixed installations failing on MySQL/MariaDB due to incompatible migrations.</li>
<li class="">Fixed customised default roles being overwritten by updates and reseeds.</li>
<li class="">Fixed a successful Stripe payment being marked as failed when tax was enabled.</li>
<li class="">Fixed invoices not being generated - they now generate reliably and are emailed to the customer as a PDF.</li>
<li class="">Fixed incorrect checkout totals when coupons and partner discounts were involved.</li>
<li class="">Fixed payment emails and payment lists showing a hard-coded "Credits" instead of your configured name.</li>
<li class="">Fixed upgrades and downgrades ignoring per-product server limits, charging before success, and double-charging on retries.</li>
<li class="">Fixed the allocation limit being treated as per-location instead of per-node, which blocked server creation on healthy nodes.</li>
<li class="">Fixed servers with no Pterodactyl ID breaking the server list and settings page - they can now be managed and deleted cleanly.</li>
<li class="">Fixed server sync deleting servers on any error instead of only on a confirmed removal.</li>
<li class="">Fixed server creation failing when a required egg variable defaulted to <code>0</code>.</li>
<li class="">Fixed the credit run-out estimate on the home page getting stuck at a fixed ceiling.</li>
<li class="">Fixed the Pterodactyl installer dropping a custom port from the panel URL.</li>
<li class="">Fixed a broken extension or seeder being able to take down the whole panel on startup.</li>
<li class="">Added friendly error pages across server, payment, and registration flows, and stopped leaking Pterodactyl details to users and API clients.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="security">Security<a href="https://ctrlpanel.gg/blog/1.3.0-open-beta#security" class="hash-link" aria-label="Direct link to Security" title="Direct link to Security" translate="no">​</a></h3>
<ul>
<li class="">Sanitised rich content submitted through TinyMCE forms - legal pages, MOTD, notifications, and more - against script injection. This one is non-critical, since only privileged users could submit such content.</li>
<li class="">Sanitised Pterodactyl and provider errors so internal addresses, credentials, and response bodies never reach users or API clients.</li>
<li class="">The settings page and admin endpoints now enforce their permissions, and secrets are masked in the UI.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-developers">For Developers<a href="https://ctrlpanel.gg/blog/1.3.0-open-beta#for-developers" class="hash-link" aria-label="Direct link to For Developers" title="Direct link to For Developers" translate="no">​</a></h3>
<ul>
<li class=""><strong>Reworked extension system.</strong> Extensions can now ship their own database seeders, sidebar pages, middleware, routes, migrations, and Artisan or scheduled commands, all following standard Laravel conventions.</li>
<li class="">New <code>permissions:sync</code> and <code>permissions:cleanup</code> commands keep permissions and roles in step across updates.</li>
<li class="">OpenAPI specification generation with Scribe - <code>php artisan scribe:generate</code>.</li>
<li class="">Laravel 12 under the hood.</li>
<li class="">The user API can now filter by linked Discord account.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-note-on-ai">A Note on AI<a href="https://ctrlpanel.gg/blog/1.3.0-open-beta#a-note-on-ai" class="hash-link" aria-label="Direct link to A Note on AI" title="Direct link to A Note on AI" translate="no">​</a></h2>
<p>We want to be upfront about something, the same way we were about the license change and about 1.1.</p>
<p>AI tools are part of our development process now, and you deserve to know how we use them - and how we do not.</p>
<p>To be clear: <strong>AI is a tool, not a replacement for developers.</strong> Every line that lands in CtrlPanel is reviewed, tested, and owned by a human maintainer. We do not merge code simply because a model produced it, and we never will.</p>
<p>What AI does is take the busywork off our plate. A task that takes a model two minutes - a repetitive test, a boilerplate migration, a scaffolded file - can eat twenty minutes of a maintainer's time. Delegating that routine work is what lets us spend the hours where they actually matter: architecture, security, reviewing contributions, and supporting users.</p>
<p>Our quality standards have not moved, and we are not lowering them to ship faster. If anything, they are going up, and the extra time AI frees up goes straight back into review and testing. The extended beta you are reading about is exactly that standard in practice.</p>
<p>We know "AI" is a divisive topic. We are not here to sell it to you, and we are not hiding it either. We will keep telling you when and how it is used, and everything we ship will keep being held to the same bar it always has been.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="help-us-test">Help Us Test<a href="https://ctrlpanel.gg/blog/1.3.0-open-beta#help-us-test" class="hash-link" aria-label="Direct link to Help Us Test" title="Direct link to Help Us Test" translate="no">​</a></h2>
<p>This is an open beta, and it only works if you help. The features most worth your attention are the ones with the most moving parts - payments, server upgrades, and two-factor authentication - but everything is fair game.</p>
<p>If you find something broken, report it in the <a href="https://discord.com/channels/787829714483019826/1489042641998971061" target="_blank" rel="noopener noreferrer" class=""><code>#🧪┃beta-feedback</code></a> channel on our <a href="https://discord.gg/ctrlpanel-gg-787829714483019826" target="_blank" rel="noopener noreferrer" class="">Discord server</a>, or open a <a href="https://github.com/Ctrlpanel-gg/panel/issues/new/choose" target="_blank" rel="noopener noreferrer" class="">GitHub issue</a>.</p>
<p><strong>For any major security risk</strong>, please create a <a href="https://github.com/Ctrlpanel-gg/panel/security/advisories/new" target="_blank" rel="noopener noreferrer" class="">GitHub vulnerability report</a> and DM <code>1day2die</code> on Discord. Do not discuss vulnerabilities in public chats, and do not post them on public trackers.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="acknowledgements">Acknowledgements<a href="https://ctrlpanel.gg/blog/1.3.0-open-beta#acknowledgements" class="hash-link" aria-label="Direct link to Acknowledgements" title="Direct link to Acknowledgements" translate="no">​</a></h2>
<p>A beta like this is built by more than the core team, and we owe a real thank you to the people who helped get it here.</p>
<ul>
<li class=""><strong>Simba</strong> and <strong>KroZen</strong> for their contributions to the codebase and the server and billing work in this release.</li>
<li class=""><strong>Lezetho</strong> for the Discord account age requirement.</li>
<li class="">Every beta tester who installs this build, breaks it, and tells us how - that is the work that turns a beta into a stable release. <!-- -->❤️</li>
<li class="">And everyone who filed issues, joined discussions, or just kept running CtrlPanel while we worked.</li>
</ul>
<p>Thank you. You are what keeps this project alive.</p>
<hr>
<p>This beta also includes a number of internal refactors, performance improvements, and smaller fixes not listed above.</p>
<p><strong>Full changelog</strong>: <a href="https://ctrlpanel.gg/docs/beta/changelog" target="_blank" rel="noopener noreferrer" class="">https://ctrlpanel.gg/docs/beta/changelog</a><br>
<strong>Compare on GitHub</strong>: <a href="https://github.com/Ctrlpanel-gg/panel/compare/1.2.0...development" target="_blank" rel="noopener noreferrer" class="">https://github.com/Ctrlpanel-gg/panel/compare/1.2.0...development</a><br>
<strong>Beta testing checklist</strong>: <a href="https://ctrlpanel.gg/docs/beta/beta-testing" target="_blank" rel="noopener noreferrer" class="">https://ctrlpanel.gg/docs/beta/beta-testing</a></p>]]></content:encoded>
            <category>Announcements</category>
        </item>
        <item>
            <title><![CDATA[Understanding MPL 2.0 in the Context of CtrlPanel]]></title>
            <link>https://ctrlpanel.gg/blog/understanding-mpl-2.0</link>
            <guid>https://ctrlpanel.gg/blog/understanding-mpl-2.0</guid>
            <pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[With the release of 1.2.0, CtrlPanel moves from AGPL 3.0 to the Mozilla Public License 2.0. This post covers what that means for everyone - users, addon and theme developers, and contributors.]]></description>
            <content:encoded><![CDATA[<p>With the release of 1.2.0, CtrlPanel moves from AGPL 3.0 to the Mozilla Public License 2.0. This post covers what that means for everyone - users, addon and theme developers, and contributors.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-were-making-this-change">Why We're Making This Change<a href="https://ctrlpanel.gg/blog/understanding-mpl-2.0#why-were-making-this-change" class="hash-link" aria-label="Direct link to Why We're Making This Change" title="Direct link to Why We're Making This Change" translate="no">​</a></h2>
<p>When we adopted AGPL 3.0 back in the 1.0 release, we did not fully think through its implications. In practice, AGPL 3.0 turned out to be far more restrictive than we intended - addon and theme developers couldn't legally sell their work, and users couldn't customize the panel for their own needs without publishing their changes. That was never the goal, and it was quietly killing the community we were trying to build.</p>
<p>MPL 2.0 fixes this. It keeps the project open and protected, while giving everyone the freedom they actually need.</p>
<p>As part of this transition, we are also introducing a Contributor License Agreement (CLA) for all future pull requests. Contributors will be asked to sign it when opening a PR. This is part of a broader effort to give CtrlPanel a proper legal foundation - something we should have had from the start.</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>Before reading further, we recommend taking a quick look at the <a href="https://www.mozilla.org/en-US/MPL/2.0/" target="_blank" rel="noopener noreferrer" class="">Mozilla Public License 2.0</a> itself - it is short, readable, and will make everything in this post much easier to follow and understand.</p></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-users">For Users<a href="https://ctrlpanel.gg/blog/understanding-mpl-2.0#for-users" class="hash-link" aria-label="Direct link to For Users" title="Direct link to For Users" translate="no">​</a></h2>
<p>If you just run CtrlPanel to sell game servers to your customers, not much changes for you.</p>
<ul>
<li class="">You can download, install, and run the panel freely</li>
<li class="">You can modify any files - change the UI, add features, integrate with your own systems</li>
<li class="">You can use the panel commercially</li>
<li class="">Your customers accessing the panel through a browser is not considered distribution - you have no obligations in that case</li>
<li class="">If you ever give or sell a copy of your modified panel to another person or company, you must provide the modified files - but since CtrlPanel is written in PHP, there is nothing extra to prepare. The source code is already what you are distributing.</li>
</ul>
<p>In short - run it, customize it, build a business on it. You're good.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-addon--theme-developers">For Addon &amp; Theme Developers<a href="https://ctrlpanel.gg/blog/understanding-mpl-2.0#for-addon--theme-developers" class="hash-link" aria-label="Direct link to For Addon &amp; Theme Developers" title="Direct link to For Addon &amp; Theme Developers" translate="no">​</a></h2>
<p>This is where the biggest change is, and where MPL 2.0 makes things much more practical.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="if-your-addon-does-not-modify-our-core-files">If your addon does not modify our core files<a href="https://ctrlpanel.gg/blog/understanding-mpl-2.0#if-your-addon-does-not-modify-our-core-files" class="hash-link" aria-label="Direct link to If your addon does not modify our core files" title="Direct link to If your addon does not modify our core files" translate="no">​</a></h3>
<p>This is the cleanest scenario. If your addon is a separate package or file that does not touch CtrlPanel's existing source files:</p>
<ul>
<li class="">You can license it however you want, including proprietary</li>
<li class="">You can sell it on <a href="https://market.ctrlpanel.gg/" target="_blank" rel="noopener noreferrer" class="">market.ctrlpanel.gg</a> or anywhere else, fully closed source</li>
<li class="">You have no MPL obligations whatsoever</li>
</ul>
<p>This is why we are actively thinking about a more modular extension system - so that addons never need to touch core files in the first place. More on that in the future.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="if-your-addon-modifies-our-core-files">If your addon modifies our core files<a href="https://ctrlpanel.gg/blog/understanding-mpl-2.0#if-your-addon-modifies-our-core-files" class="hash-link" aria-label="Direct link to If your addon modifies our core files" title="Direct link to If your addon modifies our core files" translate="no">​</a></h3>
<p>If your work involves editing CtrlPanel's existing source files, MPL 2.0 still allows you to sell it - but with one important condition: the modified core files must remain under MPL 2.0, and you must provide them to anyone you distribute to - which, again, is nothing extra since PHP is already source code.</p>
<p>This does not mean a public release. You are only required to provide source code to the people you directly sell or distribute to - not to the general public. You are not required to publish anything on GitHub or anywhere publicly accessible.</p>
<p>However, keep in mind that once a recipient has that source code, they are legally allowed to share it further. MPL does not restrict what recipients can do with source code they legitimately received. If keeping your modifications private long-term is important to you, the safest approach is to avoid modifying core files and build your addon as a separate package instead.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="modular-extension-system">Modular Extension System<a href="https://ctrlpanel.gg/blog/understanding-mpl-2.0#modular-extension-system" class="hash-link" aria-label="Direct link to Modular Extension System" title="Direct link to Modular Extension System" translate="no">​</a></h3>
<p>The safest way to keep your addon code fully closed is to never touch core files at all - and we want to make that possible for every type of addon.</p>
<p>Currently, CtrlPanel has a modular system for payment gateways, and we are ready to expand it further. If you need an internal API or hook that does not exist yet, there are two ways to help make it happen:</p>
<ul>
<li class=""><strong>Open an issue</strong> on GitHub describing what you need - we will consider it for an upcoming release</li>
<li class=""><strong>Open a PR</strong> that adds the implementation yourself - the fastest path to getting it in</li>
</ul>
<p>Either way, make sure to follow our contribution guidelines before getting started - see the relevant files in the <code>.github</code> directory of the repository.</p>
<p>The more developers build addons the right way, the stronger and more sustainable the ecosystem becomes for everyone.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-note-for-theme-developers">A note for theme developers<a href="https://ctrlpanel.gg/blog/understanding-mpl-2.0#a-note-for-theme-developers" class="hash-link" aria-label="Direct link to A note for theme developers" title="Direct link to A note for theme developers" translate="no">​</a></h3>
<p>We ask that you preserve the original CtrlPanel copyright notice in the panel footer. You are welcome to add your own copyright alongside it - just don't remove ours. This is both a license requirement and a matter of respect for the project and its contributors.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-those-looking-to-fork">For Those Looking to Fork<a href="https://ctrlpanel.gg/blog/understanding-mpl-2.0#for-those-looking-to-fork" class="hash-link" aria-label="Direct link to For Those Looking to Fork" title="Direct link to For Those Looking to Fork" translate="no">​</a></h2>
<p>MPL 2.0 allows anyone to take CtrlPanel's code, modify it, and redistribute it - including commercially. If you do, here is what the license requires:</p>
<ul>
<li class="">Modified MPL-licensed files must remain under MPL 2.0</li>
<li class="">You must keep existing copyright notices intact</li>
<li class="">You cannot relicense the MPL-covered files as proprietary</li>
</ul>
<p>Building on open source is fine. Stripping it of its open source nature is not.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="summary">Summary<a href="https://ctrlpanel.gg/blog/understanding-mpl-2.0#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary" translate="no">​</a></h2>
<table><thead><tr><th></th><th>AGPL 3.0</th><th>MPL 2.0</th></tr></thead><tbody><tr><td>Run the panel commercially</td><td>Yes</td><td>Yes</td></tr><tr><td>Customize without publishing changes</td><td>No</td><td>Yes*</td></tr><tr><td>Sell closed-source addons (separate files)</td><td>No</td><td>Yes</td></tr><tr><td>Sell addons that modify core files</td><td>No</td><td>Yes**</td></tr><tr><td>Fork and redistribute</td><td>Yes</td><td>Yes</td></tr></tbody></table>
<p>*As long as you don't distribute the code to others.<br>
<!-- -->**Modified core files must remain MPL 2.0 and source must be provided to recipients.</p>
<hr>
<p>If you have questions about what this means for your specific use case, feel free to join our <a href="https://discord.gg/ctrlpanel-gg-787829714483019826" target="_blank" rel="noopener noreferrer" class="">Discord</a>, we are happy to help. And if you want the full legal text, you can read the <a href="https://www.mozilla.org/en-US/MPL/2.0/" target="_blank" rel="noopener noreferrer" class="">Mozilla Public License 2.0</a> directly.</p>]]></content:encoded>
            <category>Guides</category>
        </item>
        <item>
            <title><![CDATA[CtrlPanel 1.2.0 is here!]]></title>
            <link>https://ctrlpanel.gg/blog/1.2.0-release</link>
            <guid>https://ctrlpanel.gg/blog/1.2.0-release</guid>
            <pubDate>Fri, 24 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[After nearly 10 months of development, we are ready to present version 1.2.0 as a stable release.]]></description>
            <content:encoded><![CDATA[<p>After nearly 10 months of development, we are ready to present version 1.2.0 as a stable release.</p>
<p>We want to be transparent with our community: version 1.1 was released prematurely, and we are not proud of that. It shipped with too many rough edges and took far longer to stabilize than it should have. We heard your frustration, and we took it seriously.</p>
<p>With 1.2.0, we made a commitment to not repeat that mistake. This release went through a full beta testing phase before reaching stable, and we are confident it reflects the quality our users deserve.</p>
<p>This update brings a large number of bug fixes, new features, and importantly, patches for several critical security vulnerabilities. We strongly urge every CtrlPanel user to upgrade as soon as possible. Do not wait for themes or addons to be updated first - running an outdated version puts both you and your clients at risk.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="license-change">License Change<a href="https://ctrlpanel.gg/blog/1.2.0-release#license-change" class="hash-link" aria-label="Direct link to License Change" title="Direct link to License Change" translate="no">​</a></h2>
<p>Starting with this release, CtrlPanel moves from AGPL 3.0 to the <strong>Mozilla Public License 2.0 (MPL 2.0)</strong>.</p>
<p>We'll be honest - we didn't fully think through the implications of AGPL 3.0 when we adopted it. As we looked closer, we realized it was placing an unreasonable burden on our community - particularly on users running the panel and developers building third-party addons. The license was doing more harm than good, and that was never our intention.</p>
<p>MPL 2.0 is a more balanced license that still protects the project while giving the community the freedom it needs to grow.</p>
<p>As for previous versions - we are not officially relicensing them, but we have no intention of taking any action against AGPL 3.0 non-compliance in older releases. That said, compliance with MPL 2.0 is required for this version and all future releases - no exceptions.</p>
<p>A dedicated blog post covering all the details including what this means for addon and theme developers will be published tomorrow, April 25th.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="acknowledgements">Acknowledgements<a href="https://ctrlpanel.gg/blog/1.2.0-release#acknowledgements" class="hash-link" aria-label="Direct link to Acknowledgements" title="Direct link to Acknowledgements" translate="no">​</a></h2>
<p>This release would not have been possible without the help of our contributors and beta testers.</p>
<p>A special thank you to <strong>Simba</strong> and <strong>FerksFK</strong> for their contributions to the codebase, and to <strong>Maddigan</strong> for his invaluable work during beta testing - single-handedly tracking down the vast majority of bugs in this release.</p>
<p>We also want to thank everyone who responsibly disclosed security vulnerabilities that are patched in this release. Your names will be added to the Hall of Fame in our SECURITY.md once the CVE details are publicly disclosed.</p>
<p>Thank you to everyone else who contributed, reported issues, or helped test along the way. You are what keeps this project alive <!-- -->❤️<!-- -->.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-changed">What's Changed<a href="https://ctrlpanel.gg/blog/1.2.0-release#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="bug-fixes">Bug Fixes<a href="https://ctrlpanel.gg/blog/1.2.0-release#bug-fixes" class="hash-link" aria-label="Direct link to Bug Fixes" title="Direct link to Bug Fixes" translate="no">​</a></h3>
<ul>
<li class="">Fixed credits being displayed as 1000x their actual value in parts of the UI and API responses</li>
<li class="">Fixed the OOM Killer checkbox not saving its value</li>
<li class="">Fixed HTTP 500 on the admin overview page when the <code>.git</code> directory is missing</li>
<li class="">Fixed "Log back in" being unavailable to admins after using "Login as User"</li>
<li class="">Fixed potential referral system abuse through account deletion - deleted referrals are now visible to admins</li>
<li class="">Fixed <code>php artisan route:cache</code> failing due to duplicate route names</li>
<li class="">Fixed mass user notifications failing if one email address was rejected by the mail server</li>
<li class="">Fixed server creation flow allowing credits to be deducted even when server creation failed</li>
<li class="">Fixed allocation limit applying globally instead of per-node, which blocked server creation on all nodes when only one reached its limit</li>
<li class="">Fixed multiple coupons created via range function having their value saved as 1000x less than intended</li>
<li class="">Fixed manual email confirmation not triggering events, which prevented users from receiving their referral and email confirmation rewards</li>
<li class="">Fixed coupon application unlocking the payment button without a selected payment gateway</li>
<li class="">Fixed 100% off coupons not allowing users to claim a product for free without selecting a payment gateway</li>
<li class="">Fixed admins being unable to delete coupons</li>
<li class="">Fixed referral commission calculation returning incorrect amounts</li>
<li class="">Fixed regular users being able to view coupon and voucher-related logs</li>
<li class="">Fixed payment confirmation email formatting</li>
<li class="">Fixed broken installation caused by a database column type mismatch</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-features--improvements">New Features &amp; Improvements<a href="https://ctrlpanel.gg/blog/1.2.0-release#new-features--improvements" class="hash-link" aria-label="Direct link to New Features &amp; Improvements" title="Direct link to New Features &amp; Improvements" translate="no">​</a></h3>
<ul>
<li class="">Added support for coupons with unlimited uses</li>
<li class="">Added "Minimum product price" setting for coupons</li>
<li class="">Added option to automatically delete expired vouchers and those that have reached their usage limit</li>
<li class="">Added ability for users to change or remove an applied coupon at checkout</li>
<li class="">Coupons are now temporarily reserved during checkout and only marked as used after a successful payment</li>
<li class="">Added ticket deletion confirmation prompt</li>
<li class="">Added a notification 3 days before server suspension when the user has insufficient credits</li>
<li class="">Added rate limiting for server creation to prevent abuse from repeated rapid requests</li>
<li class="">Added optional reason field for server and user moderation actions via the API</li>
<li class="">Added Ukrainian localization; extended Russian localization</li>
<li class="">Added ability to change thousand and decimal separators - either globally or per user based on their locale</li>
<li class="">Admins can now select all eggs in a nest by clicking the nest name in the product configuration list</li>
<li class="">Products now accept <code>0</code> as a value for unlimited resources</li>
<li class="">Products in the upgrade/downgrade list are now sorted by price</li>
<li class="">Removed the global minimum-credits setting - each product now defines its own minimum-credits value</li>
<li class="">Removed "Generate random codes" from the coupon edit page</li>
<li class="">Reordered settings items for better readability</li>
<li class="">Fully reworked payment gateways - admins must now configure webhook tokens per gateway</li>
<li class="">Redesigned the version info card on the overview page</li>
<li class="">Installer step can now be reset by adding <code>?reset</code> to the URL, without needing DevTools or clearing site data</li>
<li class="">User creation command (<code>php artisan make:user</code>) now returns an error if the email or Pterodactyl ID is already in use</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fixed-vulnerabilities">Fixed Vulnerabilities<a href="https://ctrlpanel.gg/blog/1.2.0-release#fixed-vulnerabilities" class="hash-link" aria-label="Direct link to Fixed Vulnerabilities" title="Direct link to Fixed Vulnerabilities" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://github.com/Ctrlpanel-gg/panel/security/advisories/GHSA-jmhr-q9q5-fqwh" target="_blank" rel="noopener noreferrer" class="">CVE-2026-34234</a> (CVSS Score 10.0/10) - Unauthenticated RCE via Installer Accessible After Installation and Unsanitized Shell Arguments</li>
<li class=""><a href="https://github.com/Ctrlpanel-gg/panel/security/advisories/GHSA-pxmw-gj52-9p68" target="_blank" rel="noopener noreferrer" class="">CVE-2026-34358</a> (CVSS Score 8.1/10) - Missing Authorization on Admin Write Endpoints Allows RBAC Bypass</li>
<li class=""><a href="https://github.com/Ctrlpanel-gg/panel/security/advisories/GHSA-wpqj-xwhq-2mmh" target="_blank" rel="noopener noreferrer" class="">CVE-2026-34246</a> (CVSS Score 4.8/10) - Stored XSS in Admin Role Management via Unescaped DataTable HTML Output</li>
<li class=""><a href="https://github.com/Ctrlpanel-gg/panel/security/advisories/GHSA-vcg3-fjrx-rg5q" target="_blank" rel="noopener noreferrer" class="">CVE-2026-34216</a> (CVSS Score 6.6/10) - Unsafe Dynamic Class Instantiation in Admin Settings Allows Potential Remote Code Execution</li>
<li class=""><a href="https://github.com/Ctrlpanel-gg/panel/security/advisories/GHSA-cmrr-q3hw-3vqh" target="_blank" rel="noopener noreferrer" class="">CVE-2026-34241</a> (CVSS Score 8.7/10) - Stored XSS in Ticket Reply Notifications Allows Session Hijacking</li>
<li class=""><a href="https://github.com/Ctrlpanel-gg/panel/security/advisories/GHSA-mj5g-j7fq-7hc4" target="_blank" rel="noopener noreferrer" class="">CVE-2026-34233</a> (CVSS Score 6.5/10) - Missing Authorization on Admin Datatable Endpoints Allows Unauthorized Access to Sensitive Data</li>
</ul>
<hr>
<p>This release also includes a number of internal bug fixes, performance improvements, and code refactors not listed above.<br>
<strong>Full Changelog</strong>: <a href="https://github.com/Ctrlpanel-gg/panel/compare/1.1.1...1.2.0" target="_blank" rel="noopener noreferrer" class="">https://github.com/Ctrlpanel-gg/panel/compare/1.1.1...1.2.0</a></p>]]></content:encoded>
            <category>Releases</category>
        </item>
    </channel>
</rss>