zetacomponents/console-tools
A PHP library from Apache Zeta Components for building command-line applications, with argument parsing, console input/output, progress bars, tables, menus, dialogs, and reusable components for interactive terminal tools.
Architecture fit. Poor-to-neutral for a greenfield Laravel codebase. Zeta Components ConsoleTools (ezcConsoleInput, ezcConsoleOutput, ezcConsoleTable, ezcConsoleProgressbar, dialogs, status bars) predates and duplicates the capabilities Laravel already ships: Artisan on top of Symfony Console, Laravel Prompts for interactive input, and Termwind for styled output. Adopting it introduces a second, parallel CLI abstraction with no service-provider integration, no facades, no container awareness, and no Artisan command lifecycle hooks.
Integration feasibility. Technically possible, strategically weak:
ezc* names, not PSR-4. Composer integration relies on classmap autoloading; this degrades IDE navigation, PHPStan/Psalm coverage, and Laravel's own autoload optimizations.InputOption/InputArgument handles less ergonomically) and the table/progress formatting for scripts run outside Artisan.Technical risk. High:
NOASSERTION means automated tooling could not classify the license file. Upstream intent is Apache-2.0, but shipping an unverified dependency into a commercial product is a legal-review blocker, not a footnote.ezcBase autoload mechanism alongside Composer; double-loading and class-resolution conflicts with other eZ/Zeta-derived packages are a real, if narrow, failure mode.Key questions.
NOASSERTION license file against Apache-2.0 terms?Stack fit. Laravel's CLI surface is Symfony Console end-to-end. ConsoleTools does not implement Symfony\Component\Console\Input\InputInterface or OutputInterface, so it cannot be dropped in as a decorator. It can only be used as a sibling library invoked from inside a command's handle() method — an awkward seam that splits output formatting and input parsing across two conventions in the same process.
Migration path. Treat this as a legacy-adapter exercise, not a dependency addition:
CliTableRenderer, CliArgvParser) with a Symfony Console implementation as the default and the Zeta implementation as an opt-in binding. No ezc* class should appear outside the adapter.composer.json with proper PSR-4 or classmap autoloading and a clear license file.Compatibility. Verify against the application's PHP matrix before anything else; expect deprecation noise on 8.2+ and possible hard failures on 8.3/8.4. Confirm no namespace collisions with zetacomponents/* packages pulled transitively by legacy dependencies.
Sequencing. Legal clearance → PHP-version spike → gap analysis vs. Symfony Console/Prompts → adapter + fork (only if the gap is real) → single-command pilot → broad rollout. Do not sequence this in parallel with a Laravel major-version upgrade.
Maintenance. This is a fork-maintenance commitment disguised as a Composer dependency. Budget roughly 2–4 engineer-days per year for PHP-version patches alone, plus unbounded effort if a security issue lands upstream (there is no upstream to ship a fix). Every future PHP upgrade becomes a two-part upgrade: framework plus vendored CLI library.
Support. No vendor, no active maintainer, no issue-triage SLA. Internal knowledge will be thin because the library's idioms differ from everything else in the codebase; expect tribal knowledge concentrated in one engineer, which is a bus-factor risk.
Scaling. The library is purely presentation-layer and process-local — argument parsing and stdout formatting. It has no bearing on request throughput, queue throughput, or horizontal scaling. The only scaling concern is operational: interactive dialogs and status bars assume a TTY and degrade badly in CI, Docker, and log-aggregation contexts where output is piped. Any command using ezcConsoleOutput colour/format codes needs explicit --no-interaction and NO_COLOR handling that Artisan provides for free.
Failure modes.
composer dump-autoload -o / classmap-authoritative deployments.ezcConsoleQuestionDialog calls hanging unattended cron/queue-driven commands.STDIN handling, Windows terminal support).Ramp-up. Low for a developer writing a throwaway script; moderate-to-high for the team that inherits it, because the API is unfamiliar, undocumented in a modern context, and unsupported by static analysis. Realistic ramp-up is 1–2 days for the adopting engineer plus a written internal runbook — a cost that likely exceeds rewriting the needed feature on Laravel Prompts.
Recommendation. Do not adopt as a standing dependency. The realistic TPM leverage is (a) as a scoped reference for argument-parsing semantics during a legacy eZ/Zeta migration, or (b) as a short-lived, isolated, vendored fork behind an adapter with a dated sunset. If the requirement is "nicer CLI tables and progress output in Laravel," Laravel Prompts and Termwind already solve it with active maintenance and a clear license.
How can I help you explore Laravel packages today?