It’s done! I’ve successfully upgraded a dev instance of PianoTell to Flarum 2 minus a lot of extensions.
This is what I started with:

I disabled a bunch of extensions based on my earlier list. I had to disable more after composer failed several times:
acpl/mobile-tab — correction, this one worked
blomstra/fontawesome
fof/linguist
After disabling all the extensions, this is what PianoTell looked like on Flarum 1.8.x (for the sake of comparison):

I also had to change minimum-stability to dev and remove the —no-dev directive. It was also mildly annoying to have to change the driver back and forth between mysql and mariadb.
The first time I tried to run Flarum 2, it failed with this error:
[2025-11-28T02:06:54.574515+00:00] flarum.ERROR: Error: Class "Flarum\Extend\ApiSerializer" not found in /var/www/html/vendor/fof/ignore-users/extend.php:44
Stack trace:
#0 /var/www/html/vendor/flarum/core/src/Extension/Extension.php(304): require()
#1 /var/www/html/vendor/flarum/core/src/Extension/Extension.php(108): Flarum\Extension\Extension->getExtenders()
#2 /var/www/html/vendor/flarum/core/src/Extension/ExtensionManager.php(320): Flarum\Extension\Extension->extend(Object(Flarum\Foundation\Application))
#3 /var/www/html/vendor/flarum/core/src/Extension/ExtensionServiceProvider.php(33): Flarum\Extension\ExtensionManager->extend(Object(Flarum\Foundation\Application))
#4 /var/www/html/vendor/flarum/core/src/Foundation/Application.php(200): Flarum\Extension\ExtensionServiceProvider->Flarum\Extension\{closure}(Object(Flarum\Foundation\Application))
#5 /var/www/html/vendor/flarum/core/src/Foundation/Application.php(163): Flarum\Foundation\Application->fireAppCallbacks(Array)
#6 /var/www/html/vendor/flarum/core/src/Foundation/InstalledSite.php(141): Flarum\Foundation\Application->boot()
#7 /var/www/html/vendor/flarum/core/src/Foundation/InstalledSite.php(74): Flarum\Foundation\InstalledSite->bootLaravel()
#8 /var/www/html/vendor/flarum/core/src/Http/Server.php(58): Flarum\Foundation\InstalledSite->bootApp()
#9 /var/www/html/vendor/flarum/core/src/Http/Server.php(34): Flarum\Http\Server->safelyBootAndGetHandler()
#10 /var/www/html/public/index.php(26): Flarum\Http\Server->listen()
So I also removed:
fof/ignore-users
And with that, everything is working! Flarum 2.x is snappy so far. These are all screenshots from Flarum 2 (compare to earlier screenshots):


fof/formatting works!

I like the new search a lot!


Dark mode doesn’t look good on PianoTell, so I need to figure out how to address that:

All in all, for what’s there, Flarum 2 is looking good! With all the changes, I didn’t expect the transition to be as smooth as it was, although I am missing a lot of extensions currently.
Flarum 2 feels fast and performant. I’ll be playing around some more to see how things are working and see if anything didn’t survive the transition.
Thanks for all the help and advice so far! 🎉