diff --git a/.env.example b/.env.example
index 7d6bd0e3..dec95469 100644
--- a/.env.example
+++ b/.env.example
@@ -1,3 +1,7 @@
+# Enable debug mode
+# Useful for debugging
+MSZ_DEBUG=1
+
 # Database connection setting
 # This uses the Index library's DSN syntax
 # Currently Misuzu only supports MariaDB, or Null of course since that does nothing
diff --git a/build.js b/build.js
index a711b94c..06885966 100644
--- a/build.js
+++ b/build.js
@@ -3,21 +3,13 @@ const { join: pathJoin } = require('path');
 const fs = require('fs');
 
 (async () => {
-    const isDebug = fs.existsSync(pathJoin(__dirname, '.debug'));
-
     const env = {
         root: __dirname,
         source: pathJoin(__dirname, 'assets'),
         public: pathJoin(__dirname, 'public'),
-        debug: isDebug,
-        swc: {
-            es: 'es2021',
-            jsx: '$element',
-            jsxf: '$fragment',
-        },
-        housekeep: [
-            pathJoin(__dirname, 'public', 'assets'),
-        ],
+        debug: !!process.env.MSZ_DEBUG,
+        swc: { es: 'es2021' },
+        housekeep: [ pathJoin(__dirname, 'public', 'assets') ],
     };
 
     const tasks = {
@@ -51,5 +43,8 @@ const fs = require('fs');
 
     const files = await assproc.process(env, tasks);
 
-    fs.writeFileSync(pathJoin(__dirname, 'assets/current.json'), JSON.stringify(files));
+    fs.writeFileSync(
+        pathJoin(__dirname, 'assets/current.json'),
+        JSON.stringify(files),
+    );
 })();
diff --git a/composer.lock b/composer.lock
index 2385af28..15fe455a 100644
--- a/composer.lock
+++ b/composer.lock
@@ -501,11 +501,11 @@
         },
         {
             "name": "flashwave/index",
-            "version": "v0.2504.31541",
+            "version": "v0.2504.51944",
             "source": {
                 "type": "git",
                 "url": "https://patchii.net/flash/index.git",
-                "reference": "c2bcb0611bee08a9a21930b92c96cc85304562b6"
+                "reference": "5c3d4c90724ed45df09c8665571a84eb44c9288c"
             },
             "require": {
                 "ext-mbstring": "*",
@@ -554,7 +554,7 @@
             ],
             "description": "Composer package for the common library for my projects.",
             "homepage": "https://railgun.sh/index",
-            "time": "2025-04-03T15:42:01+00:00"
+            "time": "2025-04-05T19:44:44+00:00"
         },
         {
             "name": "graham-campbell/result-type",
diff --git a/misuzu.php b/misuzu.php
index afece484..9fdb951a 100644
--- a/misuzu.php
+++ b/misuzu.php
@@ -14,8 +14,9 @@ $msz = (function() {
     try {
         \Dotenv\Dotenv::createImmutable(Misuzu::PATH_ROOT)->load();
 
-        if(!empty($_ENV['SENTRY_DSN']))
-            \Sentry\init(['dsn' => $_ENV['SENTRY_DSN']]);
+        $sentry = Misuzu::env('SENTRY_DSN');
+        if(!empty($sentry))
+            \Sentry\init(['dsn' => $sentry]);
 
         $whoops = new \Whoops\Run;
         if(Misuzu::cli())
@@ -29,11 +30,11 @@ $msz = (function() {
 
         return new MisuzuContext(
             $timings,
-            $_ENV['DATABASE_DSN'] ?? 'null:',
-            $_ENV['DOMAIN_ROLES'] ?? 'localhost=main,redirect,storage',
-            $_ENV['STORAGE_PATH_LOCAL'] ?? Misuzu::PATH_STORAGE,
-            $_ENV['STORAGE_PATH_REMOTE'] ?? '/_storage',
-            $_ENV['TEMPLATE_CACHE'] ?? '',
+            Misuzu::env('DATABASE_DSN', 'null:'),
+            Misuzu::env('DOMAIN_ROLES', 'localhost=main,redirect,storage'),
+            Misuzu::env('STORAGE_PATH_LOCAL', Misuzu::PATH_STORAGE),
+            Misuzu::env('STORAGE_PATH_REMOTE', '/_storage'),
+            Misuzu::env('TEMPLATE_CACHE', ''),
         );
     } finally {
         $timings->lap('startup');
diff --git a/package-lock.json b/package-lock.json
index 9b03128f..f6bff5e2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5,7 +5,7 @@
   "packages": {
     "": {
       "dependencies": {
-        "@railcomm/assproc": "^1.1.0"
+        "@railcomm/assproc": "^1.2.1"
       }
     },
     "node_modules/@jridgewell/gen-mapping": {
@@ -67,22 +67,22 @@
       }
     },
     "node_modules/@railcomm/assproc": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@railcomm/assproc/-/assproc-1.1.0.tgz",
-      "integrity": "sha512-i5dcFv4XtUsJTAT7PB/rqzN3sPnMYOOFvyRyTt6xlfM/+AFhYXHxbhtcq80UsIBpuWDADXctjZ1Qk9x3AYI96A==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@railcomm/assproc/-/assproc-1.2.1.tgz",
+      "integrity": "sha512-eUYOsgfnOqY5O5J9qmkgjS07CMFodM7s/h5EFZUWuZZkH2voqtaJG0DYVi0ThsNiPBDnthGfMuX9pSB84uqP/w==",
       "license": "BSD-3-Clause",
       "dependencies": {
-        "@swc/core": "^1.10.17",
-        "autoprefixer": "^10.4.20",
+        "@swc/core": "^1.11.20",
+        "autoprefixer": "^10.4.21",
         "cssnano": "^7.0.6",
         "html-minifier-terser": "^7.2.0",
-        "postcss": "^8.5.2"
+        "postcss": "^8.5.3"
       }
     },
     "node_modules/@swc/core": {
-      "version": "1.11.16",
-      "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.11.16.tgz",
-      "integrity": "sha512-wgjrJqVUss8Lxqilg0vkiE0tkEKU3mZkoybQM1Ehy+PKWwwB6lFAwKi20cAEFlSSWo8jFR8hRo19ZELAoLDowg==",
+      "version": "1.11.20",
+      "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.11.20.tgz",
+      "integrity": "sha512-2F0+bQs7+pwbudsxRffLdfpGCQX4Ih5k88f7LqTfj2oC7aTrv7FssduOvcAvfVY/InZmyYEblKl1rqg8bvzrZQ==",
       "hasInstallScript": true,
       "license": "Apache-2.0",
       "dependencies": {
@@ -97,19 +97,19 @@
         "url": "https://opencollective.com/swc"
       },
       "optionalDependencies": {
-        "@swc/core-darwin-arm64": "1.11.16",
-        "@swc/core-darwin-x64": "1.11.16",
-        "@swc/core-linux-arm-gnueabihf": "1.11.16",
-        "@swc/core-linux-arm64-gnu": "1.11.16",
-        "@swc/core-linux-arm64-musl": "1.11.16",
-        "@swc/core-linux-x64-gnu": "1.11.16",
-        "@swc/core-linux-x64-musl": "1.11.16",
-        "@swc/core-win32-arm64-msvc": "1.11.16",
-        "@swc/core-win32-ia32-msvc": "1.11.16",
-        "@swc/core-win32-x64-msvc": "1.11.16"
+        "@swc/core-darwin-arm64": "1.11.20",
+        "@swc/core-darwin-x64": "1.11.20",
+        "@swc/core-linux-arm-gnueabihf": "1.11.20",
+        "@swc/core-linux-arm64-gnu": "1.11.20",
+        "@swc/core-linux-arm64-musl": "1.11.20",
+        "@swc/core-linux-x64-gnu": "1.11.20",
+        "@swc/core-linux-x64-musl": "1.11.20",
+        "@swc/core-win32-arm64-msvc": "1.11.20",
+        "@swc/core-win32-ia32-msvc": "1.11.20",
+        "@swc/core-win32-x64-msvc": "1.11.20"
       },
       "peerDependencies": {
-        "@swc/helpers": "*"
+        "@swc/helpers": ">=0.5.17"
       },
       "peerDependenciesMeta": {
         "@swc/helpers": {
@@ -118,9 +118,9 @@
       }
     },
     "node_modules/@swc/core-darwin-arm64": {
-      "version": "1.11.16",
-      "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.11.16.tgz",
-      "integrity": "sha512-l6uWMU+MUdfLHCl3dJgtVEdsUHPskoA4BSu0L1hh9SGBwPZ8xeOz8iLIqZM27lTuXxL4KsYH6GQR/OdQ/vhLtg==",
+      "version": "1.11.20",
+      "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.11.20.tgz",
+      "integrity": "sha512-Sc06h6pwMhQagU7vz92b7wwQTIibTiqRE4y/XjkvurSbjSarrtSZR4OKkrdNwUkSy1HlQE4NhKQf7tmLeQ7PhQ==",
       "cpu": [
         "arm64"
       ],
@@ -134,9 +134,9 @@
       }
     },
     "node_modules/@swc/core-darwin-x64": {
-      "version": "1.11.16",
-      "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.11.16.tgz",
-      "integrity": "sha512-TH0IW8Ao1WZ4ARFHIh29dAQHYBEl4YnP74n++rjppmlCjY+8v3s5nXMA7IqxO3b5LVHyggWtU4+46DXTyMJM7g==",
+      "version": "1.11.20",
+      "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.11.20.tgz",
+      "integrity": "sha512-kHANJrgbqaGzUyTectNfLyhnHAeDGGVSRXYyPVAx6x0nuLOnRhKbuSyZY42UEN1IgHauaADCzcd+HiiMv/rgRw==",
       "cpu": [
         "x64"
       ],
@@ -150,9 +150,9 @@
       }
     },
     "node_modules/@swc/core-linux-arm-gnueabihf": {
-      "version": "1.11.16",
-      "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.11.16.tgz",
-      "integrity": "sha512-2IxD9t09oNZrbv37p4cJ9cTHMUAK6qNiShi9s2FJ9LcqSnZSN4iS4hvaaX6KZuG54d58vWnMU7yycjkdOTQcMg==",
+      "version": "1.11.20",
+      "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.11.20.tgz",
+      "integrity": "sha512-FXllEBeAwU6FNIZzo+u1LmHGaHzwAKzz7tWRkUOqBKjKr20Ot4KGS3xlz2qgV2NESFHAisdHja2P2rcQWqtZRg==",
       "cpu": [
         "arm"
       ],
@@ -166,9 +166,9 @@
       }
     },
     "node_modules/@swc/core-linux-arm64-gnu": {
-      "version": "1.11.16",
-      "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.11.16.tgz",
-      "integrity": "sha512-AYkN23DOiPh1bf3XBf/xzZQDKSsgZTxlbyTyUIhprLJpAAAT0ZCGAUcS5mHqydk0nWQ13ABUymodvHoroutNzw==",
+      "version": "1.11.20",
+      "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.11.20.tgz",
+      "integrity": "sha512-OsYMFyJzUM0K8a97tu6KxZaCob3vr+UknVqHO09QwechX+rdX4euWm7Lte4d1B+7SBfokhw7ghLZsNTQfRw9pA==",
       "cpu": [
         "arm64"
       ],
@@ -182,9 +182,9 @@
       }
     },
     "node_modules/@swc/core-linux-arm64-musl": {
-      "version": "1.11.16",
-      "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.11.16.tgz",
-      "integrity": "sha512-n/nWXDRCIhM51dDGELfBcTMNnCiFatE7LDvsbYxb7DJt1HGjaCNvHHCKURb/apJTh/YNtWfgFap9dbsTgw8yPA==",
+      "version": "1.11.20",
+      "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.11.20.tgz",
+      "integrity": "sha512-fbSWOQ5ZZ7sWodoC6GnzV9RhbImdxoH8b14K1tnHCWJXolzTH40/4JKf/koJ3r24nm1PtsqX9OUxRsOXYAy5dg==",
       "cpu": [
         "arm64"
       ],
@@ -198,9 +198,9 @@
       }
     },
     "node_modules/@swc/core-linux-x64-gnu": {
-      "version": "1.11.16",
-      "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.11.16.tgz",
-      "integrity": "sha512-xr182YQrF47n7Awxj+/ruI21bYw+xO/B26KFVnb+i3ezF9NOhqoqTX+33RL1ZLA/uFTq8ksPZO/y+ZVS/odtQA==",
+      "version": "1.11.20",
+      "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.11.20.tgz",
+      "integrity": "sha512-OFU53idbY8KA1RkNzZBi0FpoRPSn/anv4N7ZzGZGk664UoFwMbSL+XHGocJzhV9G/VNGH7bMBmgoVWk72nn5hw==",
       "cpu": [
         "x64"
       ],
@@ -214,9 +214,9 @@
       }
     },
     "node_modules/@swc/core-linux-x64-musl": {
-      "version": "1.11.16",
-      "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.11.16.tgz",
-      "integrity": "sha512-k2JBfiwWfXCIKrBRjFO9/vEdLSYq0QLJ+iNSLdfrejZ/aENNkbEg8O7O2GKUSb30RBacn6k8HMfJrcPLFiEyCQ==",
+      "version": "1.11.20",
+      "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.11.20.tgz",
+      "integrity": "sha512-GZbqXEc09nIarkGMXc2P4Hf2ONb1vre22X7Se9CCeU/QtWYRU/H1a2TFnYgBKzNVOH65Dd/XYXcuy+tM1aw1iw==",
       "cpu": [
         "x64"
       ],
@@ -230,9 +230,9 @@
       }
     },
     "node_modules/@swc/core-win32-arm64-msvc": {
-      "version": "1.11.16",
-      "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.11.16.tgz",
-      "integrity": "sha512-taOb5U+abyEhQgex+hr6cI48BoqSvSdfmdirWcxprIEUBHCxa1dSriVwnJRAJOFI9T+5BEz88by6rgbB9MjbHA==",
+      "version": "1.11.20",
+      "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.11.20.tgz",
+      "integrity": "sha512-i0H2MeK8krEd/YeiGz0GHtNL9wSGfAPXiouh8aRNV/u+w4vPaaRqnXwv/yzAW+D2vPpKJBhOwmNFFzdgTJ5mWw==",
       "cpu": [
         "arm64"
       ],
@@ -246,9 +246,9 @@
       }
     },
     "node_modules/@swc/core-win32-ia32-msvc": {
-      "version": "1.11.16",
-      "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.11.16.tgz",
-      "integrity": "sha512-b7yYggM9LBDiMY+XUt5kYWvs5sn0U3PXSOGvF3CbLufD/N/YQiDcYON2N3lrWHYL8aYnwbuZl45ojmQHSQPcdA==",
+      "version": "1.11.20",
+      "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.11.20.tgz",
+      "integrity": "sha512-/7e3X7EGO8uOvAUP+YKJTdoR2JR5vdiewDOnDS9FFXj8yr9x6/oDFLd92Sp9NglF+aXuqAo33IfH2OTz1MR+Ww==",
       "cpu": [
         "ia32"
       ],
@@ -262,9 +262,9 @@
       }
     },
     "node_modules/@swc/core-win32-x64-msvc": {
-      "version": "1.11.16",
-      "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.11.16.tgz",
-      "integrity": "sha512-/ibq/YDc3B5AROkpOKPGxVkSyCKOg+ml8k11RxrW7FAPy6a9y5y9KPcWIqV74Ahq4RuaMNslTQqHWAGSm0xJsQ==",
+      "version": "1.11.20",
+      "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.11.20.tgz",
+      "integrity": "sha512-rcZpt5uiVNTs/Se+CYBoaDphafFJcsqXo3DNmfkJZoDZUb4PZqxu61p4Qa+lvFDQlRragrlLRpGQM9qnLNd4iQ==",
       "cpu": [
         "x64"
       ],
@@ -417,9 +417,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001709",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001709.tgz",
-      "integrity": "sha512-NgL3vUTnDrPCZ3zTahp4fsugQ4dc7EKTSzwQDPEel6DMoMnfH2jhry9n2Zm8onbSR+f/QtKHFOA+iAQu4kbtWA==",
+      "version": "1.0.30001713",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001713.tgz",
+      "integrity": "sha512-wCIWIg+A4Xr7NfhTuHdX+/FKh3+Op3LBbSp2N5Pfx6T/LhdQy3GTyoTg48BReaW/MyMNZAkTadsBtai3ldWK0Q==",
       "funding": [
         {
           "type": "opencollective",
@@ -703,9 +703,9 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.130",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.130.tgz",
-      "integrity": "sha512-Ou2u7L9j2XLZbhqzyX0jWDj6gA8D3jIfVzt4rikLf3cGBa0VdReuFimBKS9tQJA4+XpeCxj1NoWlfBXzbMa9IA==",
+      "version": "1.5.136",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.136.tgz",
+      "integrity": "sha512-kL4+wUTD7RSA5FHx5YwWtjDnEEkIIikFgWHR4P6fqjw1PPLlqYkxeOb++wAauAssat0YClCy8Y3C5SxgSkjibQ==",
       "license": "ISC"
     },
     "node_modules/entities": {
diff --git a/package.json b/package.json
index e7846198..56604fae 100644
--- a/package.json
+++ b/package.json
@@ -1,5 +1,5 @@
 {
   "dependencies": {
-    "@railcomm/assproc": "^1.1.0"
+    "@railcomm/assproc": "^1.2.1"
   }
 }
diff --git a/src/Misuzu.php b/src/Misuzu.php
index 40d47776..67c03050 100644
--- a/src/Misuzu.php
+++ b/src/Misuzu.php
@@ -41,11 +41,15 @@ final class Misuzu {
         return sprintf('%s/%s', __NAMESPACE__, self::version());
     }
 
-    public static function debug(): bool {
-        return !empty(ini_get('display_errors'));
-    }
-
     public static function cli(): bool {
         return php_sapi_name() === 'cli';
     }
+
+    public static function env(string $name, ?string $default = null): ?string {
+        return $_ENV[$name] ?? $_SERVER[$name] ?? $default;
+    }
+
+    public static function debug(): bool {
+        return !empty(self::env('MSZ_DEBUG'));
+    }
 }