v10 Release – The beauty one

Published by Christian Münch on

n98-magerun2 v10.0.0 (codename is Worms – My own hometown) is out, and it’s the release that finally cleans up some baggage we’ve been carrying for a while — while also giving the whole CLI a visible facelift. The minimum PHP requirement moves to 8.2, the deprecated install command is gone for good, and it’s replaced by a proper interactive download command for Magento, Adobe Commerce, and Mage-OS. Nearly every command now looks and feels more polished thanks to the Laravel Prompts library, table output got new formats and a cleaner layout, and the interactive mode has been fine-tuned throughout. On top of that, you get new commands for testing email deliverability, listing your API routes, generating dummy customers again, and managing websites, store groups, and store views interactively. This is a major version bump, and it acts like one — read the breaking changes before you update anything in production.

Breaking Changes

Let’s get the uncomfortable part out of the way first, since that’s what a major version is for.

  • PHP 8.2 is now the minimum requirement. If you’re still running n98-magerun2 on PHP 8.1 or older, v10.0.0 is not for you — stay on the 9.x branch until you’ve upgraded your PHP version, or update your dependencies accordingly.
  • The install command has been removed. We flagged this back in v9.5.0 with a deprecation notice, and now it’s gone. Its replacement is the new interactive download command described below — the workflow is similar, but the command name and some options have changed.

If you have scripts or CI pipelines calling n98-magerun2.phar install, this release will break them. Update those references before you roll this out.

What’s New

A Cleaner, More Beautiful CLI

Interactive command selection

This is the release where n98-magerun2 gets a proper facelift. Nearly all commands now render their interactive prompts through the Laravel Prompts library instead of Symfony’s plain question helpers — the difference in day-to-day use is bigger than a changelog line suggests. Selections, confirmations, and text inputs all get a consistent, modern look with better keyboard navigation, and the interactive mode across the board has been fine-tuned based on real usage rather than just “it technically works.”

New interactive inputs

It doesn’t stop at prompts, though. Command help output, error messages, and tables all got the same visual treatment. --help on any command is easier to read at a glance, error messages are clearer and better formatted instead of a wall of stack-trace-adjacent text, and table output got reworked styling — clearer borders, better spacing, easier to scan — plus new output formats beyond the default table view (more on that below).

Exmple of the new error output:

Example of the new table style:

The new table style

New Output Formats for Tables and Lists

Table and list commands now support a --format option, so you’re no longer stuck with the default terminal table when you need the data somewhere else:

Output Format. One of [csv,tsv,json,json_array,jsonl,yaml,markdown,xml]. Aliases: yml,md,ndjson

That’s eight formats, with a few convenient aliases:

  • csv / tsv — for spreadsheets or quick shell pipelines (awk, cut, grep)
  • json — a single JSON object, handy for consuming with jq or feeding into other tools
  • json_array — the same data as a JSON array, useful when you specifically need an array-of-objects shape
  • jsonl (alias ndjson) — newline-delimited JSON, one record per line, great for streaming into log processors or ingesting row by row
  • yaml (alias yml) — for config files or anything YAML-based downstream
  • markdown (alias md) — for dropping straight into documentation, GitHub issues, or a wiki page
  • xml — for legacy tooling or integrations that still expect XML

In practice, that means something like this:

bash

./n98-magerun2.phar routes:api:list --format=json > api-routes.json
./n98-magerun2.phar sys:store:list --format=csv > stores.csv
./n98-magerun2.phar module:list --format=markdown

The last one is a nice trick if you want to paste a module list straight into a pull request description or a status report — no manual reformatting needed.

A New Interactive Download Command

Note: This replaces the removed install command as the way to get a fresh Magento, Adobe Commerce, or Mage-OS installation onto your machine.

Instead of one command trying to do installation and download in a single, somewhat rigid flow, the new downloader focuses on getting the right source code onto disk and walks you through the available versions and editions interactively:

./n98-magerun2.phar download

Run it without arguments and you’ll be prompted for the platform (Magento Open Source, Adobe Commerce, or Mage-OS) and the version you want. If you already know what you need, you can of course skip the prompts with the appropriate options — check --help on the command for the current flag list, since this is a new command and the interface may still see small adjustments in patch releases.

New Command: sys:email:test

Ever deployed a shop and then wondered whether transactional emails actually go out? This command sends a test email through Magento’s configured mail transport so you can verify deliverability without triggering a real order or password reset:

./n98-magerun2.phar sys:email:test [email protected]

Handy for verifying SMTP configuration after a server migration or a change in your email service provider, without having to trigger an actual customer-facing event.

New Command: routes:api:list

We already had routes:list for frontend/admin routes. Now there’s a dedicated command for your REST/GraphQL API surface, listing every registered API route together with the module that owns it:

./n98-magerun2.phar routes:api:list

This is useful when you’re auditing which modules expose which endpoints — especially on projects with a lot of third-party extensions where nobody quite remembers what’s registered anymore.

New Command: customer:create:dummy

A community favorite from the original n98-magerun for Magento 1 is finally ported to n98-magerun2. Generate a batch of mock customer profiles for local development or load testing, with locale-aware fake data:

./n98-magerun2.phar customer:create:dummy 10 en_US

The first argument is the number of customers to create, the second is the locale used to generate the fake data. Great for spinning up a realistic-looking dataset without touching a production export.

Website, Store Group & Store View Management

n98-magerun2 gets a full set of new commands for managing the Magento store hierarchy — websites, store groups, and store views — directly from the CLI, with interactive prompts guiding you through the required fields instead of forcing you to remember every argument up front:

./n98-magerun2.phar sys:website:create
./n98-magerun2.phar sys:website:delete

./n98-magerun2.phar sys:store-group:create
./n98-magerun2.phar sys:store-group:delete

./n98-magerun2.phar sys:store:create
./n98-magerun2.phar sys:store:delete
CommandDescription
sys:website:createCreate a new website
sys:website:deleteDelete an existing website
sys:store-group:createCreate a new store group
sys:store-group:deleteDelete an existing store group
sys:store:createCreate a new store view
sys:store:deleteDelete an existing store view

If you’ve ever set up a multi-store environment by hand in the admin panel, this is for you — run through sys:website:create, sys:store-group:create, and sys:store:create in sequence and you have a fully wired-up new store without touching the backend UI once.

Note: This should not replaces the store setup via config.php

Improvements

  • Interactive prompts everywhere: integration:create and integration:delete, customer address creation, and admin user activation all gained interactive prompts, so you don’t have to memorize argument order for commands you run twice a year.
  • New table/list output formats: Table and list commands gained a proper --format option with support for csv, tsv, json, json_array, jsonl (alias ndjson), yaml (alias yml), markdown (alias md), and xml — no more scraping the default table output with awk when you need structured data for a script or report. See the dedicated section below for details.
  • Reworked table styling: Table output across the tool has a cleaner, more readable layout — better for scanning results quickly in a terminal.
  • Laravel Prompts everywhere: Nearly every interactive command now uses the Laravel Prompts library, giving the whole CLI a more polished, consistent look.
  • Fine-tuned interactive mode: The overall interactive experience has been optimized based on real-world use — fewer rough edges when you’re stepping through prompts.

Bug Fixes

This release also ships a batch of robustness fixes:

  • Various database query fixes for improved reliability
  • Corrected MCP proxy behavior
  • Fixed an issue with customer B2B deletion
  • Closed a plaintext password exposure issue in command output — worth updating for this alone if you’re running n98-magerun2 in shared or logged environments
  • Fixed indexer namespace handling

Full Changelog

Break

  • Raise minimum PHP requirement to 8.2 (and update dependencies)
  • Remove the deprecated install command

Add

  • Interactive download command for Magento/Adobe Commerce/Mage-OS
  • sys:email:test command to test deliverability
  • routes:api:list command to view all registered API routes and modules
  • customer:create:dummy command (ported from n98-magerun 1) to generate mock customer profiles
  • Management commands for website, store group, and store view with interactive prompts

Imp

  • Support interactive prompts for integration:create/delete, customer address, and admin user activation
  • Overhaul command output look and feel, and add table export formats

Fix

  • Various command robustness improvements (database queries, MCP proxy, customer B2B deletion, plaintext password exposure, indexer namespace)

Test

  • Improve test coverage and idempotency (bats, download, query, admin status)

Security

  • Gate pull_request_target CI behind maintainer approval

Docs

  • Update documentation for new and improved commands (website/store, db-dump, routes:api:list, email:test)

Build

  • Update actions, platform tests, and development dependencies

How to Update

As always, the easiest way to update is via the built-in self-update command:

./n98-magerun2.phar self-update

If you’re still on PHP < 8.2, hold off — install the latest 9.x release instead until your environment is ready.

Wrapping Up

v10.0.0 is the kind of release that trades a bit of short-term pain — dropping PHP 8.1, retiring install — for a cleaner foundation and some genuinely useful new commands. The interactive downloader and the store hierarchy management commands in particular should save real time on fresh setups and multi-store projects. Give it a spin, and let us know what you think — drop a comment below or open a discussion on GitHub.

A special thanks to Alexander Dite for testing this release and helping with QA — a major version bump like this needs extra eyes on it, and that help is appreciated.


0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.