idea89 / magento2-assistant
AI shopping assistant for Magento 2 — answers product questions, recommends what to buy, surfaces promotions. 5-minute install.
IDEA89 — AI Shopping Assistant for Magento 2
Turn your Magento storefront into a conversion machine. IDEA89 adds an AI-powered shopping assistant that answers product questions, recommends what to buy, and surfaces promotions — in your brand voice.
5-minute install. No theme changes. No dev work.
What it does
| Feature | Description |
|---|---|
| Smart product recommendations | AI understands natural language queries like "something waterproof under 100 pounds" and finds the right products from your catalogue |
| Real-time catalogue sync | Products, variants, prices, stock levels, and reviews are synced automatically. Out-of-stock items are never recommended |
| Brand voice | Configure your assistant's name, tone, and store context. It answers like a member of your team |
| Promotion awareness | Active cart price rules are synced so the assistant can surface relevant discounts |
| In-chat order tracking (new in v1.1.1) | When a shopper asks "where is my order?" the assistant surfaces a compact order card right in the chat with status, items, and a carrier tracking link. Logged-in customers see their last 3 orders; guests verify with order number + email |
| Store Locator (new in v1.1.0) | Physical showroom finder with map, postcode search, hours, photos, and directions — in chat and on a dedicated /store-finder page (URL configurable) |
| Configurable checkout (new in v1.3.0) | Choose how far the assistant carries a shopper: send them to your cart page, hand off to your checkout, open your checkout inside the chat panel, or have the assistant collect delivery details and place the order itself (beta). Express handoff is the default and never touches your checkout |
| Agentic Commerce (new in v1.3.0) | Publish your catalogue so AI shopping agents such as ChatGPT can find your products, off by default |
| Built-in analytics | Track conversations, conversion rates, and top queries from the merchant dashboard |
| GDPR-ready | EU-hosted, no customer data used for AI training, PII redaction before model calls |
How it works
- Install the module via Composer
- Enter your API key from the IDEA89 dashboard
- The widget appears on your storefront immediately
- Products sync automatically — the assistant is ready to sell
Your catalogue is indexed with AI embeddings for semantic search. When a shopper asks a question, the assistant searches your products, checks stock, and responds with relevant recommendations — complete with product cards, prices, and add-to-cart buttons.
Requirements
- Magento 2.4.6 or later (Open Source, Adobe Commerce, or Adobe Commerce Cloud)
- PHP 8.1, 8.2, 8.3, 8.4, or 8.5 — practically, whichever your Magento install
supports:Magento PHP range 2.4.6 8.1, 8.2 2.4.7 8.1, 8.2, 8.3 2.4.8 8.2, 8.3, 8.4 2.4.9 8.4, 8.5 (8.3 upgrade-only) - An IDEA89 account — start your free trial
Installation
composer require idea89/magento2-assistant
bin/magento module:enable Idea89_Assistant
bin/magento setup:upgrade
bin/magento cache:flush
That's it. No layout XML changes, no theme overrides, no frontend build step.
Configuration
Navigate to Stores > Configuration > IDEA89 > AI Shopping Assistant in Magento Admin.
General
| Setting | Description |
|---|---|
| Enable Widget | Turn the chat widget on/off |
| API Key | Your API key from the IDEA89 dashboard (stored encrypted) |
| Assistant Name | Name shown in the widget header (e.g. "Aria", "Shop Helper") |
| Store Context | Describe what your store sells so the AI can answer general questions |
| Test Connection | Verify your API key works |
| Sync Now | Manually trigger a full catalogue sync |
Widget Appearance
| Setting | Description |
|---|---|
| Position | Bottom-right or bottom-left |
| Brand Colour | Hex code for the widget header (e.g. #2563eb) |
Content Sync
Choose what gets synced to IDEA89:
- Products — names, descriptions, prices, images, attributes, variants, stock, reviews
- Categories — so the assistant knows your catalogue structure
- CMS Pages — About Us, FAQs, policies — the assistant can answer "what's your return policy?"
- Store Info — store name and context description
Checkout Experience (new in v1.3.0)
Settings live under Stores → Configuration → IDEA89 → Checkout Experience. Four options for how far the assistant carries a shopper towards a completed order:
| Setting | Default | Notes |
|---|---|---|
| Assistant Checkout Mode | Express handoff | "Off" sends shoppers to your cart page. "Express handoff" shows a basket summary in chat with one button to your checkout page; never touches your checkout itself. "Checkout in chat" frames your own Magento checkout inside the assistant panel. "Native checkout (beta)" has the assistant collect delivery details and place the order itself |
| Cart URL Path | /checkout/cart/ |
Only needed if an extension has moved your cart page |
| Checkout URL Path | /checkout/ |
Only needed if a one-step-checkout extension uses its own path. Shown for Express handoff and Checkout in chat |
| Test Checkout Panel | n/a | Pre-flight check for Checkout in chat: flags Hyvä Checkout, one-step-checkout extensions, redirect-based payment methods, guest checkout being off, and reCAPTCHA on checkout |
| Pinned Checkout Bar | Yes | Full-width "Checkout, N items, total" bar above the chat box whenever the basket has items |
| Payment Methods the Assistant May Use | (none selected) | Native checkout only. Empty by default, so no orders are placed until you choose which methods the assistant may use |
Native checkout talks to Magento over four same-origin routes under /idea89/checkout (context, address, method, place). The three that change the quote validate Magento's own form key as CSRF protection, and every one of the four is rate-limited per shopper session: order placement is capped at 8 attempts per session per 10 minutes, everything else at 30.
Agentic Commerce (new in v1.3.0)
Also under Checkout Experience, and independent of the checkout mode above. Lets AI shopping agents outside your widget, such as ChatGPT, find, and where a separate transactional module is installed, buy from your store.
| Setting | Default | Notes |
|---|---|---|
| Let AI agents shop your store | No | Publishes your catalogue to those third parties once turned on |
| Publish the Product Feed | Yes | Serves your visible catalogue at /idea89/acp/feed.json once Agentic Commerce is on. Disabled products, products not visible individually, and products outside the current website are never included |
| Agent Access Token | (blank) | Optional bearer token for the feed. Leave blank to serve it publicly |
IDEA89 never places an order or touches payment on an agent's behalf: the five checkout-session routes under /idea89/acp/checkout_sessions redirect to a separately installed transactional module (currently Magebit's free Agentic Commerce module) when one is present, and decline with a fixed, documented message otherwise. See docs/agentic-commerce-guide.md for the setup guide.
Store Locator (Pro plan and above)
Settings live under Stores → Configuration → IDEA89 → Store Locator. Twelve fields covering page behaviour and content:
| Setting | Default | Notes |
|---|---|---|
| Enable Store Finder Page | Yes | Master toggle for the locator page and CMS widget |
| URL Path | store-finder |
Pick any slug — showrooms, branches, find-a-shop. Save fails with a clear error if it collides with an existing CMS page, product, category, or module |
| Page Layout | Use dashboard setting | Fullwidth (edge-to-edge map) or Boxed (max-width card) |
| SEO Page Title + Meta Description | (sensible defaults) | Standard SEO control over the page head |
| Hero Eyebrow / Title / Subhead | (sensible defaults) | Override the in-page copy without theme edits |
| Help Section Heading / Body / CTA Label / CTA URL | "Contact us" → /contact |
The help section below the map |
The page also lives as a CMS widget — drop IDEA89 Store Locator into any CMS page or static block from the widget picker.
Locations themselves are managed in the IDEA89 dashboard → Locator. The chat assistant uses them automatically when a shopper asks "where is your nearest store?"
Order Tracking (every plan)
Settings live under Stores → Configuration → IDEA89 → Order Tracking. Five fields:
| Setting | Default | Notes |
|---|---|---|
| Enable Order Tracking | Yes | Master toggle. When No, the chat assistant won't surface an order card, and the order endpoints respond with feature_disabled |
| Contact Support URL | /contact |
Where the "Contact support" button on the order card sends shoppers — relative path, absolute URL, or mailto: |
| Contact Support Button Label | "Contact support" | Match your tone — "Talk to us", "Email the team" |
| Max Recent Orders Shown | 3 | How many recent orders to show a logged-in customer (1–10) |
| Show Carrier Tracking Button | Yes | When Yes, surfaces a "Track parcel" button when a carrier tracking link is available |
All fields support per-store-view scope. Online-only retailer? Set Enable Order Tracking = No on that store-view and the card never surfaces.
See docs/order-tracking-guide.md for the full guide — privacy model, supported carriers, troubleshooting, and the order-card JSON shape.
Advanced
| Setting | Description |
|---|---|
| API URL | Override for self-hosted or enterprise deployments. Leave blank for default. |
How syncing works
| Trigger | What happens |
|---|---|
| Product saved | Changed product is queued and synced within 1 minute |
| Stock update | Stock changes are synced within 1 minute |
| Price rule saved | Active promotions are synced immediately |
| Nightly cron | Full catalogue re-sync as a safety net (configurable) |
| Manual sync | Click "Sync Now" in admin to push everything immediately |
All syncs are idempotent — sending the same product twice is safe and expected.
The widget
The assistant appears as a floating chat widget on your storefront. It includes:
- Conversational AI that understands your products
- Product cards with images, prices, ratings, and add-to-cart buttons
- Promotional banners for active cart price rules
- Quick-reply chips for common questions
- Mobile-responsive design
- Dark/light theme support
- No impact on your Magento theme or page speed (loaded asynchronously)
The widget is served from the IDEA89 CDN — no static content is added to your Magento deployment.
Pricing
| Plan | Price | Conversations/mo |
|---|---|---|
| Free trial | £0 for 14 days (all Pro features) | 100 conversations |
| Starter | £49/mo | 1,000 |
| Growth | £149/mo | 10,000 |
| Pro | £349/mo | 50,000 |
Save 10% with annual billing. All plans include the full feature set.
Start your free trial — no credit card required.
Uninstalling
bin/magento module:disable Idea89_Assistant
bin/magento setup:upgrade
composer remove idea89/magento2-assistant
bin/magento cache:flush
No database tables are created in your Magento instance. All data is stored on the IDEA89 platform.
Support
- Documentation: idea89.com
- Email: [email protected]
- Dashboard: app.idea89.com
License
This module is licensed under the Open Software License 3.0 (OSL-3.0).
Copyright 2026 4K Technologies Ltd.
Running unit tests
Unit tests run inside a Magento install (they need magento/framework, which
is not on public Packagist). From the Magento root:
vendor/bin/phpunit -c app/code/Idea89/Assistant/phpunit.xml.dist
CI runs phpcs --standard=Magento2 and CodeQL only, for the same reason.
Built by 4K Technologies in the UK.
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.
[1.3.0] - 2026-09-07
Added
-
Checkout experience setting. A new Checkout Experience section,
Stores → Configuration → IDEA89 → Checkout Experience, adds an
Assistant Checkout Mode field with four options: "Off" sends a
shopper who says "checkout" to your cart page, exactly as the assistant
has always behaved; "Express handoff" is the shipped default, it shows a
basket summary in chat with one button straight to your checkout and
never touches your checkout itself; "Checkout in chat" opens your own
Magento checkout, your payment methods, your shipping rules, your
extensions, inside a panel over the chat; "Native checkout (beta)"
reimplements the checkout steps inside the chat panel, the assistant asks
for delivery details itself and places the order. Two more fields,
Cart URL Path (default/checkout/cart/) and Checkout URL Path
(default/checkout/), let you point the assistant at a non-default cart
or checkout page, for example a one-step-checkout extension's own URL.
The storefront now also publisheswindow.__IDEA89_PLATFORMand
window.__IDEA89_CHECKOUT(mode, cart path, checkout path, mini-checkout
path, form key, checkout bar flag), mirroring the WooCommerce plugin's
bootstrap contract so the widget uses one detection idiom everywhere. -
Chrome-free checkout for the assistant panel. On "Checkout in chat",
GET /idea89/checkout/mini(Controller/Checkout/Mini.php) renders your
real Magento checkout, the same one-page checkout layout, the same
payment and shipping components, the same third-party extensions, with
the site header and footer stripped, for the chat widget to frame
same-origin. It honours your own settings first: one-page checkout must
be switched on, the basket must have items with no errors, and guest
checkout must be allowed unless the shopper is signed in. IDEA89 renders
nothing payment-related and never receives card data. A guard failure
returns a small same-origin page carrying a machine-readable error code
instead of redirecting, so the widget can fall back immediately rather
than waiting out its handshake timeout. -
Test Checkout Panel. A new admin action next to Assistant Checkout
Mode, shown once you select "Checkout in chat", that checks your store
for anything likely to stop the framed checkout rendering before you
switch it on: Hyvä Checkout (blocks it outright), five one-step-checkout
extensions (Amasty, Mageplaza, IWD, Mirasvit, MageDelight), Magento's own
checkout module being disabled, five payment methods that redirect
shoppers off-site to pay (PayPal Express Checkout, Braintree PayPal,
Klarna, Adyen Hosted Payment Pages, Amazon Pay), guest checkout being
off, and reCAPTCHA on checkout. Run it before going live. -
postMessage bridge, matching the WooCommerce and Magento 1 plugins'
contract exactly:readyandresizeon the framed checkout,success
(with the order number, total and currency) on your real checkout
success page, and a same-origin error page carrying a machine-readable
code for every guard failure. The bridge only ever runs inside a frame,
so an ordinary, unframed checkout visit is completely unaffected by it
being present. -
Native checkout (beta) is a real, working rung too. Selecting it
lets the assistant collect delivery details in the conversation and
place the order itself, over four new same-origin routes under
/idea89/checkout:context(read the basket),address,method
andplace. The three that change the quote,address,methodand
place, each validate Magento's own form key as their CSRF defence,
and all four routes are rate-limited on two dimensions at once: per
shopper session, 8 attempts per 10 minutes for placing an order and 30
for everything else, and per IP address, 24 and 90 over the same window
so that shoppers sharing an office or mobile connection do not exhaust
each other's allowance.
A new Payment Methods the Assistant May Use field is empty by
default, so a freshly switched-on store places no orders at all until
you explicitly tick which methods the assistant may use. Methods it
marks "works in chat" (cheque/money order, bank transfer, cash on
delivery, purchase order and free orders) complete without leaving the
conversation; anything else still sends the shopper to your real
checkout to pay. -
Agentic Commerce Protocol surface, off by default. A new
Agentic Commerce area under Checkout Experience opens with a live
status panel explaining, in plain language, what turning this on does
for your store right now, then lets AI agents outside the widget,
ChatGPT and similar, find, and where a separate module supports it, buy
from your store. Let AI agents shop your store defaults to No:
turning it on publishes your catalog to those third parties, so it is
never switched on without you choosing it. Once on, Publish the
Product Feed (default Yes) serves your visible catalog, including
out-of-stock items flagged as such, at/idea89/acp/feed.json; disabled
products, products not visible individually, and products outside the
current website are never included. An optional Agent Access Token
gates the feed with a bearer token; left blank, the feed is public.
Five new routes under/idea89/acp/checkout_sessionsaccept agent
checkout requests, but IDEA89 itself never places an order or touches
payment: when a separate transactional module is installed (currently
Magebit's free Agentic Commerce module), the request is redirected to
it; otherwise every request is declined with a fixed, documented
message. This is separate from the Assistant Checkout Mode above and
works alongside any of those settings. -
Checkout Display, shared with your IDEA89 dashboard. A new field,
Stores → Configuration → IDEA89 → Checkout Experience → Checkout
Display, shown when Assistant Checkout Mode is Native checkout. Full
window gives checkout the whole screen and hides the conversation behind
it; In the chat keeps checkout inside the assistant panel alongside the
conversation. Full window is the default and is how the assistant has
behaved so far, so nothing changes on upgrade.This one setting lives in your IDEA89 account rather than in Magento, and
the dashboard has the same field. Changing it in either place changes it in
both, so the two screens cannot show you different answers. If IDEA89 cannot
be reached when you save, nothing is changed and Magento tells you why,
rather than storing a value your dashboard never learned about. -
Pinned checkout bar. A new admin toggle, Stores → Configuration →
IDEA89 → Checkout Experience → Pinned Checkout Bar, defaulted ON. When
on, the assistant shows a full-width bar above its message box reading
"Checkout, N items, total" whenever the shopper's basket has items. It is new
persistent chrome, so it can be switched off per store even though it only
ever appears on a basket with something in it. Tapping it goes through the
same Assistant Checkout Mode already configured above; it is a second,
always-visible way to reach checkout, not a new checkout path.
[1.2.1] - 2026-08-18
Fixed
- Coupon expiry dates are now sent to IDEA89 as UTC timestamps with a
Z
suffix (gmdate('Y-m-d\TH:i:s\Z', ...)) instead of the server's local
offset (date('c'), which yields e.g.+01:00). The API accepts only the
Zform, so on any store whose PHP timezone was not UTC, every cart price
rule that had an expiry date set was rejected on sync and the assistant
never mentioned that promotion. Rules with no expiry date were unaffected.
Affects both the save observer and the daily promo cron.
[1.2.0] - 2026-07-01
Added
-
Full product view (mini-PDP). New
GET /idea89/product/mini?sku=|id=
controller (Controller/Product/Mini.php+ theidea89_product_mini
layout handle) renders the real Magento product-view page — media gallery,
price, configurable swatches, and the add-to-cart form with its JS — with
the site chrome (header/footer/breadcrumbs) stripped. The widget loads this
in a contained popup, so add-to-cart and swatches behave exactly like the
storefront PDP (same session, same form key, same AJAX). Gated on the module
being enabled and on the same visibility rules as the storefront PDP
(canShow()+ website membership), so a product that is disabled, "Not
Visible Individually", or not assigned to the current website cannot be
rendered by guessing a SKU/id. -
Shopper personalization (opt-in). New admin section under
Stores → Configuration → IDEA89 → Personalization (enable toggle + an
encrypted Signing Secret shared with the IDEA89 dashboard). When enabled:GET /idea89/customer/memints a short-lived HMAC-signed identity token
(customer id / group / login state) that the widget forwards as an opaque
header. The browser cannot forge it, and the shopper's details never leave
the storefront — IDEA89 reads identity without receiving PII.GET /idea89/products/live(bearer-secret authed) returns live price and
stock for a set of SKUs so the assistant can confirm current pricing
server-to-server.
Both endpoints are inert until Personalization is enabled and the secret is
set, so existing installs are unaffected.
[1.1.5] - 2026-06-07
Added
sale_priceandis_on_salein catalog sync payload, computed from
Magento'sspecial_price/special_from_date/special_to_date.
Enables the IDEA89on_saleshopper intent (e.g. "anything on sale?").
[1.1.4] - 2026-06-07
Added
- Category names in catalog sync.
ProductSerializernow sends a
category_names: string[]field alongside the existingcategory_path
(which still carries the raw Magento category IDs joined by" > ").
The API stores lowercase trimmed names in itscategory_slugscolumn
and uses them for per-row category filtering — needed for queries like
"cheapest in living" to actually narrow to the right category. Without
this field the API's category filter is a silent no-op on Magento data
because the legacysplit_part(category_path, '/', 2)derivation
expects slash-delimited names, not>-delimited IDs. Cached per
process to avoid repeat lookups across the sync batch.
[1.1.3] - 2026-05-30
Added
- PHP 8.5 support. Adobe Commerce 2.4.9 (GA 2026-05-15) officially
supports PHP 8.5 — composer.jsonrequire.phpwidened to
~8.1.0||~8.2.0||~8.3.0||~8.4.0||~8.5.0. Module code uses only
standard PHP 8.1+ syntax (typed properties, attributes, readonly,
declare(strict_types=1)) and was confirmed compatible against the
PHP 8.5 deprecation / removal list. The full Magento → PHP matrix is
now: 2.4.6 → 8.1/8.2; 2.4.7 → 8.1/8.2/8.3; 2.4.8 → 8.2/8.3/8.4;
2.4.9 → 8.4/8.5 (8.3 upgrade-only). README and MARKETPLACE.md updated.
Changed
- README PHP badge
8.1–8.4→8.1–8.5.
[1.1.2] - 2026-05-30
Added
- Always-visible IDEA89 brand strip above the General group in Stores >
Configuration > IDEA89 > AI Shopping Assistant. Renders via a Fieldset
override (Block\Adminhtml\System\Config\AboutFieldset) so there is no
collapsible header, no group label, and no static-content-deploy step
needed. Includes inline lightbulb SVG, tagline, version pill (auto-read
from PackageInfo), and trust links to Documentation, Website, Support,
and the merchant dashboard. - Pulsing emerald glow + click-through on the lightbulb (opens
https://idea89.com in a new tab). CSS-only animation, hover scales to
1.08x and speeds up the pulse.
Changed
- composer.json author email
[email protected]->[email protected]
so all merchant contact funnels through one inbox (matches SECURITY.md). - composer.json author name
4K Technologies->4K Technologies Ltd,
addedrole: Developerper Adobe Commerce Marketplace EQP guidance. - composer.json
require.phpwidened to PHP 8.1 | 8.2 | 8.3 | 8.4. Module
code is forward-compatible across the whole range; the practical limit
is whichever PHP version the host Magento install supports. - composer.json
require.magento/*moved off*to specific minor
pins matching the 2.4.6 / 2.4.7 release vectors (EQP red-flags*). - README PHP badge
8.2+->8.1-8.4; Requirements section now maps
Magento version to its PHP range.
Added (submission readiness)
MARKETPLACE.md— internal submission brief covering the portal field
map, EQP compliance status, MEQP pre-submission commands, and the
outstanding human-action checklist.- Copyright header on all 36 PHP files (4K Technologies Ltd, OSL-3.0).
Removed
- Stale screenshot drift from working tree via repo-root
*.png
.gitignorerule (not user-visible, but cleans the dev experience).
[1.0.0] - 2026-05-21
Added
- AI shopping assistant widget (floating chat, mobile-responsive)
- Full product catalogue sync with variants, attributes, and stock
- Real-time sync via observers (product save, stock update, price rule save)
- Nightly full catalogue re-sync cron
- Minute-by-minute queue drain cron
- Promotion sync (active cart price rules)
- CMS page and category content sync
- Admin configuration panel (Stores > Configuration > IDEA89)
- Test Connection button in admin
- Sync Now button in admin
- Configurable widget position (bottom-left / bottom-right)
- Configurable brand colour
- Configurable assistant name and store context
- API URL override for self-hosted deployments
- CSP whitelist for IDEA89 API domain
- Encrypted API key storage
| Version | Stability | QA Status | Compatibility | Released |
|---|---|---|---|---|
| 1.3.0 | stable | Fail | Magento 2.4.7-2.4.9 Details | 2026-09-07 17:52:30 |
| 1.2.1 | stable | Fail | Magento 2.4.7-2.4.9 Details | 2026-08-18 06:36:49 |
| 1.2.0 | stable | Fail | Magento 2.4.7-2.4.9 Details | 2026-07-02 03:38:37 |
| 1.1.5 | stable | Fail | Magento 2.4.7-2.4.9 Details | 2026-06-07 10:22:49 |
| 1.1.4 | stable | Not tested | Not yet tested Details | 2026-06-07 01:56:20 |
| 1.1.3 | stable | Not tested | Not yet tested Details | 2026-05-30 08:37:42 |
| 1.1.2 | stable | Not tested | Not yet tested Details | 2026-05-30 08:14:50 |
| 1.1.1 | stable | Not tested | Not yet tested Details | 2026-05-29 00:16:38 |
| 1.1.0 | stable | Not tested | Not yet tested Details | 2026-05-28 21:20:22 |
| 1.0.0 | stable | Not tested | Not yet tested Details | 2026-05-23 20:56:12 |
Requires 10
| Package | Constraint |
|---|---|
| magento/framework | 103.0.* |
| magento/module-catalog | 104.0.* |
| magento/module-checkout | 100.* |
| magento/module-cms | 104.* |
| magento/module-config | 101.*||102.* |
| magento/module-csp | 100.*||101.* |
| magento/module-payment | 100.* |
| magento/module-quote | 101.* |
| magento/module-store | 101.* |
| php | ~8.1.0||~8.2.0||~8.3.0||~8.4.0||~8.5.0 |
Compatibility
Each Magento release line is installed on its supported PHP versions, then the module is built (DI compilation + static-content deploy) and its unit and integration suites are run. The matrix shows the lines and PHP versions the module is confirmed to install and run on. Code-quality results further down (phpstan, phpcs, …) are reported separately and never affect compatibility.
Code Quality
Advisory checks against the module's source. Static analysis runs once across the whole module; PHPStan re-runs per Magento + PHP version because resolvable symbols differ between releases. These NEVER affect the Compatibility badge. A phpcs finding can't make a module incompatible.
Static analysis
Coding standards (phpcs), mess detection (phpmd), copy-pasted code (cpd), PHP cross-version compatibility, composer.json validity. Each runs once for the whole module.
| Tool | Status | Findings | Summary |
|---|---|---|---|
| PHPCS | Warning | 147 | 147 warnings (ruleset: Magento2), 71 auto-fixable with phpcbf |
| PHPMD | Warning | 60 | 60 rule violations (UnusedFormalParameter:17, MissingImport:11, NPathComplexity:9, CyclomaticComplexity:7, ExcessiveMethodLength:5) |
| Cpd | Warning | 7 | 7 duplicated chunks spanning 392 total lines (min-lines=5, min-tokens=70) |
| Composer validate | Info | 1 | valid; 1 advisory note (composer validate --strict) |
Tests
Unit and integration suites, run for each applicable Magento and PHP version. A test failure speaks to the module's behaviour, not its compatibility with a Magento line, so it is reported here separately and never reddens the compatibility matrix.
Unit tests
Integration tests
| Magento | PHP 8.2 | PHP 8.3 | PHP 8.4 | PHP 8.5 |
|---|---|---|---|---|
| 2.4.7 | N/A | N/A | ||
| 2.4.8 | N/A | N/A | ||
| 2.4.9 | N/A | N/A |
Security
Security checks run directly against the module: an audit of its declared dependencies for known vulnerabilities (composer audit) and a scan of its source for malware and web-shell signatures. Each runs once. A malware detection fails the version outright.
Turn an existing module into recurring revenue.
If you already maintain a Magento 2 module on GitHub or GitLab, listing it on Packagento takes about five minutes. We mirror your tags, handle distribution signing, and route paid licenses through Stripe Connect, so you can keep shipping the way you already do.