Releases: MahoCommerce/maho
25.1.0
🎉🎉 Welcome to a new release of Maho, the new ecommerce platform you already know! 🎉🎉
First release of 2025, huge release already, fasten your seatbelts for this ride, cause we powered through the holidays, cramming ~150 commits into Maho 25.1, shaking the foundations of open source ecommerce once more!
Creating Maho is a massive effort that requires all the help possible, please consider joining our sponsorship program.
It will make all the difference in the world!
Maho rocks! 🚀
https://mahocommerce.com
https://demo.mahocommerce.com
Foundation
Maho 25.1.0 is based on OpenMage 21.0-beta2 + all the patches merged in the main branch up to 13th Jan 2025.
🚀 New features and major improvements
Completely removed prototypejs from our frontend!
This doesn't really need an explanation right? PrototypeJS was an ancient javascript library that was at the base of the M1 platform but that became anachronistic and unsupported, its last release was in 2015... It had to go, but removing it from the frontend was a huge, huge effort that took years in rewriting and testing thousands of lines of code. We focused on the frontend first because it's for sure the most important part, backend will come later. Better security, modern code, lighter frontend with hundreds of KB of javascript saved at each request.
Converted all colors into variables for easy color scheme customization
Customizing the color scheme of your store was never this easy!
We've reviewed 10k lines of CSS, extracted and cleaned all colors and moved them into 25 CSS variables to allow you to have complete control, but also to make a another step forward in the modernization of Maho's frontend.
Added optional 2 Factor Authentication for backend
In 2025 security is no joke to anybody, 2FA was a requested feature since long time and we wanted Maho to have native support for that.
With Maho 25.1 your backend users can decide to enable 2FA, scan the autogenerated SVG QR code (no temporary image files are generated, for enhanced security and easier sysadmin maintenance), save, done.
Added Order Status color
Having a great support for modules was the key to the success of the M1 platform, but at Maho we believe that key functionalities should be bundled in the core, that's why we decided to add support for assigning a color to each order-status, something that a lot of stores were already using with 3rd party code.
Now, natively, with just a few clicks, store managers have an easier way to overview the orders, allowing for faster workflow and less possibility to forget to process an order.
Composer plugin v3
Bootstrapping Maho now just requires 3 lines of code, gone are the days of including bootstrap.php, Mage.php and then still it wasn't working.
Our composer plugin v3 enables full composer autoload for the whole platform, autoloading performance improvement and full support for Modman based modules.
Removed the ancient ExtJS and replaced with Maho Tree
ExtJs is a powerful tool, but because of licensing, the version that was bundled in the M1 platform for 10+ years was extremely obsolete. Here again we rethought the whole thing, looking for alternatives and deciding to create our own minimal js tree library based on standard HTML elements like details/summary. HTML/CSS are extremely powerful now and we should always try to leverage the standards as much as possible, this will assure better maintainability, security and performance.
New design for star rating
The previous implementation looked old and outdated, it was time for a complete overhaul. It's not a big deal in the great schema of things, but reviews are still important for ecommerce websites and the need for a quick, clear and modern interface to allow customers to leave a review was absolutely necessary.
Dashboard charts are now based on Chart.js
Dashboard charts relied on a 3rd party server for many, many years, in the M1 platform. That is a problem on multiple levels, what if that server goes down? Also, in order to generate the charts, all the data was obviously sent to that service and... well.. let's say we don't want to leak our precious sales data. At Maho we are dedicated at tackling these infrastructural problems and here we are again, with a local-only chart solution for the backend dashboard, modern, interactive and safe.
Added "Cron Jobs" mask to "System -> Tools"
For many years the M1 platform had a few modules to see and modify cron jobs, we think such a configuration is better held via code, but it's extremely helpful to be able to see which cron jobs are running, for how long and if there are any errors. This is now possible without having to install any 3rd party module.
🐛 Minor bugfix, improvements and changes
- Fixed target file format conversion for images (#79)
- Added
$this->getResponse()->setBodyJson()
method (#85) - Backend: Rewrote file uploader without flow.js (now removed from the repo) and prototype.js (#91)
- Backend: Rewrote WYSIWYG without PrototypeJS (#87)
- Backend: Removed double span element from HTML buttons
- RWD: Removed double span element from HTML buttons
- RWD: Removed DOM element span.swatch-label from layered navigation
- Frontend: Restyled swatches with flexbox, also made them slightly bigger to respect touch-point-sizing
- Frontend: Removed a few "go back" and "change" links from checkout for better readability
- Removed obsolete install scripts (#65)
- Fixed bug with
Mage::getModel('core/url')->getUrl('', ['_current' => true, '_query' => false])
(#82) - Fixed configurable swatches undefined array key warning (#80)
🛠️ Technical updates
- Updated PHPStan to 2.1
- Updated Rector to 2.0
And many more, be sure to check the full changelog.
24.11.0
🎉🎉 Welcome to a new release of Maho, the ecommerce platform you already know! 🎉🎉
Remember our last release two months ago?
Well, time must be an illusion since we managed to pack two years' worth of changes (about 300 commits) into this new one!
For this reason we had to condense these release notes to spare you from a document that would make Lord of the Rings seem short.
🚨⚠ DISCLAIMER ⚠🚨
Maho is a big shift in the M1 paradigm so please, for the time being, handle it with care. As much as we'd love to see production stores going live on Maho, be sure to test everything very carefully.
Before starting, a word about the future
We had to remove a major new feature from this release, the global attribute editor, Justin worked extremely hard on this (and not only on this ❤️), but the task is huge, it will bring a whole new set of features to our platform, and it simply requires a bit more time. We're confident that it will be ready for Maho 25.01 along with many other revolutionary changes, we aim for Maho 25.01 to have the first prototypejs-free frontend since the beginning of the M1 platform!
This massive effort requires all the help possible - please consider joining our sponsorship program. It will make all the difference in the world!
Maho rocks! 🚀
https://mahocommerce.com
https://demo.mahocommerce.com
Foundation
Maho 24.9.0 is based on OpenMage 21.0-beta2 + all the patches merged in the main branch up to 24th Nov 2024
Visible from outside: changes to the frontend theme
- Completely removed jQuery,
- All icons are now SVG
- Converted all font-size to rem for enhanced accessibility
- Removed google font and replaced it with Tailwind default font rule
- Removed elevateZoom and rewrote basic zoom functionality in vanilla js
- Removed slideshow js and rewrote them in modern CSS + basic vanilla JS
- Avoided content layout shift
- Removed modernizr.js
- Removed imagesloaded.js completely and rewrote funcionality with modern js, added lazy load to image gallery in product view
And many, many other minor improvements.
🚀 New features and major improvements
Added back/forward cache support for CMS/category/product pages
This will allow extreme performance improvements when using the back/forward buttons, better pagespeed scores, and could lead to big bandwidth/load saving on your infrastructure. (read more)
Added support for AVIF images
AVIF is a modern, open-source image format that offers superior compression efficiency while maintaining excellent image quality. It's particularly important because it supports advanced features like HDR, wide color gamut, and transparency, necessary to highlight the characteristics of specific type of products on your store. (example)
Added possibility to set a file format (default WebP) for all images processing (resize, thumbnails etc)
Convert all your catalog to WebP with a single click. (read more)
SEO: Added automatic hreflang tag
This starts an effort to bring a complete set of SEO related tools to Maho. (read more)
From now on, multi store website will be linked across languages so that search engines will understand the language correlation between pages, out of the box.
Removed Mage_Persistent and improved cookie handling
Remember the "remember me"? Well, this change removed the ancient Mage_Persistent module, consolidate and merged all templates, cleaned up a lot of code and completely rewrote the cookie management for session, you may not see the difference with your naked eye, but you will know it will work so much better.
Replaced js calendar by Mihai Bazon with flatpickr with lazyload
The javascript library used for dates in all M1 installation was extremely old (last release was almost 20 years ago!) and it had to go, and it's now replaced with a lightweight, moderd looking and modernly coded one called flatpickr.
Massive improvements to Maho's autoloaders
The idea at the base of Maho itself was the new set of autoloaders that allow all of the platform to live inside composer's vendor
folder, like any other modern framework would and that was never possible in the Magento world. With this PR Justin took this concept and made it 10 times better.
Improved jstranslator.xml capabilities
Jstranslator gives you the possibility to add translation strings to frontend's javascript code, without having to write any javascript. It's a great feature but it needed some love. This new version separates frontend/backend strings, allows to define a string relatively to a module, scope or if a specific javascript file is included in the target page. (read more)
Added option to redirect to register page during checkout
When your customer registration form is too long, it's probably not the best to have it inside the checkout procedure, with this new option you can decide that your users will be redirected to the customer registration page if they choose to register during the checkout phase. Simple, but effective.
Added MahoCLI command to create a new command
When developing an ecommerce project, you will find yourself developing some quick command line scripts, you could already integrate them into Maho CLI but today this is easier than ever with ./maho create-command
.
Introduced ./maho health-check
and migrate to Maho guide
You asked us for a migration guide and we delivered, but we thought we needed something more, that's why we created ./maho health-check
, which will help you keep your project in good health, but also will ./maho health-check
that a project could have.
❗ Major changes you need to know
- [Products count is now disabled by default in layered navigation](https://gith...
24.9.0
🎉🎉 Welcome to the first public release of Maho, the new ecommerce platform you already know! 🎉🎉
This might sound odd, and that's intentional 😉 Maho is part of the M1 ecosystem, started in 2008 with Magento1, then followed by OpenMage and now here we are. A platform you're already familiar with, but brand new in many many aspects!
Maho wants to provide a forward-thinking approach, fun for developers, a modern environment but keeping our strong roots of the M1 platform.
We have about 250 commits for this release 🤯, ranging from minor tweaks to major feature additions, so... buckle up! And notice that we had to omit many minor details for brevity but we hope to have highlighted everything important.
🚨⚠ DISCLAIMER ⚠🚨
Maho is a big shift in the M1 paradigm so please, for the time being, handle it with care. As much as we'd love to see production stores going live on Maho, be sure to test everything very carefully.
Maho rocks! 🚀
https://mahocommerce.com
Foundation
Maho 24.9.0 is based on OpenMage 21.0-beta2 + all the patches merged in the main branch up to 18th Sep 2024
The new paradigm
Three main pillars set Maho apart from any other M1 based platform:
- Project structure: no duplicates files from the core is your project folder, like any other modern PHP project, frameworks and libraries live only in the
vendor
folder, thanks to composer, our new composer-plugin and our completely rewritten autoloaders.
This means a clean project structure that only contains YOUR code and less possibilities for inexperienced developers to "patch the core". - Built in CLI tool ./maho: with inspirations from Laravel Artisan, Laravel starter project and the great n98-magerun (three extremely important pieces of software both historically and in the current open source landscape) we decided to create our own CLI tool, make it as complete as possible, and bundle it. In the meanwhile we also made it expandable so that you can build your own commands.
media
,js
andskin
folders now live inside thepublic
directory, it is now mandatory to set the document root of your web server (Apache, Nginx, Caddy or FrankenPHP) topublic
.
This may be a bit more uncomfortable on some shared hostings, but it's needed to keep things simpler and, most importantly, more secure.
Important things you must know
- API: Adjusted WSDL attributes for Maho branding
If your project has custom APIs you've to search forurn:Magento
andurn:OpenMage
and replace all occurrences withurn:Maho
, to do that you can run these commands- on Linux
find app -type f -exec sed -i 's/urn:\(Magento\|OpenMage\)/urn:Maho/g' {} +
- on MacOS (be sure to have
gsed
installed)find app -type f -exec gsed -i 's/urn:\(Magento\|OpenMage\)/urn:Maho/g' {} +
- on Linux
- PHP 8.2 minimum: more performant end secure, this change also allows us to remove a lot of polyfills from our composer.json, slimming down your final vendor folder but also ensuring that you use native PHP functionalities instead of the less performant 3rd party polyfills
- The ancient Scriptaculous was completely removed, thanks to html5sortables and the creation of MahoAutocomplete and a basic vanilla js version of Prototype Effect
- Removed prototypejs/window.js (along many unused prototypejs subfiles) in favor of the new vanillajs/HTML5 maho-dialog.js
- The
/errors
folder doesn't exist anymore and it's replaced withmahoErrorReport()
New features
- Maho supports SVG format for product image placeholders
- Added ability to view orders paid with removed payment method without breaking
- TinyMCE WYSIWYG editor
- TinyMCE is now optional and not required by the core anymore
- The dependency has been moved to the Maho starter project. It was made this way so that you can remove it quickly and safely from your projects.
- In the meanwhile we also fixed security vulnerability CVE-2024-29881.
- Added support for PHP 8.4, but also added PHP 8.3+ #[\Override] to all our codebase
Minor bugfix and changes
- Fixed a bug with swatches shown even for out-of-stock variants
- Removed obsolete Mage_All.xml and references to this file
- Adminhtml: Fixed active menu highlighting
- Web installer was simplified a restyled, removing a lot of unused files from the skin/install folder and some installation options that are no longer needed in 2024 (use_rewrites, enable_charts, skip_url_validation)
- phtml files now use short echo tags
<?=
- Huge cleanup of old/unused files throughout the whole project
- Mage_Backup, Mage_Captcha and Mage_Sendfriend were removed, together with SCSS in RWD/admin themes
- In the backend, Magento1 theme is no longer available and the icons next to the page name were removed
- Redis modules are no longer required but only suggested
Upgrade from Magento1 or OpenMage
At the moment we don't have an upgrade script or an upgrade guide, we will work on both of them very soon.
Be sure to check all of the documentation we have at https://mahocommerce.com/getting-started