# Table of Contents - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) - [Documentation - Blueprint](#documentation-blueprint) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Installation ============ #### Learn how to install Blueprint on your Pterodactyl instance. This marks the beginning of your journey with Blueprint, and maybe even Pterodactyl modding to begin with. We're thrilled to have you on board, let's get started! Want to run Blueprint through Docker instead? Take a peek at the official [Blueprint Docker](https://github.com/BlueprintFramework/docker) repository [here](https://github.com/BlueprintFramework/docker) . #### Prepare for liftoff Before we start running a bunch of commands, we need to prepare a couple things. This won't take long! ##### What's your Pterodactyl path? We'll update the commands below to work for your specific installation But if you didn't change the default Pterodactyl installation path, you don't need to change it here **Node.js Node.js** Blueprint depends on **Node.js v20** or later for rebuilding panel assets. You can install it through the commands below or by running `nvm install 20` if you are using Node version manager, we won't judge! sudo apt-get install -y ca-certificates curl gnupg sudo mkdir -p /etc/apt/keyrings curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list apt-get update apt-get install -y nodejs **Yarn Yarn** Pterodactyl uses Yarn for managing it's node modules, which we'll need to install as well. npm i -g yarn Navigate to your Pterodactyl (usually `/var/www/pterodactyl`) and run the following command to initialize dependencies: cd /var/www/pterodactyl yarn **Additional dependencies** We make use of some additional dependencies that might not come preinstalled with your distribution. For this example, we'll use `apt`. Commands may differ for distributions that are not Debian-based. apt install -y zip unzip git curl wget #### Excited yet? Whether you plan to use Blueprint for it's extensions, developer tools or both - we're so happy to see you! Within the next 15 minutes, you'll be able to install and develop extensions through and with the Blueprint framework. #### Download the latest release Download the latest version of Blueprint onto your server by either downloading the latest release [from GitHub](https://github.com/BlueprintFramework/framework/releases/latest) or running the one-liner below (which will save the file as `release.zip`). wget "$(curl -s https://api.github.com/repos/BlueprintFramework/framework/releases/latest | grep 'browser_download_url' | cut -d '"' -f 4)" -O release.zip #### Extract release Unarchive the release you downloaded in the previous step in your Pterodactyl folder. mv release.zip /var/www/pterodactyl/release.zip cd /var/www/pterodactyl unzip release.zip `unzip` might give you the choice to overwrite a file or not. When installing Blueprint, always overwrite existing Pterodactyl files, as they are needed for Blueprint to function. #### Configuration This step allows Blueprint to function and know where itself and Pterodactyl are located and which permissions to use. Create a file called `.blueprintrc` inside of your Pterodactyl directory to begin. touch /var/www/pterodactyl/.blueprintrc Modify the `$WEBUSER`, `$USERSHELL` and `$PERMISSIONS` values to match your environment. Provided below is the standard configuration for Debian-based systems, but you might need to make your own modifications. echo \ 'WEBUSER="www-data"; OWNERSHIP="www-data:www-data"; USERSHELL="/bin/bash";' >> /var/www/pterodactyl/.blueprintrc #### Let Blueprint do the rest All that's left is giving `blueprint.sh` execute permissions and running it. Blueprint will then do the necessary commands to operate correctly automatically. chmod +x blueprint.sh bash blueprint.sh Optionally you can enable Bash autocompletion by adding `source blueprint;` into your `.bashrc` (or `.zshrc` when using ZSH). #### Mission complete! Blueprint should now be installed onto your Pterodactyl panel which means you'll be able to start installing or developing extensions. To learn more about Blueprint's command line utility, run `blueprint -help`. If you like the project, please [star](https://github.com/BlueprintFramework/framework) it on GitHub. Get started with developing extensions through [this guide](https://blueprint.zip/docs?page=getting-started/Extension-development) or find new extensions on [the extension discovery list](https://blueprint.zip/browse) . There is so much to discover, welcome to Blueprint. **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Documentation ============= #### Guides and feature documentation for developers and system administrators. Install Blueprint ================= Easily manage, develop and configure versitile extensions with Blueprint. Powered by the community. [Get started](https://blueprint.zip/docs?page=getting-started/Installation) [### Create](https://blueprint.zip/docs?page=getting-started/Extension-development) [### Install](https://blueprint.zip/docs?page=getting-started/Installation) [### FAQs](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Written by those who've walked the path. Want to improve our guides? Contribute and help build something awesome! [Contribute](https://github.com/BlueprintFramework/web/tree/main/docs/pages/getting-started) Managing Extensions =================== #### Install, remove, and configure Blueprint extensions. Blueprint extensions must be installed, updated, built and removed via the command line. Shell access is required to perform these actions. ### **Install Extensions** **Only use extensions from trusted sources** such as **[Blueprint's extension repository](https://blueprint.zip/browse) **, [sourceXchange](https://sourcexchange.net/) or [BuiltByBit](https://builtbybit.com/) . Third-party sources may contain unverified or malicious code. To install a Blueprint extension, move the `.blueprint` file into your Pterodactyl root directory, usually `/var/www/pterodactyl`. Then run the following command in your terminal: blueprint -install (extension) Replace `(extension)` with the name of the extension or the exact filename of the `.blueprint` file. This will trigger the installation process. ### **Remove Extensions** To uninstall a Blueprint extension, run the following command: blueprint -remove (extension) Replace `(extension)` with the name of the extension you want to remove. This will safely remove the extension and its associated components. ### **Manage extension specific settings** Once an extension is installed, you can configure its settings directly from the Pterodactyl admin dashboard. 1. Log in to the admin interface. 2. Click on the puzzle piece icon in the top-right corner to open the Extensions Overview. 3. From here, select the extension you wish to manage. This will open a configuration view where you can adjust extension-specific options. Settings interfaces are defined by the extension developer and may vary depending on the extension. Some even don't have settings at all. **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Frequently Asked Questions ========================== #### Answers to questions we get asked on a regular basis. ##### What is Blueprint and why does it exist? Blueprint is a framework for developing, installing and managing versitile extensions for the [Pterodactyl panel](https://pterodactyl.io/) . It aims to be a full on replacement for overwriting files when making modifications while improving the experience for developers, clients and system administrators. ##### Where can I discover and download extensions? We have a "browse" section on our website, which you can find [here](https://blueprint.zip/browse) . You'll be able to find awesome themes and extensions there which are made with the extension framework. ##### How can I install, remove and update extensions? Installing/updating extensions is easy, just throw the "extension.blueprint" file in your Pterodactyl directory and run `blueprint -install (extension)`. Removing extensions can be done through `blueprint -remove (extension)`. ##### How do I enable Bash autocompletion for `blueprint`? You can enable Bash autocompletion by adding `source blueprint;` into your `.bashrc` (or `.zshrc` when using ZSH). **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Written by those who've walked the path. Want to improve our guides? Contribute and help build something awesome! [Contribute](https://github.com/BlueprintFramework/web/tree/main/docs/pages/getting-started) Extension development ===================== #### Set up your extension development environment. **Developer mode** has to be turned on in your **admin panel** (Admin > Extensions > Blueprint) before you can run developer commands. You only have to do this once. ### **Quick start** Get started by beginning from a template, naming and describing your extension through the initialize command. **Extension identifiers should be lowercase a-z characters only.** Blueprint would normally stop you from installing/creating extensions that do not meet that standard, but there is a bug in `beta-2024-12` preventing it from doing so. **Extension identifiers not meeting this standard will not work in future versions** and can cause unexpected issues when installed. blueprint -init When choosing a template, select `Barebones` to be able to follow along with this guide. Most options can be changed later, so don't procrastinate too much thinking of an extension name. After running this command, you can now find your extension files in the `.blueprint/dev` directory (which is located inside of your Pterodactyl folder). You can use cd to change to this directory. cd .blueprint/dev ### **Applying changes** To apply any changes you've made and preview them on your panel, run the following developer command. This command installs extension files from `.blueprint/dev/` like it were a normal extension. blueprint -build [](https://github.com/BlueprintFramework/web/edit/main/docs/pages/getting-started/Extension-development.md) Previous [Next](https://blueprint.zip/docs?page=developing-extensions/Admin-views) **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Written by those who've walked the path. Want to improve our guides? Contribute and help build something awesome! [Contribute](https://github.com/BlueprintFramework/web/tree/main/docs/pages/developing-extensions) Custom controllers ================== #### Write custom controllers instead of using the premade one. Controllers allow for added functionality and flexibility to your extension's admin page. This can be useful when making configuration pages, calculating certain things beforehand, query APIs and much more. Before you start writing your custom controller, you will need to create a `controller.php` file. After doing so, you'll want to define it in your extension's [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) : admin: controller: "controller.php" With that part done, go into your `controller.php` file and start by registering the namespace. You might notice the `{identifier}` text, which is a placeholder that automatically gets replaced by Blueprint, which you can learn more about [here](https://blueprint.zip/docs?page=documentation/placeholders) . view->make( 'admin.extensions.{identifier}.index', [\ 'root' => "/admin/extensions/{identifier}",\ 'blueprint' => $this->blueprint,\ ] ); } After adding this function, you should be able to load your extension's admin page when attempting to visit it and use [`$blueprint`](https://blueprint.zip/docs?page=documentation/$blueprint) inside of the view and controller. [](https://github.com/BlueprintFramework/web/edit/main/docs/pages/developing-extensions/Custom-controllers.md) [Previous](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Next](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Written by those who've walked the path. Want to improve our guides? Contribute and help build something awesome! [Contribute](https://github.com/BlueprintFramework/web/edit/main/docs/pages/developing-extensions/Dashboard-wrappers.md) Dashboard wrappers ================== #### Extend the Pterodactyl client and admin dashboard within the Laravel blade wrapper. Dashboard wrappers allow you to extend both the **admin** and **client** dashboard views with custom logic rendered server-side via Laravel Blade templates. They are ideal for displaying dynamic data, utilizing PHP logic, or integrating features from the [BlueprintExtensionLibrary](https://blueprint.zip/docs?page=documentation/$blueprint) . While wrappers are rendered on the server, any JavaScript inside them will still be executed on the client as usual. Configuration ------------- To register a wrapper, define it in your extension’s `conf.yml` under the desired section: * `admin`: Adds the wrapper to all admin pages under `/admin/` * `dashboard`: Adds the wrapper to all non-admin panel pages (e.g., server overview, server console, etc.) You can also target both areas by specifying the same wrapper for each. admin: wrapper: "wrapper.blade.php" dashboard: wrapper: "wrapper.blade.php" Example wrapper --------------- Below is a minimal example showing how a wrapper can be used to conditionally render content based on a database value. @php $isEnabled = $blueprint->dbGet('spaceinvaders', 'enabled'); @endphp @if($isEnabled)

Extension is enabled!

@else

Extension is not enabled.

@endif This checks the `enabled` setting of the `spaceinvaders` extension and displays a corresponding message. While this example is simple, it demonstrates how you can embed logic using the `BlueprintExtensionLibrary` within your Blade wrappers. For more information about blade views, visit [Laravel’s blade template documentation](https://laravel.com/docs/10.x/blade) . [](https://github.com/BlueprintFramework/web/edit/main/docs/pages/developing-extensions/Dashboard-wrappers.md) [Previous](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Next](https://blueprint.zip/docs?page=developing-extensions/React-components) **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Written by those who've walked the path. Want to improve our guides? Contribute and help build something awesome! [Contribute](https://github.com/BlueprintFramework/web/tree/main/docs/pages/developing-extensions) Admin configuration =================== #### Add configuration options to your extension's admin page. This example demonstrates how to create an admin controller that loads and saves extension-specific configuration values using the [BlueprintExtensionLibrary](https://blueprint.zip/docs?page=documentation/$blueprint) database utility. It also covers how to define the corresponding migration to initialize default configuration values, along with input validation through a custom form request. Controller ---------- ### Controller setup After creating your [custom controller](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) , you can now extend it to load and store configuration values. Start by importing the necessary classes: namespace Pterodactyl\Http\Controllers\Admin\Extensions\{identifier}; use Illuminate\View\View; use Illuminate\View\Factory as ViewFactory; use Pterodactyl\Http\Controllers\Controller; use Pterodactyl\Http\Requests\Admin\AdminFormRequest; use Illuminate\Http\RedirectResponse; use Pterodactyl\BlueprintFramework\Libraries\ExtensionLibrary\Admin\BlueprintAdminLibrary as BlueprintExtensionLibrary; Most of these classes should be familiar from the [custom controller](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) setup. Here’s what’s new: * `AdminFormRequest`: Handles form input validation. * `RedirectResponse`: Used to return the user back to the admin page after saving changes. Inject the `SettingsRepositoryInterface` into your controller constructor: public function __construct( private ViewFactory $view, private BlueprintExtensionLibrary $blueprint, private SettingsRepositoryInterface $settings, ) {} ### Loading configuration To handle configuration, extend your `index()` function to retrieve the current values. For this example, we will add the configuration `theme`, `customName` and `count`: public function index(): View { $theme = $this->blueprint->dbGet('{identifier}', 'theme'); $customName = $this->blueprint->dbGet('{identifier}', 'customName'); $count = $this->blueprint->dbGet('{identifier}', 'count'); return $this->view->make( 'admin.extensions.{identifier}.index', [\ 'theme' => $theme,\ 'customName' => $customName,\ 'count' => $count,\ 'root' => "/admin/extensions/{identifier}",\ 'blueprint' => $this->blueprint,\ ] ); The `$blueprint->dbGet()` function is used to retrieve values from the database. At the end of the function, the Blade view is returned along with the configuration values. For more information about Blueprints database helper functions, take a look at the [BlueprintExtensionLibrary documentation](https://blueprint.zip/docs?page=documentation/$blueprint) . ### Saving configuration To save the configuration, add an `update()` function to your controller. This will be called when the user submits the admin form located in your view via `PATCH` request. public function update({identifier}SettingsFormRequest $request): RedirectResponse { foreach ($request->normalize() as $key => $value) { $this->blueprint->dbSet("{identifier}", $key, $value); } return redirect()->route('admin.extensions.{identifier}.index'); } The `update()` function accepts a validated form request and saves each setting using the `dbSet()` function of the [BlueprintExtensionLibrary](https://blueprint.zip/docs?page=documentation/$blueprint) . At the end you will be redirect to the `index()` function to refresh all the data on your extension's admin page to check if everything got saved correctly. ### Input validation Finally, create a form request class at the bottom of the controller file (outside of your controller class) to validate incoming form data: class {identifier}SettingsFormRequest extends AdminFormRequest { public function rules(): array { return [\ 'theme' => ['string', 'in:1,2,3'],\ 'customName' => ['string'],\ 'count' => ['numeric'],\ ]; } public function attributes(): array { return [\ 'theme' => 'Theme',\ 'customName' => 'Custom Name',\ 'count' => 'Count,\ ]; } } * `rules()` defines the validation rules for each input field. * `attributes()` provides user-friendly names for use in validation error messages. For more information about validation rules, see [Laravel’s validation documentation](https://laravel.com/docs/10.x/validation#available-validation-rules) . Defining default configuration values with migrations ----------------------------------------------------- This section provides a basic introduction to migrations. For a more in-depth understanding, as well as how to actual define migrations in Blueprint, refer to the [Custom Table and Migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) guide before continuing. To define the structure of your extension's configuration and register default values, you can use a database migration. This ensures your settings are initialized correctly when the extension is installed. [Create a migration file](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) and include the following logic: dbSetMany("{identifier}", [\ 'theme' => '0',\ 'customName' => 'superuser',\ 'count' => 10,\ ]); } public function down(): void { DB::table('settings')->where('key', 'like', '{identifier}::%')->delete(); } }; The `up` function inserts default key-value pairs via [BlueprintExtensionLibrary](https://blueprint.zip/docs?page=documentation/$blueprint) 's `dbSetMany()` function. The `down` function reverses these changes by removing all settings entries that match your extension’s key prefix. View ---- ### Form structure
... {{ csrf_field() }}
This is the basic form structure you can use in your view. Don't be surprised that the `POST` method is used in the form and not `PATCH`. This is because [HTML Forms do not support this request method](https://laravel.com/docs/10.x/routing#form-method-spoofing) . So that we can still send the message as `PATCH`, meta information is added to the submit button. Here you can see that the request type is set to `PATCH` via `name="_method"` and `value="PATCH"`. `{{ csrf_field() }}` inserts a hidden CSRF token input into the form, which Laravel uses to protect against Cross-Site Request Forgery (CSRF) attacks. It ensures that the form submission is coming from an authenticated and trusted source. ### Form fields To go along with the current example, we add a text `input` for `customName`, a `dropdown` for `theme` and a number `input` for `count` to the `form`:
{{ csrf_field() }}
And now you're done. You should be able to load and save your admin configuration. [](https://github.com/BlueprintFramework/web/edit/main/docs/pages/developing-extensions/Admin-configuration.md) [Previous](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Next](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Written by those who've walked the path. Want to improve our guides? Contribute and help build something awesome! [Contribute](https://github.com/BlueprintFramework/web/tree/main/docs/pages/developing-extensions) Creating custom web routes ========================== #### Add your own web routes accessible from everywhere within Blueprint. This guide provides a step-by-step overview on how to define custom web routes using a dedicated controller within a Blueprint extension. ### **Define the controller directory and routing file** Begin by creating a new directory within your extension to store your controller classes. In this example, we will use a directory named `controllers`. Next, open your `conf.yml` file and define the location of your controller directory and route file under the `requests` section. This allows Blueprint to recognize and load your custom logic. requests: views: "" app: "controllers" routers: application: "" client: "" web: "routes.php" * `app`: Points to the folder containing your controller classes. * `routers:web`: Defines the file responsible for registering your web routes. For more details on configuration, refer to the [conf.yml documentation](https://blueprint.zip/docs?page=documentation/confyml) . Depending on your use case, you may also define routes using `routers:application` or `routers:client`. Unlike `web` routes, which are publicly accessible, even to unauthenticated users, these route types are protected: * `client`: Can only be accessed by logged in user and via API key. * `application`: Can only be accessed via API key. Exact permissions can be defined. Each route also has a different url prefix: * `application`: `/api/application/extensions/{identifier}` * `client`: `/api/client/extensions/{identifier}` * `web`: `/extensions/{identifier}` ### **Creating a controller** Inside the `controllers` directory, create a PHP file named after your controller class. The file and class name **must match exactly**. In this example, we will create a controller that handles routes for the dashboard and name the file `ExtensionDashboardController.php`. json([\ 'status' => 'success',\ ]); } } * This controller defines a `getData()` method that returns a JSON response. For advanced controller techniques, see the [Laravel controller documentation](https://laravel.com/docs/10.x/controllers) . For different response types (redirects, files, etc.), refer to [Laravel HTTP responses documentation](https://laravel.com/docs/10.x/responses) . ### **Registering routes** Create a PHP file named `routes.php` (or another name, as long as it matches your `conf.yml`) to define your routes. This extension is called {name}. {identifier} is the identifier of this extension. The current version is {version}.

![](https://blueprint.zip/.assets/storage/docs/png/3.png) You might have already noticed that `{name}`, `{identifier}` and `{version}` have been replaced with the corresponding values automatically. These strings are referred to as [placeholders](https://blueprint.zip/docs?page=documentation/placeholders) , which you can find documentation for [on this page](https://blueprint.zip/docs?page=documentation/placeholders) . Right now all lines or on the same row. This is due to how Blueprint builds your admin view internally, as it doesn't handle linebreaks. We can fix this by adding `
` tags at the end of each line.

This extension is called {name}.
{identifier} is the identifier of this extension.
The current version is {version}.

![](https://blueprint.zip/.assets/storage/docs/png/5.png) This looks a bit plain, doesn't it? We can spice things up and add a bit of depth with box containers, a fancy title and a much better user experience. We can achieve this with the `box` css class, which is included in the Pterodactyl admin panel by default. To add a nice color alongside the box, you can make use of the following classes: `box-primary`, `box-info`, `box-success`, `box-warning` and `box-danger`.

My awesome box

This extension is called {name}.
{identifier} is the identifier of this extension.
The current version is {version}.

![](https://blueprint.zip/.assets/storage/docs/png/6.png) You have now created your very own admin page through Blueprint. Try experimenting a bit with it, and once you are ready, move onto the next guide. [](https://github.com/BlueprintFramework/web/edit/main/docs/pages/developing-extensions/Admin-views.md) [Previous](https://blueprint.zip/docs?page=getting-started/Extension-development) [Next](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Written by those who've walked the path. Want to improve our guides? Contribute and help build something awesome! [Contribute](https://github.com/BlueprintFramework/web/tree/main/docs/pages/developing-extensions) Custom table and migrations =========================== #### Add custom database tables to store user-specific or complex data structures. While the [BlueprintExtensionLibrary](https://blueprint.zip/docs?page=documentation/$blueprint) 's `dbGet()` and `dbSet()` functions provide a convenient way to store extension-wide data, sometimes more granular control is needed—such as storing user-specific settings or complex datasets. This is where custom database tables and migrations come into play. Defining migrations ------------------- To begin, define what kind of data your extension should store and create a new migration to handle the database structure. Migrations are used to extend the panel's database schema with extension-specific tables. First, specify a directory to store your migration files in the `conf.yml`: database: migrations: "migrations" You define a directory, **not a single file**, because migrations are versioned and only run once. Future updates to your schema should be handled by additional migration files. ### Migration file structure Migration files must follow a strict naming convention: `YYYY_MM_DD_HHMMSS_migration_name.php`. This ensures they are executed in the correct order. Use the current date and time when naming your file. As example, we create a table for custom user specific data: // 2025_04_23_163000_add_userdata_table.php unsignedInteger('user_id'); $table->foreign('user_id')->references('id')->on('users'); $table->boolean('enabled')->default(0); $table->string('customName')->default(""); $table->json('categories')->default("[]"); }); } /** * Reverse the migrations. */ public function down(): void { Schema::drop('{identifier}_userdata'); } }; Each migration file contains two primary functions: `up()` and `down()`. These define what changes are made to the database when the migration is run, and how to undo them. * The `up()` function is executed when the migration is first applied. It defines the structural changes you want to make to the database. In the example above, it creates a new table named `{identifier}_userdata`. This table includes: * A foreign key `user_id` referencing the `users` table, * A boolean field `enabled` (default: `0`), * A string field `customName` (default: empty string), * A JSON field `categories` (default: empty array `[]`). * The `down()` function is the reverse of `up()`. It defines how to **rollback** the migration if needed. In most cases, such as this example, you simply remove the table using `Schema::dropIfExists('{identifier}_userdata')`. This structure makes database migrations both forward-compatible (via `up()`) and reversible (via `down()`), providing a clean way to version and maintain schema changes over time. For more information about migrations, take a look inside the [Laravel's migration documentation](https://laravel.com/docs/10.x/migrations) . Reading data from your table ---------------------------- To retrieve data, use Laravel’s built-in `DB` facade. First, import it in your controller: use Illuminate\Support\Facades\DB; Then, define a function to query your table. In this function we want to get the `categories` of the current user: public function getCategories() { // Check if the user of the current request exists $user = auth()->user(); if ($user == null) {return response(null);} // Gets the data corrensponding to the user id $data = DB::table('{identifier}_userdata')->where('user_id', $user->id)->first(); // Check if data exists if ($data == null) {return response(null);} // Returns the requested data return response($data->categories); } This function checks for an authenticated user, queries the table using their ID, and returns the `categories` field if found. Saving data to the table ------------------------ Saving works similarly as the logic used at the [admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) . public function update({identifier}UserSettingsFormRequest $request) { $userId = auth()->user()->id; $valuesToUpdate = $request->normalize(); DB::table('{identifier}_userdata') ->updateOrInsert( ['user_id' => $userId], $valuesToUpdate ); return response()->json($valuesToUpdate); } This function saves or updates the user’s row in your custom table. The `updateOrInsert()` function handles both creation and updating automatically. Input validation ---------------- Define a custom form request at the end of your controller file to validate incoming data: class {identifier}UserSettingsFormRequest extends AdminFormRequest { public function rules(): array { return [\ 'enabled' => 'nullable|numeric|min:0|max:1',\ 'customName' => 'nullable|string',\ 'categories' => 'nullable|string',\ ]; } public function attributes(): array { return [\ 'enabled' => 'Enabled',\ 'categories' => 'Categorie',\ 'customName' => 'Custom Name',\ ]; } } This ensures incoming data matches the expected format and helps prevent invalid writes to your table. With this setup, your extension can now store complex or user-scoped data efficiently. [](https://github.com/BlueprintFramework/web/edit/main/docs/pages/developing-extensions/Custom-table-and-migrations.md) [Previous](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Next](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Written by those who've walked the path. Want to improve our guides? Contribute and help build something awesome! [Contribute](https://github.com/BlueprintFramework/web/tree/main/docs/pages/developing-extensions) React components ================ #### Add your own component on specific places in the Pterodactyl panel. ### **Preparation** Blueprint extensions can add custom pages to Pterodactyl and content to existing pages through the [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) feature. Before we can start utilizing this feature, create a directory called `components` and assign it in your [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) configuration like shown below. dashboard: components: "components" Inside of that directory, create a file called `Components.yml`, which will contain our Components configuration. Inside of that file, add the example configuration from the [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) documentation. ### **Creating a custom page** Create a file called `ExampleComponent.tsx` (inside of the `components` folder) and define it as a new route in your `Components.yml` configuration. // ExampleComponent.tsx import React from 'react'; import PageContentBlock from '@/components/elements/PageContentBlock'; const ExampleComponent = () => { return ( <> {/* ... */} ); }; export default ExampleComponent; # Components.yml Navigation: Routes: - { Name: "Example", Path: "/example", Type: "server", Component: "ExampleComponent" } When building your extension, you'll now see an "Example" page which you can access when managing servers. You may use `Type: "account"` if you want add a page to the account page group. You can create additional components and import them from your `ExampleComponent.tsx`. For this example, we'll create a new file called `Content.tsx` inside of the components folder, import it and use it inside of the custom page. // Content.tsx import React from 'react'; const Content = () => { return ( <>

This is an example component.

); }; export default Content; // ExampleComponent.tsx import Content from '@/blueprint/extensions/{identifier}/Content'; // ExampleComponent.tsx return ( <> ); With the code mentioned above, you've added the `Content.tsx` component into the `ExampleComponent.tsx`. We can add `Content.tsx` to existing pages as well through the [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) configuration. Try assigning it to one of the placement options in the components configuration and see what it does. [](https://github.com/BlueprintFramework/web/edit/main/docs/pages/developing-extensions/React-components.md) [Previous](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [Next](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Console.yml =========== #### Create and schedule Artisan commands. ### **What is Console.yml?** `Console.yml` allows you to create and schedule Artisan commands through an easy-to-use configuration file. These commands are automatically prefixed with your extension's identifier preventing conflicts between extensions. ### **Configuration** The YAML file shown below contains an example of a `Console.yml` configuration. - { Signature: "foo", Description: "returns bar", Path: "foobar.php", Interval: "" } - { Signature: "byte", Description: "[ ^ ^]", Path: "byte.php", Interval: "everyMinute" } - { Signature: "hello", Description: "prints 'hello world'", Path: "folder/hello.php", Interval: "*/5 * * * *" } ### **Intervals** Alongside cron syntax, Blueprint supports the following interval options: **`everyMinute`** Run the task every minute **`everyTwoMinutes`** Run the task every two minutes **`everyThreeMinutes`** Run the task every three minutes **`everyFourMinutes`** Run the task every four minutes **`everyFiveMinutes`** Run the task every five minutes **`everyTenMinutes`** Run the task every ten minutes **`everyFifteenMinutes`** Run the task every fifteen minutes **`everyThirtyMinutes`** Run the task every thirty minutes **`hourly`** Run the task every hour **`daily`** Run the task every day **`weekdays`** Run the task every weekday **`weekends`** Run the task every weekend-day **`sundays`** Run the task every sunday **`mondays`** Run the task every monday **`tuesdays`** Run the task every tuesday **`wednesdays`** Run the task every wednesday **`thursdays`** Run the task every thursday **`fridays`** Run the task every friday **`saturdays`** Run the task every saturday **`weekly`** Run the task every week **`monthly`** Run the task every month **`quarterly`** Run the task every quarter **`yearly`** Run the task every year **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Components.yml ============== #### Define which React components should be added on given views. ### **What is Components.yml?** While you can add React components to your extension without a `Components.yml` file, they won't be applied anywhere. `Components.yml` allows you to tell Blueprint where to apply a specific component, one or multiple targets. ### **Paths** Paths towards component files are **different** from how you would normally define file paths for extension configuration files. Component file paths cannot escape the components directory **and** cannot end with `.tsx`, `.ts`, `.jsx` or `.js`. Correct usage: Option: "Component" Points towards `Component.tsx`. Incorrect usage: Option: "../Component.tsx" Points towards `../Component.tsx.tsx`. Attempts to escape component directory. ### **Configuration** The YAML file shown below contains all configuration options that are currently supported by Blueprint's components feature. Navigation: NavigationBar: BeforeNavigation: "" AdditionalItems: "" AfterNavigation: "" SubNavigation: BeforeSubNavigation: "" AdditionalServerItems: "" AdditionalAccountItems: "" AfterSubNavigation: "" Routes: # - { Name: "", Path: "", Type: "account/server", Component: "", AdminOnly: "boolean" } Dashboard: Global: BeforeSection: "" # beta-2024-12 and later AfterSection: "" # beta-2024-12 and later Serverlist: BeforeContent: "" AfterContent: "" ServerRow: BeforeEntryName: "" AfterEntryName: "" BeforeEntryDescription: "" AfterEntryDescription: "" ResourceLimits: "" Authentication: Container: BeforeContent: "" AfterContent: "" Account: Overview: BeforeContent: "" AfterContent: "" API: BeforeContent: "" AfterContent: "" SSH: BeforeContent: "" AfterContent: "" Server: Terminal: BeforeContent: "" AdditionalPowerButtons: "" BeforeInformation: "" AfterInformation: "" CommandRow: "" AfterContent: "" Files: Browse: BeforeContent: "" FileButtons: "" DropdownItems: "" AfterContent: "" Edit: BeforeEdit: "" AfterEdit: "" Databases: BeforeContent: "" AfterContent: "" Schedules: List: BeforeContent: "" AfterContent: "" Edit: BeforeEdit: "" AfterEdit: "" Users: BeforeContent: "" AfterContent: "" Backups: BeforeContent: "" DropdownItems: "" AfterContent: "" Network: BeforeContent: "" AfterContent: "" Startup: BeforeContent: "" AfterContent: "" Settings: BeforeContent: "" AfterContent: "" **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) License ======= #### License which source code is protected under. This license is used for [BlueprintFramework/framework](https://github.com/BlueprintFramework/framework) , [BlueprintFramework/templates](https://github.com/BlueprintFramework/templates) , [BlueprintFramework/web](https://github.com/BlueprintFramework/web) and (most) other repositories from our organization. Extensions might ship with different licenses. MIT License Copyright (c) 2023-2025 Emma (prpl.wtf) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Placeholders ============ #### Strings that are automatically replaced with specific values upon extension installation. ### **What are placeholders?** Placeholders allow extensions to easily get information from each and every file in their extension, preventing the need to ask users for the Pterodactyl installation path for example. ### **Placeholders `v2`** These are the available placeholders you can use on `beta` and later. **Unless you set your target version to a beta release**, these placeholders will not be available. ##### Configuration values This placeholder group counts for most extension-config-related values. **`{identifier} byte`** Returns the extension's identifier. This identifier can be configured in your [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) and matches the identifier Blueprint uses for paths/variables related to your extension. **Context** `[conf.yml](https://blueprint.zip/docs?page=documentation/confyml) ` **Modifiers** `{identifier^} Byte` `{identifier!} BYTE` **`{name} Byte.sh`** Returns the extension's display name which you configured in your [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) . Extension display names are not limited to a limited set of characters, so parse wisely. **Context** `[conf.yml](https://blueprint.zip/docs?page=documentation/confyml) ` **Modifiers** `{name!} BYTE.SH` **`{author} prpl.wtf`** Returns the extension's author (if defined in [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) ). If not defined, this placeholder will return `undefined`. **Context** `[conf.yml](https://blueprint.zip/docs?page=documentation/confyml) ` **`{version} 1.4.3`** Returns the active extension version which is defined in your extension's [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) configuration. **Context** `[conf.yml](https://blueprint.zip/docs?page=documentation/confyml) ` ##### Miscellaneous Uncategorized and advanced placeholders that do various things. **`{random} 17388`** This placeholder will be replaced with a 'random' number. This number is determined on a per-file basis: All random placeholders that are in the same file get assigned the same random number. Random numbers may **vary in length**, so parse wisely. **Context** `$RANDOM` **`{timestamp} 1712239495`** Returns a Unix timestamp that indicates (roughly) when the extension has been installed, specifically when placeholders started initializing. This timestamp is calculated before placeholders are placed and returns the same across all files. **Context** `[Unix time](https://en.wikipedia.org/wiki/Unix_time) ` **`{mode} local`** Returns either `local` or `develop` depending on if the extension has been installed through a local "extension.blueprint" file or developer commands. **Context** `[Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) ` **`{target} beta-A428`** Returns the version of Blueprint the extension installed on. This placeholder **will not** return the extension's target version. Instead, it returns the version of Blueprint that is currently installed on that panel. **Context** `[Changelog](https://blueprint.zip/docs?page=about/Changelog) ` **Conditions** `{is_target} true/false` ##### Directories Placeholders that point towards certain directories or file paths. **`{root} /var/www/pterodactyl`** Throws the root directory of the target Pterodactyl installation, which is commonly `/var/www/pterodactyl`. This placeholder has modifiers to fetch paths to specific folders. `{root/public}` will return the root path towards your extension's local public directory. `{root/data}` behaves the same but points towards your extension's data folder instead. **Context** `Webserver directory` **Modifiers** `{root/public} /var/www/pterodactyl/.blueprint/extensions/byte/public` `{root/data} /var/www/pterodactyl/.blueprint/extensions/byte/private` `{root/fs} /var/www/pterodactyl/.blueprint/extensions/byte/fs` **`{webroot} /`** Returns paths from the outside's perspective. This can be used to easily fetch paths towards exposed directories. These paths should only be used for **outside-in** paths and will not work as local paths, parse wisely. **Context** `Exposed directory` **Modifiers** `{webroot/public} /extensions/byte` `{webroot/fs} /fs/extensions/byte` ##### Advanced Technical details about the framework handling the extension. **`{engine}`** solstice New in **beta-2024-12** Provides information about the engine handling the extension. Different engines using the extension standard that aren't affiliated with Blueprint are expected to replace this placeholder with their own codenames. **Context** `Extension standard` **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Flags ===== #### Highly-specific options that don't require their own configuration option. ### **What are flags?** Flags allow for enabling/disabling possibly advanced features that don't need their own option in [`conf.yml`](https://blueprint.zip/docs?page=documentation/confyml) file. Multiple flags must be seperated with comma's. ### **Flags** ##### Feature-specifc flags `ignorePlaceholders` Skip applying placeholders. This improves installation speed for extensions with a lot of files, but is generally not recommended. `forceLegacyPlaceholders` Force Blueprint to apply legacy placeholders instead of the new ones on extensions with a higher target version than alpha or indev. ##### Advanced flags ~`hasInstallScript`~ Deprecated in **beta-2024-12** Right before the installation completes, extensions with this flag will be able to run a shell script. This script must be called `install.sh` and be in the root of your data directory. **Deprecated in [beta-2024-12](https://blueprint.zip/docs?page=about/changelog/beta-2024-12) since install scripts are now automatically ran when detected.** ~`hasRemovalScript`~ Deprecated in **beta-2024-12** Right before starting the extension removal process, extensions with this flag will be able to run a shell script to undo some changes Blueprint isn't able to. This script must be called `remove.sh` and be in the root of your data directory. **Deprecated in [beta-2024-12](https://blueprint.zip/docs?page=about/changelog/beta-2024-12) since remove scripts are now automatically ran when detected.** ~`hasExportScript`~ Deprecated in **beta-2024-12** In the middle of the export process, extensions with this flag will be able to run a shell script to automate additional changes for distribution. This script must be called `export.sh` and be in the root of your data directory. **Deprecated in [beta-2024-12](https://blueprint.zip/docs?page=about/changelog/beta-2024-12) since export scripts are now automatically ran when detected.** ##### Developer flags `developerIgnoreInstallScript` Ignore the custom extension installation script when installing your extension through developer commands. `developerIgnoreRebuild` Skip rebuilding panel assets when installing your extension through developer commands. ~`developerForceMigrate`~ Deprecated in **beta-2024-12** Forcefully migrate the database non-interactively when installing your extension through developer commands. **Deprecated in [beta-2024-12](https://blueprint.zip/docs?page=about/changelog/beta-2024-12) since it no longer requires input for migrations.** `developerKeepApplicationCache` Prevents Blueprint from flushing the application's cache when building extensions through developer commands. `developerEscalateInstallScript` Allows you to run install scripts with root permissions instead of running them through the webserver user. `developerEscalateExportScript` Allows you to run export scripts with root permissions instead of running them through the webserver user. **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Branding ======== #### Brand usage guidelines, assets and documentation. Want to use Blueprint’s brand resources? Awesome! We have only a few guidelines we follow for everything we do, which we ask you to follow as well. ### Logo We have a bunch of different versions of our logo which you may use when referring to or referencing Blueprint. You may not modify them. Using our logo for your own open and/or closed source projects is not allowed. ![Blueprint](https://blueprint.zip/.assets/brand/logo.jpg) ![Blueprint](https://blueprint.zip/.assets/brand/pride5.jpg) ![Blueprint](https://blueprint.zip/.assets/brand/logoTransparent.png) Blueprint's assets folder also contains an older unused version of our logo, do not use them when referring to or referencing Blueprint. ![Blueprint](https://blueprint.zip/.assets/brand/logoTransparent.png) ![Blueprint](https://blueprint.zip/.assets/brand/logoTransparentOld.png) ### Name Blueprint is called **Blueprint**, no capital P and no space between "blue" and "print". Blueprint --------- Correct BluePrint --------- Incorrect ### Brand Kit All assets (including marketplace banners, placeholder icons and other miscellaneous assets) are bundled with releases and are located in `blueprint/assets/` (`.blueprint/assets` on Pterodactyl installations). You can also download assets [from our GitHub repository](https://github.com/BlueprintFramework/framework/tree/main/blueprint/assets) which contains up-to-date brand material. **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Changelog ========= #### List of changes, improvements and bugfixes per version release. #### Pre-releases [### beta-2025-05 Unstable](https://blueprint.zip/docs?page=about/changelog/beta-2025-05) #### Supported releases [### beta-2024-12 Latest](https://blueprint.zip/docs?page=about/changelog/beta-2024-12) [### beta-2024-08](https://blueprint.zip/docs?page=about/changelog/beta-2024-08) #### Unsupported/Deprecated releases [### beta-2024-07](https://blueprint.zip/docs?page=about/changelog/beta-2024-07) [### beta-F248](https://blueprint.zip/docs?page=about/changelog/beta-F248) [### beta-A428](https://blueprint.zip/docs?page=about/changelog/beta-A428) [### alpha-SLX](https://blueprint.zip/docs?page=about/changelog/alpha-SLX) [### alpha-NLM](https://blueprint.zip/docs?page=about/changelog/alpha-NLM) [### alpha-3ZX](https://blueprint.zip/docs?page=about/changelog/alpha-3ZX) [### alpha-IPS](https://blueprint.zip/docs?page=about/changelog/alpha-IPS) [### alpha-XT1](https://blueprint.zip/docs?page=about/changelog/alpha-XT1) [### alpha-2N2](https://blueprint.zip/docs?page=about/changelog/alpha-2N2) [### alpha-F0V](https://blueprint.zip/docs?page=about/changelog/alpha-F0V) ### alpha-VKL ### alpha-83W ### alpha-L53 ### alpha-YE5 ### alpha-LV5 ### alpha-4TK ### alpha-A9X ### alpha-Y4Y ### alpha-7FZ ### alpha-EV0 ### alpha-5KB ### alpha-ML7 ### alpha-T0R ### alpha-DB4 ### alpha-XFC ### alpha-X34 ### indev-AXN ### indev-8X2 ### indev-1GG ### indev-OXG ### indev-M29 ### indev-QNH ### indev-WI9 ### indev-TC2 ### indev-4N3 ### indev-MS7 ### indev-DW2 ### indev-00A ### indev-D6G ### indev-7WA ### indev-YNM ### indev-CIX ### indev-IV8 ### indev-MSA ### indev-T5W ### indev-R4U **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) conf.yml ======== #### Change extension configuration options, add extension flags and tell Blueprint what to do with your extension. ### **What is conf.yml?** When installing extensions, Blueprint needs to know a lot of things about an extension before it can start doing file operations. For this reason, every single extension is required to have a "conf.yml" file to inform Blueprint about what it should do with your extension. ### **Options** ##### info `name` Required The display name of your extension. `identifier` Required Used for folder trees, routers, view names and more. Identifiers may only contain a-z lowercase characters and must be unique (two extensions cannot share the same identifier on one system). `description` Required Describe your extension. This shows on the admin page of your extension. `flags` Optional configuration string to apply advanced flags to your extensions. [Learn more](https://blueprint.zip/docs?page=documentation/flags) about flags. `version` Required The version of your extension. `target` Required The target version is compared to the currently installed version of Blueprint on installation. If this is not the same Blueprint will warn the user about your extension possibly not being able to function as expected. `author` The spot to put you or your team's name. Planned to be required once fully implemented. `icon` File path to your extension's icon. Must be a PNG, JPG or JPEG. `website` URL to your extension's website. Will be linked on the extension's admin page. ##### admin `view` Required Path to your admin view. `controller` Path to your custom admin view controller. `css` Add custom css to the Pterodactyl admin panel, provide the path to your `.css` file here. `wrapper` Path to blade code that you want to add to the Pterodactyl admin dashboard layout. ##### dashboard `css` Add custom css to the Pterodactyl client panel, provide the path to your `.css` file here. `wrapper` Path to blade code that you want to add to the Pterodactyl client dashboard layout. `components` Directory with React components which can be used to integrate your extension directly with the Pterodactyl frontend. [Learn more](https://blueprint.zip/docs?page=developing-extensions/React-components) about React components. ##### data `directory` Path to your data directory. These are private extension-specific files which you can store anything in. Even without this option enabled, private directories still get utilized by Blueprint. `public` Path to your public directory. All files in this folder are available publicly and can be seen by anyone, so don't store any secrets or keys here. `console` Path to your console directory which allows for creating Artisan commands and scheduling them. [Learn more](https://blueprint.zip/docs?page=documentation/consoleyml) about the console API. ##### requests `views` Path to your views directory. This directory is used for creating (partial) views made up of sections which you can import to your admin view and admin/dashboard wrapper. These views can be called from `blueprint.extensions..`. `app` New in **beta-2024-12** Directory pointing towards a folder with classes you can use with your application. These exist in the `Pterodactyl\BlueprintFramework\Extensions\` namespace. Referred to as `controllers` in older versions of Blueprint. `routers` Create your own route definitions. Suboptions are `application`, `client` and `web`. If no suboptions are defined and `routers` is used as an option, `routers` will act as the `web` suboption. ##### database `migrations` Path to your database migrations folder. **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Scripts ======= #### Advanced feature allowing extensions to go beyond Blueprint's extension API. **This section is still being written.** You might run into unfinished explanations, incorrect instructions, outdated or misinformation. Extension scripts can be destructive and collide with each other. **Always prioritize compatibility** with other extensions and **extensively test** your scripts before distributing them. ### **What are scripts?** Extension scripts are advanced collections of commands allowing extensions to extend parts of Pterodactyl that are out of Blueprint's scope. Due to the nature of the complexity related to these scripts, they are advised against. Scripts can **prevent extensions from being listed** on the [extension browse list](https://blueprint.zip/browse) if they do not meet **all of the following requirements**: * Scripts should never cause conflicts with other extensions respecting these guidelines. * This means extensions are not allowed to overwrite files outside of the scope of their own extensions and must use search-and-replace instead. * Scripts must stay within the Pterodactyl instance and not edit anything outside of the panel's webserver folder without user consent. * Extensions must undo all of their changes when removing the extension. * Updating extensions utilizing scripts must not break their modifications. * Scripts should use **environment variables** or [placeholders](https://blueprint.zip/docs?page=documentation/placeholders) for detecting the webserver folder. * [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) are not available for `update.sh` and `export.sh`. **Export scripts are free from (most of) these limitations** as they are specifically made to help the developer automate actions upon export. As long as you don't cause permanent damages through export scripts, you should be fine. ### **Environment variables** These variables can be used anywhere in your scripts and are automatically assigned the correct value by Blueprint. ##### Baseline `$ENGINE` Codename of the engine currently handling the extension. `$EXTENSION_IDENTIFIER` Provides the extension's identifier. `$EXTENSION_VERSION` Provides the extension's version. `$EXTENSION_TARGET` Provides the extension's defined target version, not to be confused with the version the extension is currently being installed on. `$PTERODACTYL_DIRECTORY` Path towards the Pterodactyl webserver folder, commonly `/var/www/pterodactyl`. `$BLUEPRINT_VERSION` Blueprint version currently installed on the target panel. ##### Limited availability `$BLUEPRINT_DEVELOPER` install.sh update.sh remove.sh export.sh Either `true` or `false` depending on if the extension was installed through developer commands. `$BLUEPRINT_TMP` install.sh update.sh remove.sh export.sh Path towards the folder where Blueprint is either building the extension package or preparing the extension for installation depending on script type. ##### Deprecated ~`$BLUEPRINT_EXPORT_DIRECTORY`~ Deprecated in **beta-2024-12** Path towards the folder where Blueprint is building the extension package. **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Latest Supported beta-2024-12 ============ #### Changes * Blueprint now automatically deletes `.gitkeep` from the extension development folder after any developer command has been ran. * Add `extensions()`, `dbGetMany()`, `dbSetMany()`, `dbForgetMany()` to [BlueprintExtensionLibrary](https://blueprint.zip/docs?page=documentation/$blueprint) . * `fileRead($path)` and `fileWipe($path)` now use PHP functions instead of shell commands. * **License holder name has been updated** from "Ivy (prpl.wtf)" to "Emma (prpl.wtf)". * Move extension admin page website icon detection to case statement in `-install`. * [`Console.yml`](https://blueprint.zip/docs?page=documentation/consoleyml) intervals are now detected through case statements, instead of if statements. * Blueprint badge asset has changed size to a higher quality version. * Update `FUNDING.yml` and add additional issue templates. * Undocumented [`Components.yml`](https://blueprint.zip/docs?page=documentation/componentsyml) "permission" value has been added to debug logs. * `-info` values are now dimmed in supported terminal emulators. * `dbGet($table, $record)` now has an optional argument `$default` which will be returned if the database record is empty. * Migrations are now forced on extension installs. This change makes the `developerForceMigrate` [flag](https://blueprint.zip/docs?page=documentation/flags) obsolete. * Add `engine` [placeholder](https://blueprint.zip/docs?page=documentation/placeholders) . * Broadcast `queue:restart` command on extension transaction. * Deprecated flags now provide warnings on extension transactions. * Add private version of ExtensionFS (`blueprint_private:`) that is symlinked to the extension's private directory. * [`Components.yml`](https://blueprint.zip/docs?page=documentation/componentsyml) has a new "Global" scope within "Dashboard". * Install, remove and export scripts now have access to the `$ENGINE` environment variable. * Add [`update.sh`](https://blueprint.zip/docs?page=documentation/scripts) script which will be ran upon an extension update transaction. * Complete rewrite of Blueprint telemetry. * Add a Code of Conduct (CoC) and Security policy to Blueprint. * Removed `configutility.sh` in favor of the new telemetry rewrite and `bp:developer` artisan command. * Removed database migrations and replaced them with a database seeder. * Overall improvements to the extensions page. * No longer use CLI commands to place and remove extension buttons on/from the extensions page, instead, we're using the newly released `extensions()` API. * Version checking has been sped up and will now cache the latest release name in the background, once a day. * Add a progress bar to `-upgrade`, `-rerun-install`, `-install` and `-remove`. * New error notice on unfinished Blueprint installs. * Add Blueprint to the Pterodactyl copyright notice, with an optional flag to disable it. * Add `show_in_sidebar` flag to optionally add the "Extensions" button to the admin panel's sidebar. * Add new `-query` command to get information about an extension without installing it. * Add new `bp:telemetry` artisan command to see what data is sent to Blueprint's telemetry API. * Add support for `.blueprintrc` which can be used to override variables like `$FOLDER` and persists on updates. #### Bugfixes * Some parts of Blueprint's React modifications caused errors with Prettier in certain cases. * Use `printf` instead of `echo` to write to `installed_extensions` as a way to prevent new lines from generating. * Removing the first installed extension causes a Laravel routing error. * ExtensionFS was not unlinked in the public directory. * Allow single quotes in extension name and description ([#69](https://github.com/BlueprintFramework/framework/pull/69) ). * `grabenv.sh` was causing ~0.4s delays when running any Blueprint CLI command. * Bash tab suggestions would break on `-install` when there were no extension files available. #### Breaking Changes * [`conf.yml`](https://blueprint.zip/docs?page=documentation/confyml) `requests_controllers` has been deprecated and will alias to `requests_app`. This does not change implementation and can be resolved by renaming the configuration option. * [BlueprintExtensionLibrary](https://blueprint.zip/docs?page=documentation/$blueprint) 's `dbGet($table, $record)` method now returns `null` when a value is empty, instead of returning an empty string. * [BlueprintExtensionLibrary](https://blueprint.zip/docs?page=documentation/$blueprint) 's **legacy variation** is being phased out. All `notify` and `file` methods now return false. This does not impact admin, client and console variations. * Resolved docs/implementation mismatch causing `requests_routers` to default to `application` instead of `web`. Backwards compatibility is not provided with this change. * Extension [flags](https://blueprint.zip/docs?page=documentation/flags) `hasInstallScript`, `hasRemoveScript` and `hasExportScript` have now been deprecated. Scripts now run by default and no longer require a flag. * [BlueprintExtensionLibrary](https://blueprint.zip/docs?page=documentation/$blueprint) 's `notifyNow()` and `notifyAfter()` have been deprecated. * [`export.sh`](https://blueprint.zip/docs?page=documentation/scripts) 's `$BLUEPRINT_EXPORT_DIRECTORY` environment variable has been deprecated in favor of `$BLUEPRINT_TMP`. * `dbSet()` with a number will now also return numbers on `dbGet()` whereas before it always returned strings. * Blueprint's admin page has been removed and replaced with a modal on the extensions page. Developer and telemetry settings do not migrate over during upgrade. **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Supported beta-2024-08 ============ #### Changes * Assets in `.blueprint/assets` have been resorted to simplify searching for Blueprint branding assets. * Add new assets (including the new retro icons) to `.blueprint/assets` and remove older ones. * Outdated stylesheet/scripts (due to browser cache) prevention has been completely reworked and should no longer require any user intervention. * Add new `importScript()` and `importStylesheet()` APIs to [BlueprintExtensionLibrary](https://blueprint.zip/docs?page=documentation/$blueprint) that work with the new cache refresh rework. * Add new `bp:cache` artisan command to flush script and stylesheet cache. * Add new [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) APIs for extending the "Dashboard". (`BeforeContent` and `AfterContent`) * [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) can now utilize 2 additional HTTP methods (`PUT`, `DELETE`). * Add new [`developerEscalateInstallScript`](https://blueprint.zip/docs?page=documentation/flags) flag which allows developers to run install scripts with the same permissions as Blueprint has. This flag will only function when installing extensions through developer commands. * The Blueprint ascii logo showing in `-info` has been modified to the (vertical) retro version. * Descriptions of the `bp:sync` and `bp:latest` artisan commands have been changed. * Add new "Find more extensions" button to extensions page to promote the [Blueprint extension repository](https://blueprint.zip/browse) . * Removed Bash autocompletion for `-debug`. * Slight spacing changes on extension admin pages. #### Bugfixes * Database migrations did **not run** after completing extension installation transactions. * Users using Bash as their shell experienced errors with autocompletion on `-install` and `-remove`. * Blueprint's `bp:sync` command used the admin version of [BlueprintExtensionLibrary](https://blueprint.zip/docs?page=documentation/$blueprint) instead of the console version. * Section content height was incorrect on the "Extensions" admin page, which is fixed in this release. #### Breaking Changes * Blueprint no longer drops older database migrations from before 02/03/2024 `(dd/mm/yyyy)`. Updating from installations before this date might require manual intervention. **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Unsupported beta-2024-07 ============ #### Changes * Add bash autocompletion which can be initialized by adding `source blueprint` to your `.bashrc` (or `.zshrc` if using zsh). * Add support for installing and removing multiple extensions at once. This implementation also only runs resource-heavy commands once if any of the installed extensions require it (such as webpack asset rebuilding). * Move libraries required by the `blueprint.sh` file into `scripts/libraries` and symlink the old location. * Move `-install`, `-remove`, `-init`, `-build`, `-export`, `-wipe`, `-version`, `-help`, `-info`, `-debug`, `-upgrade` and `-rerun-install` into their own files under `scripts/commands`. * Add support for upgrading from repositories that aren't hosted on GitHub. * Update upstream [`parse_yaml`](https://github.com/mrbaseman/parse_yaml/blob/master/src/parse_yaml.sh) script used for reading extension configurations. * Alt text of extension icons are now their identifier. * Entries on the extensions page are now inline with the page title. #### Bugfixes * Remove command was not functional - this has now been fixed. * Input validation was done incorrectly on Blueprint's admin page causing validation errors when toggling developer mode or telemetry. * Entries on the extensions page were able to overlap the Pterodactyl copyright footer. **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Unsupported alpha-SLX ========= #### Changes * Add `webpack` and `react` to the required dependencies. * Extensions with website URLs linking to certain "sourceXchange" and "BuiltByBit" domains will now show the `bx-store` icon on their admin panel website button. * Update the entire logging system by writing a new library for it and redesigning the outputs. This includes rewritten log messages in a large amount of places. * The `-upgrade` command's script has now been moved onto `blueprint.sh` as it was only responsible for creating a temporarily folder, pulling latest release files and moving them. * Remove the `tools` directory as all scripts inside it have been implemented directly into `-upgrade` and `-debug`. * Step away from the `bash_colors` and `throwError` shell-based library used by `blueprint.sh` and group multiple small libraries into one library called `misc`. * Redesign placeholder extension icons which are used when an extension does not ship with an icon. * Improved error validation and detection in `blueprint.sh`. * Extensions can now create routes inside of their `Components.yml` file, allowing for adding pages to the Pterodactyl client panel. * Massively speed up `blueprint.sh` by grouping some commands and adding a bunch of optimization. * Improve code readability across multiple parts of `blueprint.sh`. * Rename the `controller.php` build file to `controller.build`. * We are stepping away from null (`NUL`) characters in build file placeholders, wrapper start/end identifiers, extension template placeholders (preperations made, not enforced until older versions become deprecated) and more. * Made small changes to both the `admin.extensions` and `admin.extensions.blueprint` view. * Installing and removing extensions now clears the application cache. * Add `-add`, which is an alias of `-install`. * Abort extension removal if argument one ends with `.blueprint`. * `ExtensionsController` and Blueprint's database migration have been switched over to 2-space indentation. * Admin view routes have been moved to `routes/blueprint.php`. * Admin and dashboard wrappers have now been moved to `partials/blueprint/`. * Webpack build progress is now shown when Blueprint needs to rebuild panel assets. #### Bugfixes * The `blueprint` CLI command would return exit code `1` in all cases, even successful events. This has been replaced by `0` for "SUCCESS" events, `1` for "ERROR" events, `2` for "USER-ERROR" events. * `SubNavigation` options in `Components.yml` had an inconsistency in component placement across similar options. * The `admin.extensions.blueprint` view had auto-complete enabled on it's input form which caused unsaved options to be cached. * `-remove` would default every unknown response as 'yes' on it's confirmation question, which should be defaulted to 'no'. **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Unsupported alpha-NLM ========= #### Changes * Extensions list alongside `misc` folder inside of `.blueprint` has now been removed. * `parse_yaml` inside of `.blueprint/lib` has been bumped to the latest commit. * Replace most (if not all) URLs leading to [`ptero.shop`](https://ptero.shop/) with [`blueprint.zip`](https://blueprint.zip/) . * Update `installWithBlueprintBanner` asset inside of `.blueprint/assets` to include the new URL of Blueprint instead of the old one. * Change related link description for [`teamblueprint/web`](https://github.com/BlueprintFramework/web) alongside removing the extension list in `README.md`. * Remove all old versions of the Blueprint logo from `.blueprint/assets`. * Outdated cache overlay is now a tiny banner at the bottom of the admin panel instead of a fullscreen overlay. * Add new `logoCoverTextPurple` asset. * Admin cache no longer directly modifies `pterodactyl.css` but instead goes through a file made specifically for extension css importing. * Add "Byte" to the Blueprint admin page. * All file and folder paths defined by an extension are validated upon installing or building it. * Add a separate function for assinging extention flags to variables for `-install`, `-remove` and `-export`. * Check for extensions flags through variables instead of checking the `$info_flags` string each if statement that validated a specific flag on `-install`, `-remove` and `-export`. * Address all [ShellCheck](https://www.shellcheck.net/wiki/) advisories across `blueprint.sh` and it's libraries. * Add new `developerIgnoreRebuild` flag that allows developers to skip rebuilding all panel assets when editing panel css upon running `-build`. * Speed up "Checking Dependencies" by dumping `npm ls` and just looking for the module in the `node_modules` folder. * Add new `-debug` command, which can be used to easily print all recent information and muted logs. * The `-help` command can now also be triggered by providing zero arguments to the `blueprint` CLI tool. * Internal placeholders `@version`, `&bp.version&` and `&bp.folder&` have been renamed to `::v` and `::f`. * Developers can now add components to the Pterodactyl navigation bar, account configuration pages and server management pages through [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) . * Add GitHub sponsors section and link to Blueprint's `README.md`. * Improve error detection across `blueprint.sh`, mostly for extension installation and removal. #### Bugfixes * Improve Docker installation check by properly checking for the `.dockerenv` file this time. * Development files were referred to as "extension files" in `-wipe`. * "Refresh your cache" overlay appeared to break from time to time. * `conf.yml` had a different order for "wrapper" and "css" values across "dashboard" and "admin". * `-info` would show log function names when some values were empty. * Running `bash blueprint.sh` after installing Blueprint would show a `[WARNING]` log which should be `[FATAL]` for consistency. * "Checking dependencies" was ran before asking administrators for confirmation when running `-remove`. * If extension script flags were present but the extension did not have given script, Blueprint would throw a weird error. * The debug file path defined in `lib/bash_colors.sh` was relative, which would cause an error if not ran in the Pterodactyl directory. * Extension file paths defined in `conf.yml` could escape the temporarily directory. * Onboarding admin notification was not being displayed and has now been removed. * Puzzle navbar button in the admin panel would normally flash upon first load with Blueprint, but didn't. * Extensions with the identifier `extensions` will no longer break dashboard CSS. #### Breaking Changes * Website URL changed from [`ptero.shop`](https://ptero.shop/) to [`blueprint.zip`](https://blueprint.zip/) which means some extensions might need to update the "Requires Blueprint" banner on their marketplace listings. * Incorrect paths for `conf.yml` options will now result in a fatal error, which may break some extensions. **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Unsupported beta-A428 ========= #### Changes * `blueprint.sh` now has a variable to change the webserver permission user which will persist over updates. * Having nothing as input in `-init` questions will now select the placeholder option. * New `adminOnly` scope for custom extension routes, which allows developers to limit pages to administrators. * Custom dashboard routes can now leave `name` empty to not have them show up inside of the SubNavigation element. * Developers can now use `SVG`, `GIF`, `WebP`, `PNG` and `JPEG` formats for their extension icons instead of having those formats ignored and forced onto a (possibly corrupted) `icon.jpg` file. * When building, installing or removing extensions Blueprint will now re-apply webserver permissions. * Add new extension APIs (`views`, `controllers` and `routers`) which can be enabled from [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) . These new extension APIs can be useful for expanding extension functionality even further. * Each installed extension now gets assigned a filesystem (`blueprint:`) automatically which can be used for file uploading, automatic handling of files, etc. * Extensions can now check if another extension is installed through a new API in [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) . * Add new hint to the Blueprint admin page that only shows once and promotes the [`BlueprintFramework/framework`](https://github.com/BlueprintFramework/framework) GitHub repository. * When using `-upgrade` to update from **this version** to a **later version**, Blueprint will automatically migrate development files over if extension development files are found. * Improve the codebase of multiple internal services, controllers and views. * Build files (used for installing/updating extensions) have been made more modular by making use of partials and sections, allowing editing them to be much easier. * New permissions setting on all installed extensions allowing you to block an extension from impacting certain sections on your panel. * `-upgrade` will no longer import/update Blueprint's `.git` and `.github` folders. * `robots.txt` has been changed to allow crawlers on `/extensions/blueprint/index.html`. * Admin and dashboard wrappers now get imported from a symlinked file dynamically instead of being injected through `blueprint.sh`. * Docker users are now forced onto the `/app` directory as Pterodactyl directory. * Change the entire way [placeholders](https://blueprint.zip/docs?page=documentation/placeholders) work and add some brand new placeholder features. * Hotfix Some elements (like NavigationBar and SubNavigation) now have static element IDs for easier styling. #### Bugfixes * Admin CSS from extensions and Blueprint were imported **before** other stylesheets, causing them to override extension CSS. * The green tag in the admin panel had a bright background color, causing it's text to be hard to read. * Path towards an extension's database migrations directory was not validated due to a mistyped variable. * `-debug` was throwing seemingly-random errors when receiving text input, which has now been fixed. * `-remove` had a leftover string when throwing a specific error, which has now been fixed. * Blueprint's admin page was making multiple of the same API calls per load, this has now been reduced to one API call. * Extension admin page was supposed to show an error when the version variable of Blueprint was `::v`, but did not. * `-upgrade` did not half after encountering an error with fetching remote Blueprint releases. * Blueprint did not exit after updating it's Pterodactyl installation folder variable. * Some issues with running Blueprint on Docker have been resolved. While it's still not officially supported, we try to make it work as well as possible. * Identifiers were able to consist of hyphens (`-`), underscores (`_`), periods (`.`) and spaces. Extensions that did use these characters in their identifiers ended up breaking some parts of the Pterodactyl panel in some way, shape or form. * Hotfix Extension views were not parsed correctly resulting in empty view pages. This has been fixed in a hotfix. * Hotfix Visiting extensions that had custom controllers in your admin panel caused a server error. This has been fixed in a hotfix as well. * Hotfix Making use of the new placeholders would result in a bunch of errors, this has been fixed. * Hotfix Add a timeout for requests towards the Blueprint API to prevent some pages from loading indefinitely. #### Breaking Changes * Blueprint's GitHub organization has been renamed from `teamblueprint` to `BlueprintFramework`. This should have minimal impact, but some things might break that are related to the GitHub API on older versions. * `BlueprintVariableService` has been removed. There are no known cases of extensions using this internal library, so it should have minimal effect. * HTML syntax in extension descriptions will now be escaped for consistency across extension admin pages. There are no known cases of extensions using HTML in their descriptions, so it should have minimal effect. * `-upgrade` no longer accepts the `dev` argument. Use the new `remote` argument instead. * The `ignoreAlphabetPlaceholders` flag has been removed. There have been no known cases of this flag being used, so this should have minimal effect. * [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) have changed (for the better) and need to be updated. Extensions with a `alpha` or `indev` target version will still get the placeholders applied like before until the new placeholders are widely adopted. You can force legacy placeholder behavior by using the `forceLegacyPlaceholders` [flag](https://blueprint.zip/docs?page=documentation/flags) . **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Pre-release beta-2025-05 ============ #### Changes * Improved asset rebuilding speeds through caching (2-4x faster). * Implement `-watch`, an experimental new tool that rebuilds extensions on every file change and sets up `yarn watch` where needed. * Add component path aliases for Blueprint. (`@blueprint`) * Add a few components to our new `@blueprint/ui` UI library. * Admin-only component routes will now be highlighted with an "ADMIN" badge in the navigation bar. * Component imports are now type-safe. Blueprint now exposes Pterodactyl's types to developers in a `.dist/types` directory. * Implement new `-dist` command to initialize/update the development `.dist` directory. * `-export` now always excludes the following files and directories from being included in the final extension package: `.git/`, `.dist/`, `.gitkeep`. #### Bugfixes * Developer mode flag value was sent twice in the same telemetry request. * `ISO-8859-6` system encoding caused issues with extensions utilizing [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) 's navigation routes and [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) 's artisan commands. * `-query` did not exit when using it on an unknown extension. #### Breaking Changes * Since `beta-2024-12`, Blueprint stores environment-related variables in a `.blueprintrc` file. This version officially deprecates storing said variables inside of the `blueprint.sh` file and will attempt automatic migration to a `.blueprintrc` file. * For a while now, Blueprint has imported both Bootstrap Icons and Boxicons, making the admin panel slower. Boxicons has now been removed. **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Unsupported alpha-3ZX ========= #### Changes * New installation timestamp placeholder: `^#timestamp#^` * New public directory placeholder: `^#publicpath#^` * Add website button icon for Patreon, Reddit, Trello, GitLab and more. * Uninstallation script has been added that allows extensions to remove extension files that Blueprint cannot keep track of. * New asset: `logoCoverTextBlue.jpg`. * Import [Bootstrap Icons](https://icons.getbootstrap.com/) to the admin page by default. * Developers now see a warning log when using templates on older, outdated versions of Blueprint. * Update related links in `README.md` and update extensions list in both `README.md` and `extensions.md`. * Developers can now add export scripts using the new `hasExportScript` flag, allowing for making modifications that do not impact your source code. * New throwError library for `blueprint.sh`, which will be used in the future for easier exception logging. * Improve code readability on multiple custom internal libraries that are utilized by `blueprint.sh`. * No longer use market variables for version names. * Add `POST` route for extensions which will trigger a `post()` function in the extension's admin controller. #### Bugfixes * Incorrect website button icon for Discord extension website links. * Database values were not being synced when running the install script for the first time after upgrading. * "Unknown file or directory" errors every time Blueprint logs something when the debug log file is missing. * Remove stray .gitkeep file in `.blueprint/extensions/`. **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Unsupported alpha-IPS ========= #### Changes * Templates are no longer stored locally, instead, they are fetched from an external repository that [you can find here](https://github.com/BlueprintFramework/framework) . This not only allows us to offer community-made templates, it also significantly reduces the size of Blueprint releases. * Switch out `README.md` placeholder files with `.gitkeep` files. * Change error for unknown `-init` template value in `blueprint.sh`. * When upgrading, `blueprint.sh` now no longer wipes the `tools/tmp` folder as it's expected to be empty. * Improve formatting in `README.md`, add a new "Related Links" and "Introduction" section and add line breaks between sections. * Custom installation scripts may now check if their extension is installed through a developer command with `$BLUEPRINT_DEVELOPER` and read the version of Blueprint with `$BLUEPRINT_VERSION`. * Add new `^#installmode#^` [placeholder](https://blueprint.zip/docs?page=documentation/placeholders) for detecting if your extension is built through developer commands. * Add new `^#blueprintversion#^` [placeholder](https://blueprint.zip/docs?page=documentation/placeholders) , which, as the name suggests, gets replaced with the host's Blueprint version. * Address multiple ShellCheck advisories for `blueprint.sh`. ([SC2129](https://www.shellcheck.net/wiki/SC2129) , [SC2162](https://www.shellcheck.net/wiki/SC2162) , [SC2236](https://www.shellcheck.net/wiki/SC2236) ) * `h`, `-h` and `--h` will now trigger the help menu as well. * Consider `awk`, `grep` and `git` dependencies and check for them in `blueprint.sh`. * Remove Ko-Fi from `.github/FUNDING.yml`. We no longer accept Ko-Fi donations, donate on Liberapay instead. * Update Node.JS installation instructions on `README.md` as the automatic installation script has been deprecated. ([#12](https://github.com/BlueprintFramework/framework/pull/12) ) * Add new "expose" option for extension exporting. This option will host your extension on a self-hosted URL for two minutes to make downloading the exported extension to your device easier. * Placeholder logs that are displayed when running `-install` are now grouped. * `blueprint.sh` now keeps track of developer mode through `lib-db` instead of using a separate file. * Add new `bp:sync` Artisan command to sync multiple database values with `blueprint.sh`. * Add new `bp:latest` Artisan command that prints the latest Blueprint version's name. * New `lib-grabenv` library for "grabbing" values from the environment variables file in the Pterodactyl folder. * Use environment variables for parsing Pterodactyl folder locations and the current Blueprint version to it's libraries. * Add new `-info` command that displays some information about your panel in a neofetch-like way. * Blueprint's admin page can now show if your installation uses an outdated version of the framework and has a new button next to the website button. * Make minor changes to the CSS of [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) 's admin notifications to make them fit in better with the admin panel. * Some extension folders (private, assets, public) have moved to new locations. * The website icon on extension admin pages now changes depending on what URL it's linked to. * Add new SVG and cutout versions of the Blueprint logo in `.blueprint/assets`. #### Bugfixes * Some colors were displayed incorrectly in `-help`. * When ending argument one of `-install` with ".blueprint" it would result in an unrelated error. I'm not sane enough to do text manipulation in bash for some of the installation variables, so now it throws a fatal error telling you what to do instead. * Extensions previously could not contain spaces in any filename without facing errors regarding placeholders, this is now fixed. * Running `-wipe` was possible without having developer mode enabled. * Extension website URLs without a protocol would be renamed to `http://` and would not include the website URL. * When upgrading Blueprint, developer mode and telemetry id would not be synced until you visited the Blueprint configuration admin page. * Extension buttons on the extensions page didn't have rounded corners on all sides. #### Breaking Changes * Node.JS version 17 is no longer supported by Blueprint and will result in a "Unsupported NodeJS version" error. * Blueprint now uses a partially-changed folder structure for extensions. Extensions that do not use placeholders to find their data directory will break. **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Unsupported beta-F248 ========= #### Changes * Add `TelemetryService`'s api endpoint to `PlaceholderService` so it can easily be changed everywhere at once. * Add new developer [flag](https://blueprint.zip/docs?page=documentation/flags) called `developerKeepApplicationCache` that skips flushing application cache when installed with `-build`. * Don't replace `RouteServiceProvider` for Blueprint's Laravel routes. ([#33](https://github.com/BlueprintFramework/framework/pull/33) ) * Blueprint's admin page no longer collects telemetry as it's not a useful data point anymore. * [`BlueprintExtensionLibrary`](https://blueprint.zip/docs?page=documentation/$blueprint) now has it's functions documented inside of the codebase, enabling easier development with IDEs. (Suggested by [@itsvic-dev](https://github.com/itsvic-dev/) ) * Add a brand new `dbForget()` function to [`BlueprintExtensionLibrary`](https://blueprint.zip/docs?page=documentation/$blueprint) that allows for deleting/forgetting database records. * Add additional placement options for the server's "Terminal" page to [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) . ([#34](https://github.com/BlueprintFramework/framework/pull/34) ) * Extension buttons have been redesigned once again and should now look more recognizable for each extension. * We've added new marketing material and updated Blueprint's default logo. This includes new versions of Blueprint's icon and full-res images of our stickers. * Add a choice for putting the application in maintenance mode when installing/upgrading Blueprint. * No longer use folder placeholders for navigating to the Pterodactyl directory. ([#40](https://github.com/BlueprintFramework/framework/pull/40) ) * The extensions page now shows a " `System`" badge on system extensions (such as Blueprint). * Add a new **Console** extension API which allows for creating new Artisan commands and automatically running them with intervals. #### Bugfixes * Input validation wasn't done correctly on Blueprint's own admin settings page, this should now be validated better. * Custom Laravel routes for extensions were not unlinked correctly when using `-remove` to remove an extension. * `logFormat.sh` used `tput` for coloring logs, which was not checked as a dependency by `blueprint.sh`. * Fix bad exit code in `blueprint.sh`. ([#32](https://github.com/BlueprintFramework/framework/pull/32) ) * `ServerRouter.tsx` still had a leftover debug line, this has now been fixed. (Reported by [@ArnaudLier](https://github.com/ArnaudLier) ) * Extension information values could not contain the `&` character. Doing so would break some pages. (Reported by [@0x7d8](https://github.com/0x7d8) ) * Extension-provided scripts were sometimes ran with root permissions, which was not intentional. * Fixed a typo in Blueprtint's installation log. ([#38](https://github.com/BlueprintFramework/framework/pull/38) ) * `SettingsContainer.tsx` was extended by the backups component, which was not intentional. (Reported by [@itsvic-dev](https://github.com/itsvic-dev/) ) * Ending extension identifiers with `.blueprint` in `-install` no longer results in a error. ([#41](https://github.com/BlueprintFramework/framework/pull/41) ) #### Breaking Changes * Install, remove and export scripts may no longer be able to use colored logs. * Export scripts need an additional flag ([`developerEscalateExportScript`](https://blueprint.zip/docs?page=documentation/flags) ) to run with root-level perms, which might be needed in some cases. * You can no longer change Blueprint's `$FOLDER` variable by parsing `$_FOLDER` upon first run of the script. **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Unsupported alpha-2N2 ========= #### Changes * Update assets: `defaultExtensionLogo1`, `defaultExtensionLogo2`, `defaultExtensionLogo3`, `defaultExtensionLogo4`, `defaultExtensionLogo5`, `defaultExtensionLogo6`. * Add new assets: `installWithBlueprintBanner`, `defaultExtensionLogo7`, `defaultExtensionLogo8`, `defaultExtensionLogo9`. * Add templates for creating development extensions. Extension developers can now start directly from a template or use a barebones one. * Add new `-wipe` command for developers. This allows developers to remove their development files. * Add shorter versions of developer commands that you can use alongside normal developer commands. * Link Laravel filesystems when installing/upgrading Blueprint. * Make the extension management page's buttons both nicer and responsive. * The Blueprint admin page is now responsive, this means better usability of mobile users. * Improve readability in `blueprint.sh` and add comments detailing what some code does. * Add some additional instructions for installing extensions in the `README.md` file to prevent confusion. #### Bugfixes * Stacking rejected `-init` answers were supposed to be fixed in `alpha-F0V`, but was fixed incorrectly. * Including file extensions when running `-install` no longer runs into a "not found" error. * Extensions with no extension icon could not be installed even though icons were already optional. * Route removal was not working as expected when removing extensions. **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Unsupported alpha-XT1 ========= #### Changes * Rename section "Contributions" to "Contributors" in `README.md` #### Bugfixes * Upgrading extensions that have a public (exposed) folder would result in **wiping all public extension folders**, including the internal one. **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) --- # Documentation - Blueprint **Mind filling out a quick survey about Blueprint?** [Sure!](https://bpfw.io/survey) ##### Navigation * [**Home** Learn more about Blueprint, what is is, and why it was made](https://blueprint.zip/) * [**Browse** Explore and search extensions made by the community](https://blueprint.zip/browse) * [**Documentation** Guides and docs about interacting with Blueprint](https://blueprint.zip/) [](javascript:void) [](javascript:void) [](javascript:void) . Getting started [Installation](https://blueprint.zip/docs?page=getting-started/Installation) [Managing extensions](https://blueprint.zip/docs?page=getting-started/Managing-extensions) [Extension development](https://blueprint.zip/docs?page=getting-started/Extension-development) [Frequently Asked Questions](https://blueprint.zip/docs?page=getting-started/Frequently-asked-questions) Developing extensions [Admin views](https://blueprint.zip/docs?page=developing-extensions/Admin-views) [Custom controllers](https://blueprint.zip/docs?page=developing-extensions/Custom-controllers) [Admin configuration](https://blueprint.zip/docs?page=developing-extensions/Admin-configuration) [Custom table and migrations](https://blueprint.zip/docs?page=developing-extensions/Custom-table-and-migrations) [Dashboard wrappers](https://blueprint.zip/docs?page=developing-extensions/Dashboard-wrappers) [React components](https://blueprint.zip/docs?page=developing-extensions/React-components) [Custom web routes](https://blueprint.zip/docs?page=developing-extensions/Custom-web-routes) [Packaging extensions](https://blueprint.zip/docs?page=developing-extensions/Packaging-extensions) Documentation [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) [Components.yml](https://blueprint.zip/docs?page=documentation/componentsyml) [Console.yml](https://blueprint.zip/docs?page=documentation/consoleyml) [Placeholders](https://blueprint.zip/docs?page=documentation/placeholders) [Flags](https://blueprint.zip/docs?page=documentation/flags) [Scripts](https://blueprint.zip/docs?page=documentation/scripts) About [License](https://blueprint.zip/docs?page=about/License) [Changelog](https://blueprint.zip/docs?page=about/Changelog) [Branding](https://blueprint.zip/docs?page=about/Branding) Unsupported alpha-F0V ========= #### Changes * Add multiple comments to `blueprint.sh` to make understanding what happens easier for contributors. * Blueprint now stops installing extensions that have folder paths defined that end with a slash as that would lead to unexpected errors. * Move all Blueprint libraries into a new "BlueprintFramework" folder in the app directory. * Improve notification API by relying on the database instead of local files. * Errors related to dependencies are now grouped nicely into one error instead of one error per dependency. * Add new telemetry messages. #### Bugfixes * Some characters were detected as "yes" when running `-upgrade`. * ~When providing wrong answers in -init, your new answers would be behind your rejected answers in your conf.yml file. Instead of the final variable being "goodanswer" it would be "rejectedanswergoodanswer" when having any rejected values.~ * Admin layout (also referred to as admin wrapper in [conf.yml](https://blueprint.zip/docs?page=documentation/confyml) ) only had access to [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) if the admin page had [$blueprint](https://blueprint.zip/docs?page=documentation/$blueprint) imported, this is now fixed. * Some users were required to refresh the Pterodactyl route cache every time Blueprint modified it to apply router changes, this is now done automatically. * We experienced a vague [BlueprintExtensionLibrary](https://blueprint.zip/docs?page=documentation/$blueprint) error on the authentication page on the client panel, importing the library directly in the view should have fixed this. #### Breaking Changes * BlueprintExtensionLibrary has changed location, name and namespace. Older extensions that do not update and change to this namespace will stay working for the next few updates but will not receive updates that come to the extension library. **Become part of Blueprint's Discord community** and be one of the first to get notified about new extension releases and framework updates. [Join the community](https://discord.com/servers/blueprint-1063548024825057451) [Close](javascript:void) ---