Welcome to the PufferPanel community forums! If you need help please register an account and post in the Support category.

The Abridged History of PufferPanel

  • We had hoped that by now we wouldn't need to write a post like this, and that people wouldn't care anymore. However, due to the animosity still existing towards us we feel it necessary to clarify how PufferPanel came to be, and what happened over the past few years. We ask that our community members refrain from instigating arguments with other communities, and instead share this.

    How it all started

    puffrfish: "PufferPanel was made because my very small Minecraft hosting company needed it. I had been using a commercially available panel and it was not working out well at all. If I remember correctly, the final straw was after their DNS provider for their licensing server was DDoSed and the software responded by shutting down every running server, and preventing any servers from being started because the license couldn't be validated. My friend Fishfish0001 was looking for a new project to work on, and so together PufferPanel was created. With his fairly novice programming skills and my rather limited system administration knowledge somehow we assembled a panel that was surprisingly good, and was a lot of fun to make. The Minecraft hosting craze faded away and so did my hosting company, but we decided to turn PufferPanel into an open source project so that everyone could benefit from it."

    GSD and klein

    Since then, PufferPanel has come a long way. Originally PufferPanel didn't even use a daemon, and instead loaded each server's page in an iframe directly from the node. Besides changing the interface, one of the first things done to PufferPanel after it was open sourced was switching it to use a daemon written in Node.js called GSD, which was being developed by someone from another hosting company.

    PufferPanel was a very messy codebase at this time, as it was simply added to over time, and never got much work done in the way of cleaning up the code. As such, each file had to deal with the fact they would be called individually, which caused massive maintenance issues as code was duplicated and it was very easy for one file to not get a fix that other files had. Lord_Ralex was brought on as a developer to help convert the codebase to klein, a routing framework that would help reduce and clean up the codebase. This effort took a significant amount of time to do, but it was for a good reason and purpose. It allowed for a cleaner understanding and structure that would remove the redundancy each file was doing.

    Scales and the automated installer

    Over time, GSD was becoming harder and harder to work with, and we were growing tired of it. The main limitation being a limit of only being able to run 10 servers imposed by the license that the developer had released it under. Fishfish0001 decided to create a new daemon called Scales, which was heavily inspired by GSD. The developer of GSD was not entirely pleased about this, but thankfully was understanding enough to permit us to continue.

    Scales was almost entirely worked on by Fishfish0001. While Scales was in development, Lord_Ralex kept insisting that documentation was written before the code was written, so that the panel would be made to work with it during the process. This is a typical development process, and Fishfish0001 did not choose to provide that documentation, saying that it would be written after the fact. This did not make Lord_Ralex happy, and so he did not work on Scales. He left Fishfish0001 to work on it alone, since he did not want to deal with Fishfish0001 not liking his input into things.

    PufferPanel, at this time, was believed to be for hosts, and so many of the decisions had been made from the view of a host. However, this differed from how it was being used, with many users trying to use it to run their own servers. As such, the installation kept being tested, with users finding the directions harder and harder to follow. Fishfish0001 did not seem to have much concern for this, saying that he was making the panel for hosts, so they would know how to follow them. This decision was not viewed equally by puffrfish and Lord_Ralex , so they choose to improve the installation of the panel to help those users.

    As Scales was being finished up, Lord_Ralex worked on improving the installation of the panel, as the web-driven panel kept causing issues, and the steps to install the panel were made even more complicated with the klein rewrite. The new installer was a dirty solution, but it made installing the panel easier, as it handled most of the commands that users would have to enter. This automated installer was one of the main features that was advertised for the panel, and has continued to be.

    Scales, once finished, was a great release, and Fishfish0001 enjoyed working on it. The panel seemed to finally have a daemon that was made directly for it.


    One of the myths that continues to be perpetuated is that PufferPanel is somehow anti-Docker. This is not true at all, since PufferPanel was as far as we are aware, the first open source game server panel that supported running servers inside Docker containers. After Scales had been released, we ran into some concerns regarding isolation of servers from each other when the panel was being used by a hosting company. puffrfish had suggested using Docker for containerizing the game servers, which would prevent them from accessing each other. At this time Docker was very new, and although Fishfish0001 was able to pull it off the implementation was less than ideal, relying on executing command-line tools in order to manage the containers. In addition, the way Docker was implemented meant there wasn't a way to run a server without Docker. We quickly found out this was problem with the default OVH kernel and OpenVZ VPSes, as neither supported Docker.

    "The Rewrite"

    After this drastic change, Fishfish0001 went on break, and so Lord_Ralex and puffrfish decided that it was time to rewrite the panel, as the code was starting to become harder and harder to maintain. They choose to look into a Node.js framework called Meteor for the rewrite, and started to work on this code. This code did not get worked on for too long as the decision was made very late, as they were doing a lot of research before rushing into it.

    Fishfish0001 came back, and made a declaration that the rewrite would be done using Laravel, a PHP framework. Lord_Ralex and puffrfish both disagreed, stating that keeping the panel PHP made it harder to find developers who would help contribute, and prevented the installation from becoming more streamlined. They wanted to rewrite to fix those issues, consolidate the project to one language, and make the panel overall a better experience. However, these opinions were ignored, and Fishfish0001 continued to work on the Laravel rewrite.

    The Split

    Fishfish0001 had chose to add a section on the PufferPanel docs that advertised a service that would install the panel for a user, for a fee. Neither puffrfish or Lord_Ralex were informed of this, and removed the advertisement, as they both felt this was wrong. They did not want this panel to be a money grab, and they certainly did not want people to feel like they need to pay to install it, because of issues with the project's documentation or panel. The project had always been about making something for the community, learning, and most importantly having fun. Making side-deals was not in the spirit of what everyone had been doing, contributing to the project out of the kindness of their hearts.

    This, combined with the disputes over the direction of the rewrite created a lot of tension between the project's members. puffrfish had tried to mediate this by trying to delegate the panel's rewrite to Fishfish0001, and the daemon's rewrite to Lord_Ralex, but ultimately this did not work out. Fishfish0001 had decided that as the contributor of the majority of the code to the project that he should not have to put up with the other member's opinions or suggestions.

    Fishfish0001, under the table, started planning on breaking away. He created a new discord channel which publicly logged that he did not agree with either puffrfish or Lord_Ralex, and that if he had control over the domain, would simply kick both of them off so he could own it. Since he could not, he banned puffrfish from the IRC channel and dropped the flags to get him out of the way. He changed the IRC to advertise his new panel, and directed all sources (the forums and site) to the new panel, stating that PufferPanel was dead. He removed both from the GitHub, so that they could not continue the project. Overall, Fishfish0001 tried to kill PufferPanel, simply because he did not like that puffrfish and Lord_Ralex did not agree with him.

    Both Lord_Ralex and puffrfish worked tirelessly to get the all the resources re-controlled, as they did not want to kill the panel. Fishfish0001 demanded that puffrfish follow several agreements in order to get the GitHub organization and repositories back. They were:

    [11:11:24 PM] Fishfish0001:	under the following stipulations:
    [11:11:54 PM] Fishfish0001:	1.) Remove all of the claims from the pufferpanel.com domain and elsewhere online that say that I sabotaged the project purposefully, or went out to seek drama.
    [11:12:00 PM] Fishfish0001:	2.) Acknoledge Pterodactyl.io as a fork of the PufferPanel project that will continue to be developed by myself.
    [11:12:38 PM] Fishfish0001:	3.) Do not remove the repository's that currently exist or otherwise remove myself as a listed contributor to the project.

    Lord_Ralex was not involved in that decision, and so did not agree to the terms. As such, he is free to publicly voice his own opinions and insights into it, without violating any agreement made between Fishfish0001 and puffrfish.

    After the attempt to kill the panel, most of the community had been moved to Fishfish0001's fork, which was based on the code originally written for PufferPanel under the Laravel fork with the PufferPanel interface. While this code is no longer represented in the current code, and the two codebases are now very different, it is still a fork of PufferPanel.

    Once the assets were re-controlled, multiple efforts were made to get Scales back into a state to resolve issues that came up when Docker was forced into it and to get a new community back up. Puffrfish worked on the community while Lord_Ralex worked to get Scales cleaned up.

    The DMCA

    Despite making an effort to maintain a cordial relationship with Fishfish0001's new project, for some reason the fact that Lord_Ralex and puffrfish were continuing PufferPanel made Fishfish0001 decide to take further action against PufferPanel.

    PufferPanel, like many other pieces of open source software, is licensed under the GPLv3. This license both restricts and permits what you can do with the software, but can be summarized as requiring any distribution of the software or derivative works to disclose their source code, and be licensed under the same license. It is a "free software" license, with free meaning freedom, not just without cost.

    A change made was updating the author on the Scales package.json for npm, as he was no longer an author for the software and we did not want to publish it in his name. Fishfish0001 then proceeded to DMCA Scales, stating that his copyright was violated by his name being removed from the author's list (link). However, no copyright headers were changed, and the author field does not correspond to copyright ownership. This DMCA was unjustly issued, and while he later retracted the DMCA (link), it was certainly not a nice thing to do. He had not even reached out to either puffrfish or Lord_Ralex about this before issuing the DMCA, which makes it seem like he was simply trying to find a way to inhibit further development. A simple talk would have saved both groups a lot of trouble.


    Once the issues were resolved, Scales received its final update, which made the Docker integration optional. This was meant to help resolve issues where Docker could not be used, but this also introduced more issues, due to the volatile nature of Scales. After much deliberation, Lord_Ralex and puffrfish both decided that Scales needed to be retired and a new daemon was started. The risk of further DMCAs and structure of Scales meant it was not worth continuing.

    This resulted in the birth of pufferd, named for being the PufferPanel daemon. This new daemon was written in Go, a new language for both puffrfish and Lord_Ralex, so pufferd was a huge learning opportunity. pufferd was based on the need for a daemon which did not require any code changes to add new games, a huge issue that Scales and GSD had, and was very abstract in its design. pufferd ended up being very agnostic, being able to in theory support any game on any OS, being driven by a JSON template system that defines how the server works. This system is still currently being developed and grown, but it has already shown its scaling ability with new games being easily added and its library of templates being expanded by the community.

    The Future

    With the daemon rewrite, it was very evident that PufferPanel itself is a very fragile beast. The code did not age well, and the change to pufferd showed huge issues with the coding design of the panel. Because of this, pufferd was missing one core feature that Scales had: Docker. This was a large Scales feature, and so pufferd is still lacking the one selling point that made Scales great. Lord_Ralex has been attempting to add this, but has repeatedly pushed it off because of his desire to get it right the first time. He has not been able to find an implementation.

    This has led to the current state of the panel. A mostly working daemon that is still missing a large feature, with a very simple installation and the support for many different games. While there is still a lot of work needed for the panel, it is slowing turning into something that puffrfish and Lord_Ralex are both proud of. We strive to make a panel that is both easy to use and easy to install. We have not and will not accept money, have turned down all donations, and have not wanted to create any funding schemes. While other panels charge to use their panel or ask users to donate using different means, PufferPanel is a project we do because it's fun and a learning experience.

    PufferPanel has been, and will always be, for users. We hope you enjoy our software, and continue to use it.

    Logs will be linked below for reference. Some logs have been altered to condense the content or to hide names. When appropriate, [alteration] will be used to indicate when a log has been altered, and <User#> will be used to hide a name.


  • nice post. i though it was really interesting, but i dont see anything wrong with scales, in fact, i actually am still using 0.8.6 because of the broken file manager in 1.1

  • @PacksGamingHD said in The Abridged History of PufferPanel:

    nice post. i though it was really interesting, but i dont see anything wrong with scales, in fact, i actually am still using 0.8.6 because of the broken file manager in 1.1

    A lot of the issues were underneath the hood. Scales would simply not allow adding new games unless you went through a crazy setup and then doing it to PufferPanel.

    It was also actually a little fragile and had several design issues that were going to make things more complicated as time went on.

    While users might not have seen them, they existed.

Log in to reply