<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://ctrlpanel.gg/blog</id>
    <title>CtrlPanel.gg Blog</title>
    <updated>2026-04-25T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://ctrlpanel.gg/blog"/>
    <subtitle>CtrlPanel.gg Blog</subtitle>
    <icon>https://ctrlpanel.gg/img/controlpanel.ico</icon>
    <entry>
        <title type="html"><![CDATA[Understanding MPL 2.0 in the Context of CtrlPanel]]></title>
        <id>https://ctrlpanel.gg/blog/understanding-mpl-2.0</id>
        <link href="https://ctrlpanel.gg/blog/understanding-mpl-2.0"/>
        <updated>2026-04-25T00:00:00.000Z</updated>
        <summary type="html"><![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.]]></summary>
        <content type="html"><![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>
        <author>
            <name>1Day2Die</name>
        </author>
        <author>
            <name>MrWeez</name>
        </author>
        <category label="Guides" term="Guides"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[CtrlPanel 1.2.0 is here!]]></title>
        <id>https://ctrlpanel.gg/blog/1.2.0-release</id>
        <link href="https://ctrlpanel.gg/blog/1.2.0-release"/>
        <updated>2026-04-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[After nearly 10 months of development, we are ready to present version 1.2.0 as a stable release.]]></summary>
        <content type="html"><![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>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p><strong>Vulnerability details will be disclosed two weeks after the release date</strong></p></div></div>
<ul>
<li class="">CVE-2026-34234</li>
<li class="">CVE-2026-34358</li>
<li class="">CVE-2026-34246</li>
<li class="">CVE-2026-34216</li>
<li class="">CVE-2026-34241</li>
<li class="">CVE-2026-34233</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>
        <author>
            <name>1Day2Die</name>
        </author>
        <author>
            <name>MrWeez</name>
        </author>
        <author>
            <name>Simba</name>
        </author>
        <category label="Releases" term="Releases"/>
    </entry>
</feed>