Search by

Free and open source ecommerce platform, created in 2024 on the M1 platform, PHP 8.5+

Package info

github.com/MahoCommerce/maho

Homepage

Type:maho-source

pkg:composer/mahocommerce/maho

Statistics

Installs: 13 347

Dependents: 32

Suggesters: 5

Stars: 160

Open Issues: 38

26.11.0 2026-11-01 08:35 UTC

README

Maho

PHP 8.5+ License Plumb score Security CodeQL Localization

PHPStorm Plugin VS Code Extension Zed Extension

Live demo · Documentation · Release notes · Discord · Sponsor

Maho is an open-source ecommerce platform on PHP 8.5, Symfony 8, Doctrine DBAL 4 and API Platform 5.

A tour of the Maho admin: the login page, the dashboard, the main menu, the orders grid, a product search, the product image cards and the switch to dark mode

Quick start

composer create-project mahocommerce/maho-starter yourproject
cd yourproject
./maho serve

Open http://localhost:8000 and follow the installer. Select SQLite to skip the database setup. To fill the store with products, customers and orders, run ./maho import:sample-data.

You can also start a store with Docker:

docker run -p 54321:443 mahocommerce/maho:nightly

Then open https://localhost:54321. For web server, database and production setups, read the Getting Started guide and the official Docker images.

For developers

The stack

  • PHP 8.5 with strict types, typed accessors, #[\Override] and attributes
  • Symfony 8.1 components: HTTP, console, routing, messenger, mailer, validation, cache
  • Doctrine DBAL 4.5 with a declarative schema, on MySQL, MariaDB, PostgreSQL and SQLite
  • API Platform 5.0 for REST, GraphQL and MCP from one set of resources
  • Tailwind CSS 4 and daisyUI 5 for the storefront and the admin, TipTap 3 for content
  • Vanilla JavaScript: no jQuery, no Prototype.js
  • Monolog for logs, OpenTelemetry for traces and metrics, Pest for tests

Configuration in PHP attributes

Routes, observers, cron jobs, queue handlers and API resources live next to the code, not in XML:

#[Maho\Config\Route('/catalog/product/view/{id}', methods: ['GET'], requirements: ['id' => '\d+'])]
public function viewAction(): void {}

#[Maho\Config\Observer('catalog_product_save_after')]
public function handleProductSave(\Maho\Event\Observer $observer): void {}

#[Maho\Config\CronJob('my_cron_job', schedule: '0 2 * * *')]
public function runJob(Mage_Cron_Model_Schedule $schedule): void {}

A schema change is a diff of sql/schema.php, not one more upgrade script. To override a controller, extend it: the router finds the subclass.

APIs

  • REST and GraphQL on one set of resources, with JWT, granular permissions, ETags and idempotency keys. The OpenAPI 3.1 spec is at /api/docs.json. Read the API guide
  • MCP server with OAuth 2.1 login, so Claude, ChatGPT and other agents work with the catalog and the orders. Read the MCP guide
  • Legacy SOAP, XML-RPC and JSON-RPC APIs stay available for existing integrations

Tools

  • 114 CLI commands for install, cache, indexes, cron, database dumps, imports, exports, storage, themes and admin users. Read the CLI guide
  • Message queue on Symfony Messenger, with worker pools and an admin grid
  • Storage mounts on Flysystem: put media, uploads and feeds on S3, Google Cloud Storage or Azure
  • Built-in LSP and MCP servers for your editor and your coding agent
  • Composer plugin for modules and a PHPStan plugin for static analysis
  • Signed release packages at SLSA Build Level 3

For merchants

  • Storefront: eleven themes with a live theme editor, one-step checkout, social login with Google, Apple and Facebook, customer 2FA, product gallery layouts
  • Admin: an AI assistant on every page, a drag-and-drop page builder, passkey and 2FA login, light and dark mode, an image editor, content versions, and the Maho Admin app for phones and tablets
  • Marketing: customer segments, email automation, dynamic categories, gift cards, a blog, and product feeds for Google Shopping, Meta, Bing and Pinterest
  • Payments: PayPal v6 with Pay Later and saved cards in the core, and first-party modules for Braintree, Mollie, Klarna, Revolut, GNU Taler, Przelewy24, PensoPay and Nexi Nets Easy
  • Shipping: rates from external shipping APIs
  • Search engines and AI agents: schema.org data, SEO rules for layered navigation, llms.txt and a markdown version of each page
  • Compliance: WCAG accessibility scans, EU VAT number checks, the EU revocation button
  • Multi-store: many websites, stores and currencies from one admin

Read the User Guide for each feature.

Releases

Maho uses calendar versions: 26.11.0 is the release of November 2026. A new release ships about every two months, and patch releases bring fixes in between. Only the latest release gets fixes. Each release can contain breaking changes, so read the release notes before you upgrade. The release strategy explains why.

Migrate from Magento 1 or OpenMage

Maho keeps the Magento 1 architecture, so your modules, themes and data move with you. Maho is not 100% backward compatible: each release removes old code and lists the breaking changes. The migration guide gives the steps.

Documentation

Contributing

Bug reports, pull requests and translations are welcome. Read the contributing guide to set up a development store, run the linters and open a pull request. Translations happen on Crowdin.

Maho is built by a small team, with generative AI as part of the daily work. Every pull request passes PHPStan, PHP CS Fixer, Rector and the test suite on seven database backends, and a maintainer reviews every change before the merge. AI use in your pull requests is welcome, but you must understand and stand behind the code that you submit. Read our GenAI transparency statement.

Sponsors and funding

Maho is free software, and sponsors pay for the time that it takes. Please become a sponsor.

Funded by the European Commission, NGI TALER Fund by NLnet

Maho receives funding from the NGI TALER Fund of NLnet, with support from the Next Generation Internet programme of the European Commission.

Community

All participants follow our Code of Conduct.

About the name

"Maho" (pronounced "mah-hoh") is the name of the ancient indigenous people of Lanzarote and Fuerteventura in the Canary Islands, a resilient people who thrived in a hard land. In Spanish it means nice, cool, and in Japanese it means magic.

License

Maho is licensed under OSL-3.0. Templates, layouts and front-end assets are licensed under AFL-3.0.