Hello!
First of all, thank you so much for the kind words!
To answer your questions about migrating your custom modules:
Yes, the old approach with file includes (using ?act=) will still work perfectly fine without any issues. If you are comfortable with this method and prefer to keep it for your migrated modules, you can absolutely continue using it. The engine does not block this way of handling actions.
However, if you want to follow modern practices, we highly recommend refactoring your modules to use the new routing and controller mechanism.
As a great reference point, you can look at the help module (modules/help). It contains very simple pages and is perfect for learning the new structure.
Quick guide on how to migrate to the new system:
Create the folder structure: Set up your folders to match the structure of the help module (including the src directory for your PHP classes).
Configure Composer Autoloading: You need to register your module's classes. Open composer.json in the root of your site and add your module's namespace to the autoload -> psr-4 section:
"YourVendorName\\Modules\\YourModule\\": "modules/moduleName/src/"Regenerate the autoloader: Run this command in your project's root terminal to apply the changes:
composer dump-autoloadCreate a simple Controller: Start by creating a very basic controller that just returns simple, plain text (e.g., "Hello World").
Map the route: Register this controller in your module's routes.php file.
Once you successfully get this simple text to load in your browser at your desired URL, you can start building out the actual logic, templates, and complex features.
If you run into any issues or need further help, feel free to ask here in this thread.
15.07.2026 15:19Also, I've just updated the module creation manual in the documentation:
https://docs.johncms.com/moduli/sozdanie-modulya
Hope this helps with your migration!