{"record":{"id":"f1133006fbf8d6b3","repo":"flarum/framework","slug":"intervention-image-driver-is-not-valid","errorCode":null,"errorMessage":"intervention/image: $driver is not valid","messagePattern":"intervention/image: \\$driver is not valid","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"framework/core/src/Image/ImageServiceProvider.php","lineNumber":45,"sourceCode":"                'imagick' => Drivers\\Imagick\\Driver::class\n            ];\n        });\n\n        $this->container->singleton('image', function (Container $container): ImageManager {\n            $interventionDrivers = $container->make('image.drivers');\n\n            $configDriver = $container->make(Config::class)->offsetGet('intervention.driver');\n\n            // Default to 'gd' if not present in the config\n            $driver = $configDriver ?? 'gd';\n\n            // Check that the imagick library is actually available, else default back to gd.\n            if ($driver === 'imagick' && ! extension_loaded('imagick')) {\n                $driver = 'gd';\n            }\n\n            if (! Arr::has($interventionDrivers, $driver)) {\n                throw new RuntimeException(\"intervention/image: $driver is not valid\");\n            }\n\n            return new ImageManager($interventionDrivers[$driver]);\n        });\n\n        $this->container->alias('image', ImageManager::class);\n    }\n}\n","sourceCodeStart":27,"sourceCodeEnd":54,"githubUrl":"https://github.com/flarum/framework/blob/4b939f685389bfe8a380e9e28ddf305a1c66950c/framework/core/src/Image/ImageServiceProvider.php#L27-L54","documentation":"The ImageServiceProvider resolves an intervention/image v3 driver from configuration and validates it against the known driver map ('gd', 'imagick'). If the configured driver name is not in that map (after the imagick-availability fallback), a RuntimeException is thrown during container registration.","triggerScenarios":"Config value image.driver set to something other than 'gd' or 'imagick' (e.g. leftover intervention/image v2 string like 'Gd' with wrong casing or a custom name); typo in config.","commonSituations":"Upgrading from intervention/image v2 to v3 where driver configuration shape changed; copying config from tutorials using unsupported values like 'imagemagick'.","solutions":["Set the driver to 'gd' or 'imagick' in the config (config/image.php or extender)","Check extension_loaded('imagick') and install php-imagick if imagick is desired","Clear config cache so the corrected value is used"],"exampleFix":"// before\n'driver' => 'imagemagick',\n// after\n'driver' => extension_loaded('imagick') ? 'imagick' : 'gd',","handlingStrategy":"validation","validationCode":"$driver = $config->get('image.driver', 'gd');\nif (! in_array($driver, ['gd', 'imagick'])) {\n    throw new InvalidArgumentException(\"image.driver must be 'gd' or 'imagick', got '$driver'\");\n}\nif ($driver === 'imagick' && ! extension_loaded('imagick')) { $driver = 'gd'; }","typeGuard":null,"tryCatchPattern":"try {\n    $manager = $app->make(ImageManager::class);\n} catch (RuntimeException $e) {\n    // fall back to gd explicitly\n    $app->instance('image.driver', 'gd');\n    $manager = $app->make(ImageManager::class);\n}","preventionTips":["Only set image.driver to 'gd' or 'imagick' (intervention/image v3 values)","Run php -m to confirm imagick is installed before selecting it","Clear config cache after changing the driver config"],"tags":["configuration","image","intervention-image","invalid-value"],"backgroundTag":"invalid-config-value","analyzedSha":"4b939f685389bfe8a380e9e28ddf305a1c66950c","analyzedAt":"2026-09-15T18:09:20.879Z","contentChangedAt":"2026-09-15T18:09:20.879Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}