Here’s a way to support Flarum 1.8 and 2.0 in one package.
1. Folder structure
Keep Flarum 1.8 extension in the root. It's already there. Let it be.
Put the Flarum 2.0 version inside a 2.0 folder.
extension/
├ composer.json
├ extend.php
├ src/ (Flarum 1.8 code)
├ js/
└ 2.0/
├ extend.php
├ src/ (Flarum 2.0 code)
└ js/
2. Allow both Flarum versions
In composer.json:
"require": {
"flarum/core": "^1.8 || ^2.0"
}
3. Create a small router file
Root extend.php decides which extension to load.
<?php
use Composer\InstalledVersions;
$version = InstalledVersions::getPrettyVersion('flarum/core');
if (version_compare($version, '2.0.0', '>=')) {
return require __DIR__.'/2.0/extend.php';
}
return require __DIR__.'/src/extend.php';
4. Move the Flarum 1.8 boot file
If your extension currently has:
extend.php
move it to:
src/extend.php
5. Leave the Flarum 2 extension inside 2.0/
2.0/extend.php
2.0/src/
2.0/js/
No special changes needed.
Result
When the extension installs:
- Flarum 1.8 loads
src/extend.php
- Flarum 2.0 loads
2.0/extend.php
One Composer package, two separate codebases.