Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message
Environment

Environment Laravel Package

sebastian/environment

Runtime environment helper for PHP projects. Detects PHP/HHVM runtime specifics so you can choose safe execution paths, handle version and platform differences, and write portable code with minimal conditionals—useful in libraries and test tooling.

View on GitHub
Deep Wiki
Context7

sebastian/environment is a lightweight PHP component for detecting and describing the current runtime environment, enabling clean, maintainable code paths for different engines and versions (PHP vs. HHVM). It’s commonly used in test and tooling ecosystems where behavior must adapt to the executing platform.

Use it to centralize runtime-specific checks and generate consistent environment information without scattering conditional logic across your codebase.

  • Detect PHP/HHVM runtime characteristics reliably
  • Support version- and engine-specific execution paths
  • Provide environment details useful for debugging and reporting
  • Keep conditional logic encapsulated and reusable
  • Ideal for test suites, CI, and developer tooling
Frequently asked questions about Environment
How does sebastian/environment help with Laravel Artisan command output (colors, TTY) without hardcoding PHP_SAPI checks?
Replace manual checks like `PHP_SAPI === 'cli'` with `Runtime::isCli()` and `Host::supportsColor()`. The package auto-detects terminal capabilities, respects `FORCE_COLOR`/`NO_COLOR` env vars, and integrates seamlessly with Laravel’s Symfony Console-based output system. This ensures consistent CLI behavior across local dev, CI, and Docker environments.
Can I use sebastian/environment in Laravel 9.x with PHP 8.1? If so, what features are limited?
Yes, install `^8.0` via Composer. This version lacks `FORCE_COLOR` support (added in v9.2), but retains core features like `Runtime::isCli()`, `Host::supportsColor()`, and version detection. For Laravel 9.x, it’s ideal for TTY/color handling and PHP version checks without requiring PHP 8.2+.
Will sebastian/environment break existing PestPHP or PHPUnit tests that rely on direct TTY/stream checks?
No, it’s designed for backward compatibility. Replace `stream_isatty()` with `Host::supportsColor()` and `getenv('FORCE_COLOR')` with `Host::getEnvironmentVariable()`. The package’s API mirrors Symfony Console’s expectations, so Laravel’s test frameworks (PestPHP/PHPUnit) will work unchanged after refactoring.
How do I enforce consistent terminal colors in GitHub Actions CI for Laravel apps using sebastian/environment?
Add `FORCE_COLOR: '1'` to your workflow’s `env` section. Then use `Host::supportsColor()` in your Artisan commands or tests—it will respect the env var and ensure colored output even in non-TTY CI environments. Example: `if (Host::supportsColor()) { $this->output->setDecorated(true); }`
Is sebastian/environment safe to use in production Laravel apps, or just for CLI/dev tools?
It’s production-safe but primarily targets CLI tools (Artisan, Tinker, custom scripts). The package is lazy-loaded with zero runtime overhead, so including it in production won’t impact performance. Use it for runtime-specific logic like conditional Xdebug coverage or opcache checks in production environments.
What’s the difference between Runtime::isCli() and Host::supportsColor() in sebastian/environment?
`Runtime::isCli()` checks if the script runs in a CLI context (e.g., `php artisan`), while `Host::supportsColor()` detects if the output terminal supports colors (respecting `FORCE_COLOR`, `NO_COLOR`, or TTY capabilities). Use both together for robust CLI output: `if (Runtime::isCli() && Host::supportsColor()) { ... }`
Are there alternatives to sebastian/environment for Laravel’s runtime detection needs?
For basic checks, you could use `PHP_SAPI`, `stream_isatty()`, or `getenv()`, but these are scattered and lack features like `FORCE_COLOR` support. Symfony’s `Console/Style` or `Console/Output` classes offer similar TTY detection but require deeper integration. sebastian/environment is the most lightweight, standalone solution for Laravel’s CLI ecosystem.
How do I test that sebastian/environment’s Host::supportsColor() works correctly in Laravel Sail/Docker?
Test in a container by setting `FORCE_COLOR=1` in your `.env.testing` or Docker Compose file. Use PestPHP to assert `Host::supportsColor()` returns `true` in both TTY and non-TTY contexts. Example: `test('Host detects color support in Docker', function () { expect(Host::supportsColor())->toBeTrue(); })`
Will sebastian/environment slow down my Laravel application if included in production?
No, the package is designed for minimal overhead. It uses lazy loading and avoids autoloading unless explicitly required. Even in production, the performance impact is negligible—it’s primarily useful for conditional logic (e.g., skipping coverage in non-debug environments) rather than runtime-heavy operations.
How do I migrate from manual PHP_SAPI checks to sebastian/environment in a large Laravel codebase?
Start with a search-replace for `PHP_SAPI === 'cli'` → `Runtime::isCli()` and `stream_isatty()` → `Host::supportsColor()`. Use IDE refactoring tools to batch updates. Test CLI tools (Artisan, Tinker) thoroughly, then extend to PestPHP/PHPUnit tests. The package’s API is intuitive, so most changes are one-to-one replacements.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
milesj/emojibase
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport