Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
92eb2c1
feat: update tsconfig
prplwtf Jan 11, 2026
773df0e
Merge pull request #198 from BlueprintFramework/main
prplwtf Jan 11, 2026
2a1ef17
feat: update packages
prplwtf Jan 11, 2026
7c8c4ef
feat: update Kernel.php
prplwtf Jan 13, 2026
79cd5fd
feat: update http Kernel.php
prplwtf Jan 13, 2026
3c16f6d
feat: update AppServiceProvider
prplwtf Jan 13, 2026
8c14b4c
feat: update admin layout
prplwtf Jan 13, 2026
cc0919a
feat: update admin wrapper
prplwtf Jan 13, 2026
1960320
feat: update index.tsx
prplwtf Jan 13, 2026
6ed9da7
feat: get rid of globalstylesheet
prplwtf Jan 13, 2026
5a4a7db
feat: update getServer.ts and NavigationBar.tsx
prplwtf Jan 13, 2026
b5d21ad
feat: update even more files
prplwtf Jan 13, 2026
cece8c7
feat: delete tailwind config
prplwtf Jan 13, 2026
b023fb4
feat: best effort at updating webpack config
prplwtf Jan 13, 2026
a249f5d
feat: require nodejs v22
prplwtf Jan 13, 2026
8a92220
fix: the webpack config is a little silly
prplwtf Jan 13, 2026
fca7362
feat: restore hash thingy in webpack config in the hope of fixing things
prplwtf Jan 13, 2026
cf76e00
feat: more pointless stuff
prplwtf Jan 13, 2026
6dea4dc
feat: make css-loader classes a little less shitty to work with
prplwtf Jan 13, 2026
3645903
fix: blueprint died in the admin area
prplwtf Jan 13, 2026
5361f23
feat: downgrade styled components specifically
prplwtf Jan 14, 2026
f8f9b06
feat: push broken code
prplwtf Jan 14, 2026
bd4aab2
fix: theme compatibility???
prplwtf Jan 14, 2026
987cd32
Merge branch 'main' into pterodactyl-v1.12
prplwtf Jan 15, 2026
59a9fea
feat: rolling release disclosure
prplwtf Jan 15, 2026
c6b6b01
feat: what is a switch case..
prplwtf Jan 15, 2026
9c5ba13
fix: oh my god
prplwtf Jan 15, 2026
9bd1726
feat: lower nodejs requirement to 20
prplwtf Jan 15, 2026
9c4b95d
fix: require nodejs >20 for blueprint.sh
prplwtf Jan 15, 2026
84be750
fix: add fallback for path
prplwtf Jan 15, 2026
0be06cc
feat: add introduction dialog
prplwtf Jan 15, 2026
63ec12f
feat: update yarn.lock
prplwtf Jan 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions app/Console/Kernel.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@
use Pterodactyl\Console\Commands\Maintenance\PruneOrphanedBackupsCommand;
use Pterodactyl\Console\Commands\Maintenance\CleanServiceBackupFilesCommand;

use Pterodactyl\BlueprintFramework\GetExtensionSchedules;
// Import Blueprint schedules, telemetry and library
use Pterodactyl\Services\Telemetry\RegisterBlueprintTelemetry;
use Pterodactyl\BlueprintFramework\GetExtensionSchedules;
use Pterodactyl\BlueprintFramework\Libraries\ExtensionLibrary\Console\BlueprintConsoleLibrary as BlueprintExtensionLibrary;

class Kernel extends ConsoleKernel
Expand Down Expand Up @@ -60,9 +61,10 @@ protected function schedule(Schedule $schedule): void
$registerBlueprintTelemetry->register($schedule);
}

// Blueprint-related utilities.
// Blueprint-related utilities
$schedule->command('bp:version:cache')->dailyAt(str_pad(rand(0, 23), 2, '0', STR_PAD_LEFT) . ':' . str_pad(rand(0, 59), 2, '0', STR_PAD_LEFT));

// Blueprint extension schedules
GetExtensionSchedules::schedules($schedule);
}

Expand Down
4 changes: 4 additions & 0 deletions app/Http/Kernel.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ class Kernel extends HttpKernel
ConvertEmptyStringsToNull::class,
];

protected $middlewarePriority = [
SubstituteClientBindings::class,
];

/**
* The application's route middleware groups.
*/
Expand Down
1 change: 1 addition & 0 deletions app/Providers/AppServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
use Pterodactyl\Extensions\Themes\Theme;
use Illuminate\Database\Eloquent\Relations\Relation;

// Blueprint-related shenanigans imports
use Pterodactyl\Providers\Blueprint\ExtensionfsConfigProvider;
use Pterodactyl\Providers\Blueprint\RouteServiceProvider;

Expand Down
6 changes: 3 additions & 3 deletions blueprint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ source scripts/libraries/misc.sh || missinglibs+="[misc]"

cdhalt() { PRINT FATAL "Attempted navigation into nonexistent directory, halting process."; exit 1; }
depend() {
# Make sure Node.js is version 17 or higher.
# Make sure Node.js is version 20 or higher.
nodeMajor=$(node -v | awk -F. '{print $1}' | sed 's/[^0-9]*//g')

# Check for required (both internal and external) dependencies.
Expand Down Expand Up @@ -131,8 +131,8 @@ depend() {
if [[ $DEPEND_MISSING == true ]]; then
PRINT FATAL "Some framework dependencies couldn't be found or have issues. This is usually NOT a bug, do not report it as such."

if [[ $nodeMajor -lt 17 ]]; then
PRINT FATAL "Unsupported dependency \"node\" <17.x. (Requires >17.x)"
if [[ $nodeMajor -lt 20 ]]; then
PRINT FATAL "Unsupported dependency \"node\" <20.x. (Requires >20.x)"
fi

if ! [ -x "$(command -v unzip)" ]; then PRINT FATAL "Missing dependency \"unzip\"."; fi
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions database/Seeders/BlueprintSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ class BlueprintSeeder extends Seeder
],
'flags' => [
'disable_attribution' => [
'default' => false,
'type' => 'boolean',
'hidden' => true,
],
'introduction_dismissed' => [
'default' => false,
'type' => 'boolean',
'hidden' => false,
Expand Down
306 changes: 153 additions & 153 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,157 +1,157 @@
{
"name": "pterodactyl-panel",
"engines": {
"node": ">=17"
},
"dependencies": {
"@floating-ui/react-dom-interactions": "^0.6.6",
"@fortawesome/fontawesome-svg-core": "^1.2.32",
"@fortawesome/free-solid-svg-icons": "^5.15.1",
"@fortawesome/react-fontawesome": "^0.1.11",
"@headlessui/react": "^1.6.4",
"@heroicons/react": "^1.0.6",
"@hot-loader/react-dom": "^16.14.0",
"@preact/signals-react": "^1.2.1",
"@tailwindcss/forms": "^0.5.2",
"@tailwindcss/line-clamp": "^0.4.0",
"axios": "^0.27.2",
"boring-avatars": "^1.7.0",
"chart.js": "^3.8.0",
"classnames": "^2.3.1",
"codemirror": "^5.57.0",
"copy-to-clipboard": "^3.3.1",
"date-fns": "^2.28.0",
"debounce": "^1.2.0",
"deepmerge-ts": "^4.2.1",
"easy-peasy": "^4.0.1",
"events": "^3.0.0",
"formik": "^2.2.6",
"framer-motion": "^6.3.10",
"i18next": "^21.8.9",
"i18next-http-backend": "^1.4.1",
"i18next-multiload-backend-adapter": "^1.0.0",
"qrcode.react": "^1.0.1",
"react": "^16.14.0",
"react-chartjs-2": "^4.2.0",
"react-dom": "npm:@hot-loader/react-dom",
"react-fast-compare": "^3.2.0",
"react-hot-loader": "^4.12.21",
"react-i18next": "^11.2.1",
"react-router-dom": "^5.1.2",
"react-transition-group": "^4.4.1",
"reaptcha": "^1.7.2",
"sockette": "^2.0.6",
"styled-components": "^5.2.1",
"styled-components-breakpoint": "^3.0.0-preview.20",
"swr": "^0.2.3",
"tailwindcss": "^3.0.24",
"use-fit-text": "^2.4.0",
"uuid": "^8.3.2",
"xterm": "^4.19.0",
"xterm-addon-fit": "^0.5.0",
"xterm-addon-search": "^0.9.0",
"xterm-addon-search-bar": "^0.2.0",
"xterm-addon-web-links": "^0.6.0",
"yup": "^0.29.1"
},
"devDependencies": {
"@babel/core": "^7.12.1",
"@babel/plugin-proposal-class-properties": "^7.12.1",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
"@babel/plugin-proposal-object-rest-spread": "^7.12.1",
"@babel/plugin-proposal-optional-chaining": "^7.12.1",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-transform-modules-commonjs": "^7.18.2",
"@babel/plugin-transform-react-jsx": "^7.12.1",
"@babel/plugin-transform-runtime": "^7.12.1",
"@babel/preset-env": "^7.12.1",
"@babel/preset-react": "^7.12.1",
"@babel/preset-typescript": "^7.12.1",
"@babel/runtime": "^7.12.1",
"@testing-library/dom": "^8.14.0",
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "12.1.5",
"@testing-library/user-event": "^14.2.1",
"@types/codemirror": "^0.0.98",
"@types/debounce": "^1.2.0",
"@types/events": "^3.0.0",
"@types/jest": "^28.1.3",
"@types/node": "^14.11.10",
"@types/qrcode.react": "^1.0.1",
"@types/react": "^16.14.0",
"@types/react-copy-to-clipboard": "^4.3.0",
"@types/react-dom": "^16.9.16",
"@types/react-redux": "^7.1.1",
"@types/react-router": "^5.1.3",
"@types/react-router-dom": "^5.1.3",
"@types/react-transition-group": "^4.4.0",
"@types/styled-components": "^5.1.7",
"@types/uuid": "^3.4.5",
"@types/webpack-env": "^1.15.2",
"@types/yup": "^0.29.3",
"@typescript-eslint/eslint-plugin": "^5.29.0",
"@typescript-eslint/parser": "^5.29.0",
"autoprefixer": "^10.4.7",
"babel-jest": "^28.1.1",
"babel-loader": "^8.2.5",
"babel-plugin-styled-components": "^2.0.7",
"cross-env": "^7.0.2",
"css-loader": "^5.2.7",
"eslint": "^8.18.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-jest-dom": "^4.0.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-react": "^7.30.1",
"eslint-plugin-react-hooks": "^4.6.0",
"fork-ts-checker-webpack-plugin": "^6.2.10",
"identity-obj-proxy": "^3.0.0",
"jest": "^28.1.1",
"postcss": "^8.4.14",
"postcss-import": "^14.1.0",
"postcss-loader": "^4.0.0",
"postcss-nesting": "^10.1.8",
"postcss-preset-env": "^7.7.1",
"prettier": "^2.7.1",
"redux-devtools-extension": "^2.13.8",
"source-map-loader": "^1.1.3",
"style-loader": "^2.0.0",
"svg-url-loader": "^7.1.1",
"terser-webpack-plugin": "^4.2.3",
"ts-essentials": "^9.1.2",
"ts-jest": "^28.0.5",
"twin.macro": "^2.8.2",
"typescript": "^4.7.3",
"webpack": "^4.43.0",
"webpack-assets-manifest": "^3.1.1",
"webpack-bundle-analyzer": "^3.8.0",
"webpack-cli": "^3.3.12",
"webpack-dev-server": "^3.11.0",
"yarn-deduplicate": "^1.1.1"
},
"scripts": {
"clean": "cd public/assets && find . \\( -name \"*.js\" -o -name \"*.map\" \\) -type f -delete && rm -rf node_modules/.cache",
"test": "jest",
"lint": "eslint ./resources/scripts/**/*.{ts,tsx} --ext .ts,.tsx",
"watch": "cross-env NODE_ENV=development ./node_modules/.bin/webpack --watch --progress",
"build": "cross-env NODE_ENV=development ./node_modules/.bin/webpack --progress",
"build:production": "yarn run clean && cross-env NODE_ENV=production ./node_modules/.bin/webpack --mode production",
"serve": "yarn run clean && cross-env WEBPACK_PUBLIC_PATH=/webpack@hmr/ NODE_ENV=development webpack-dev-server --host 0.0.0.0 --port 8080 --public https://pterodactyl.test --hot"
},
"browserslist": [
"> 0.5%",
"last 2 versions",
"firefox esr",
"not dead"
],
"babelMacros": {
"twin": {
"preset": "styled-components"
"name": "pterodactyl-panel",
"engines": {
"node": ">=20"
},
"styledComponents": {
"pure": true,
"displayName": true,
"fileName": true
"dependencies": {
"@floating-ui/react-dom-interactions": "^0.6.6",
"@fortawesome/fontawesome-svg-core": "^1.2.32",
"@fortawesome/free-solid-svg-icons": "^5.15.1",
"@fortawesome/react-fontawesome": "^0.1.11",
"@headlessui/react": "^1.6.4",
"@heroicons/react": "^1.0.6",
"@hot-loader/react-dom": "^16.14.0",
"@preact/signals-react": "^1.2.1",
"@tailwindcss/forms": "^0.5.2",
"@tailwindcss/line-clamp": "^0.4.0",
"axios": "^1.13.2",
"boring-avatars": "^1.7.0",
"chart.js": "^3.8.0",
"classnames": "^2.3.1",
"codemirror": "^5.57.0",
"copy-to-clipboard": "^3.3.1",
"date-fns": "^2.28.0",
"debounce": "^1.2.0",
"deepmerge-ts": "^4.2.1",
"easy-peasy": "^4.0.1",
"events": "^3.0.0",
"formik": "^2.2.6",
"framer-motion": "^6.3.10",
"i18next": "^21.8.9",
"i18next-http-backend": "^1.4.1",
"i18next-multiload-backend-adapter": "^1.0.0",
"pathe": "^2.0.3",
"qrcode.react": "^1.0.1",
"react": "^16.14.0",
"react-chartjs-2": "^4.2.0",
"react-dom": "npm:@hot-loader/react-dom",
"react-fast-compare": "^3.2.0",
"react-hot-loader": "^4.12.21",
"react-i18next": "^11.2.1",
"react-router-dom": "^5.1.2",
"react-transition-group": "^4.4.1",
"reaptcha": "^1.7.2",
"sockette": "^2.0.6",
"styled-components": "5.2.1",
"styled-components-breakpoint": "^3.0.0-preview.20",
"swr": "^0.2.3",
"tailwindcss": "3.0.24",
"use-fit-text": "^2.4.0",
"uuid": "^13.0.0",
"xterm": "^4.19.0",
"xterm-addon-fit": "^0.5.0",
"xterm-addon-search": "^0.9.0",
"xterm-addon-search-bar": "^0.2.0",
"xterm-addon-web-links": "^0.6.0",
"yup": "^0.29.1"
},
"devDependencies": {
"@babel/core": "^7.12.1",
"@babel/plugin-proposal-class-properties": "^7.12.1",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
"@babel/plugin-proposal-object-rest-spread": "^7.12.1",
"@babel/plugin-proposal-optional-chaining": "^7.12.1",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-transform-modules-commonjs": "^7.18.2",
"@babel/plugin-transform-react-jsx": "^7.12.1",
"@babel/plugin-transform-runtime": "^7.12.1",
"@babel/preset-env": "^7.12.1",
"@babel/preset-react": "^7.12.1",
"@babel/preset-typescript": "^7.12.1",
"@babel/runtime": "^7.12.1",
"@fontsource-variable/ibm-plex-sans": "^5.2.8",
"@testing-library/dom": "^8.14.0",
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "12.1.5",
"@testing-library/user-event": "^14.2.1",
"@types/codemirror": "^0.0.98",
"@types/debounce": "^1.2.0",
"@types/events": "^3.0.0",
"@types/jest": "^28.1.3",
"@types/node": "^22.0.0",
"@types/path-browserify": "^1.0.3",
"@types/qrcode.react": "^1.0.1",
"@types/react": "^16.14.0",
"@types/react-copy-to-clipboard": "^4.3.0",
"@types/react-dom": "^16.9.16",
"@types/react-redux": "^7.1.1",
"@types/react-router": "^5.1.3",
"@types/react-router-dom": "^5.1.3",
"@types/react-transition-group": "^4.4.0",
"@types/styled-components": "5.1.7",
"@types/uuid": "^3.4.5",
"@types/webpack-env": "^1.18.8",
"@types/yup": "^0.29.3",
"@typescript-eslint/eslint-plugin": "^5",
"@typescript-eslint/parser": "^5",
"autoprefixer": "^10.4.7",
"babel-jest": "^28.1.1",
"babel-loader": "8.2.5",
"babel-plugin-styled-components": "^2.0.7",
"cross-env": "^7.0.2",
"css-loader": "5.2.7",
"eslint": "^8",
"eslint-config-prettier": "^8",
"eslint-plugin-jest-dom": "^4.0.2",
"eslint-plugin-prettier": "^4",
"eslint-plugin-react": "^7",
"eslint-plugin-react-hooks": "^4",
"identity-obj-proxy": "^3.0.0",
"jest": "^28.1.1",
"postcss": "8.4.14",
"postcss-import": "14.1.0",
"postcss-loader": "5.3.0",
"postcss-nesting": "10.1.8",
"postcss-preset-env": "7.7.1",
"prettier": "^2.7.1",
"redux-devtools-extension": "^2.13.8",
"source-map-loader": "1.1.3",
"style-loader": "2.0.0",
"svg-url-loader": "^8.0.0",
"terser-webpack-plugin": "^5.3.14",
"ts-essentials": "^9.1.2",
"ts-jest": "^28.0.5",
"twin.macro": "^2.8.2",
"typescript": "~5.1.0",
"webpack": "^5.103.0",
"webpack-assets-manifest": "^6.4.0",
"webpack-cli": "^6.0.1",
"webpack-dev-server": "^5.2.2"
},
"scripts": {
"clean": "cd public/assets && find . \\( -name \"*.js\" -o -name \"*.map\" \\) -type f -delete",
"test": "jest",
"tsc": "tsc --noEmit",
"lint": "eslint ./resources/scripts/**/*.{ts,tsx} --ext .ts,.tsx",
"watch": "cross-env NODE_ENV=development ./node_modules/.bin/webpack --watch --progress",
"build": "cross-env NODE_ENV=development ./node_modules/.bin/webpack --progress",
"build:production": "yarn run clean && cross-env NODE_ENV=production ./node_modules/.bin/webpack --mode production",
"serve": "yarn run clean && cross-env NODE_ENV=development USE_LOCAL_CERTS=true WEBPACK_PUBLIC_PATH=https://pterodactyl.test:5173/ webpack serve --progress --hot --server-type https"
},
"browserslist": [
"> 0.5%",
"last 2 versions",
"firefox esr",
"not dead"
],
"babelMacros": {
"twin": {
"preset": "styled-components"
},
"styledComponents": {
"pure": true,
"displayName": true,
"fileName": true
}
}
}
}
Loading