flarum/framework · warning

One or more extensions have changed, but ignoring due to…

Error message

One or more extensions have changed, but ignoring due to flag --ignore-extension-toggles.

What it means

ServeCommand watches the enabled-extension state while serving; if extensions were enabled/disabled mid-serve but --ignore-extension-toggles was passed, it warns that changes are detected yet ignored, updates its cached state, and keeps the loop running without restart.

Solutions

  1. Remove --ignore-extension-toggles so the server restarts and picks up extension changes
  2. Restart the serve command manually after the extension changes if needed
  3. Ensure extension state is stable before starting a long-serving process

Example fix

// before
php flarum serve --ignore-extension-toggles
// after
php flarum serve   # restarts on extension toggles
Defensive patterns

Strategy: fallback

Validate before calling

# keep extension state stable before serving
php flarum info | grep -i extension

Prevention

When it happens

Trigger: Running the websocket serve command with --ignore-extension-toggles while something (admin panel, flarum CLI) enables or disables an extension during the process lifetime.

Common situations: Deploy tooling toggling extensions while a dev websocket server runs; operators deliberately suppressing restarts to avoid interrupting active connections.

Understand the failure class

Background: "unknown output mode", "invalid value for flag", "expects true/false": fixing invalid flag value errors in CLI tools — this error's family across 24 libraries.

Related errors


AI-assisted analysis of flarum/framework@4b939f6853 (2026-09-15). Data as JSON: /api/errors/3a68e481f9b382af. Report an issue: GitHub.

Appendix: source

Thrown at extensions/realtime/src/Websocket/Console/ServeCommand.php:219

                $newState = $app->make(SettingsRepositoryInterface::class)->get('extensions_enabled');
            } else {
                /** @var ConnectionInterface $connection */
                $connection = $app->make(ConnectionInterface::class);
                $newState = $connection->table('settings')
                    ->where('key', 'extensions_enabled')
                    ->value('value');
            }

            if ($enabled === null || $newState === $enabled) {
                $enabled = $newState;

                return;
            }

            if ($this->option('ignore-extension-toggles')) {
                $enabled = $newState;

                $this->warn('One or more extensions have changed, but ignoring due to flag --ignore-extension-toggles.');

                return;
            }

            $this->warn('One or more extensions have changed, killing to restart.');

            $loop->stop();
        });
    }
}

View on GitHub (pinned to 4b939f6853)