idea89 / magento2-assistant

idea89/magento2-assistant

AI shopping assistant for Magento 2 — answers product questions, recommends what to buy, surfaces promotions. 5-minute install.

magento2-module Compatibility: 2.4.7-2.4.9 Code Quality: Fail Tests: Fail Security: Pass OSL-3.0

Are you the maintainer of idea89?

Packagento pulls idea89's Composer packages from the public registry so buyers can find them here.

Claim the namespace to take ownership, publish new releases directly, and start charging for premium versions.

Claim this namespace →

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.

Packagist Version
Packagist Downloads
Magento 2
PHP
License

Coding Standard
CodeQL
Security Policy


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

  1. Install the module via Composer
  2. Enter your API key from the IDEA89 dashboard
  3. The widget appears on your storefront immediately
  4. 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

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 publishes window.__IDEA89_PLATFORM and
    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: ready and resize on 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
    and place. The three that change the quote, address, method and
    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_sessions accept 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
    Z form, 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 + the idea89_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/me mints 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_price and is_on_sale in catalog sync payload, computed from
    Magento's special_price / special_from_date / special_to_date.
    Enables the IDEA89 on_sale shopper intent (e.g. "anything on sale?").

[1.1.4] - 2026-06-07

Added

  • Category names in catalog sync. ProductSerializer now sends a
    category_names: string[] field alongside the existing category_path
    (which still carries the raw Magento category IDs joined by " > ").
    The API stores lowercase trimmed names in its category_slugs column
    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 legacy split_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.json require.php widened 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.48.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,
    added role: Developer per Adobe Commerce Marketplace EQP guidance.
  • composer.json require.php widened 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
    .gitignore rule (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
Versions
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.

Compatibility matrix (Magento × PHP)
Magento PHP 8.2 PHP 8.3 PHP 8.4 PHP 8.5
2.4.7 Pass Pass
2.4.8 Pass Pass
2.4.9 Pass Pass

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.

Static analysis results
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)

PHPStan

Type-checks the module's PHP against a real Magento install at the configured gate level. Re-runs per Magento and PHP version because resolvable symbols differ between releases.

PHPStan results by Magento and PHP version
Magento PHP 8.2 PHP 8.3 PHP 8.4 PHP 8.5
2.4.7 28 6
2.4.8 6 6
2.4.9 6 6

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

Unit tests results by Magento and PHP version
Magento PHP 8.2 PHP 8.3 PHP 8.4 PHP 8.5
2.4.7 1 1
2.4.8 Pass Pass
2.4.9 Pass Pass

Integration tests

Integration tests results by Magento and PHP version
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.

Security results
Tool Status Findings Summary
Composer audit Pass 0
Malware scan Pass 0
License
OSL-3.0
Homepage
https://idea89.com
Authors
Make it pay

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.