On Sun, 24 May 2026, Pratik Bhujel wrote:
> The goal is to expose a small cross-platform CLI terminal layer for
> the pieces that are currently awkward to normalize in userland,
> especially on Windows:
>
> - checking whether stdin/stdout/stderr are TTYs
> - reading terminal size
> - enabling/restoring raw mode safely
> - reading a single key with normalized names
> - writing directly to stdout/stderr
I think that this is something useful to have.
> The extension is still alpha, and I am not proposing it for core right
> now. I mainly want feedback on whether this API shape makes sense from
> a PHP CLI/runtime point of view, and whether this is better kept as
> PECL/ecosystem work first.
I have had a look at the API, and from my point of view, I think I would
like to see, with in mind a possible introduction into PHP core:
- All functions to be part of a Terminal\Terminal class — we have
guidelines for this in place: https://github.com/php/policies/blob/main/coding-standards-and-naming.rst#bundled-extensions
- The getBackend() method should return an enum, as there are
(currently) only two possible values: windows, and posix.
- Reading a key returns either a string containing a character, or a
sequence of characters describing an action (up, down, etc). I think,
because both of these are strings, this is awkward. Perhaps it would
be better for actual characters to return strings, and again, the
special key-presses to be case of an Enum.
In addition, would it return Unicode graphemes (think emojis), or just
code points?
- The stream names (STDOUT, STDIN, and STDERR) again should probably an
Enum.
cheers,
Derick
--
https://derickrethans.nl | https://xdebug.org | https://xdebug.cloud
Author of Xdebug. Like it? Consider supporting me: https://xdebug.org/support
mastodon: @derickr@phpc.social @xdebug@phpc.social