nowo-tech / runtime-env-bundle
Store selected application environment variables in the database (encrypted at rest via DoctrineEncryptBundle) with an admin CRUD UI. FrankenPHP worker-safe.
Package info
github.com/nowo-tech/RuntimeEnvBundle
Type:symfony-bundle
pkg:composer/nowo-tech/runtime-env-bundle
Fund package maintenance!
Requires
- php: >=8.2 <8.6
- doctrine/doctrine-bundle: ^2.10 || ^3.0
- doctrine/orm: ^2.15 || ^3.0
- nowo-tech/doctrine-encrypt-bundle: ^2.2
- nowo-tech/ui-kit-bundle: ^1.4
- symfony/config: ^7.4 || ^8.0
- symfony/dependency-injection: ^7.4 || ^8.0
- symfony/form: ^7.4 || ^8.0
- symfony/framework-bundle: ^7.4 || ^8.0
- symfony/http-foundation: ^7.4 || ^8.0
- symfony/http-kernel: ^7.4 || ^8.0
- symfony/routing: ^7.4 || ^8.0
- symfony/security-bundle: ^7.4 || ^8.0
- symfony/security-core: ^7.4 || ^8.0
- symfony/security-csrf: ^7.4 || ^8.0
- symfony/twig-bundle: ^7.4 || ^8.0
- symfony/validator: ^7.4 || ^8.0
- symfony/yaml: ^7.4 || ^8.0
- twig/extra-bundle: ^3.12
- twig/string-extra: ^3.12
- twig/twig: ^3.12
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- nowo-tech/phpstan-frankenphp: ^1.0
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^2.0
- phpstan/phpstan-phpunit: ^2.0
- phpstan/phpstan-symfony: ^2.0
- phpunit/phpunit: ^10.0
- rector/rector: ^2.0
- vincentlanglet/twig-cs-fixer: ^4.0
Suggests
- symfony/flex: For automatic recipe installation
Provides
None
Conflicts
None
Replaces
None
README
⭐ Found this useful? Install from Packagist · Give it a star on GitHub so more developers can find it.
Database-backed application environment variables with admin CRUD. Values are encrypted at rest with nowo-tech/doctrine-encrypt-bundle. Designed for FrankenPHP worker (no $_ENV / putenv mutation; in-memory cache cleared via ResetInterface).
This bundle is FrankenPHP worker mode friendly.
Bootstrap secrets (
DATABASE_URL,APP_SECRET, encryptor key files,FRANKENPHP_MODE, …) stay in.env. This bundle is for agility on business/integration variables you want to edit without redeploy.
Features
- Doctrine entity
RuntimeEnvVariablewith#[Encrypted]value column - Admin CRUD at
/_runtime_env(REQ-UI-002:ROLE_ADMINby default) RuntimeEnvBagAPI + Twigruntime_env('KEY')— worker-safe memoization +kernel.reset- Configurable
table_prefix(defaultruntime_env→ tableruntime_env_variables) - UiKit-friendly markup (
nowo-ui-*)
Requirements
- PHP >= 8.2, < 8.6
- Symfony 7.4, 8.0, or 8.1 (see
composer.json; CI exercises 7.4, 8.0, and 8.1) - Doctrine ORM + Doctrine Bundle
nowo-tech/doctrine-encrypt-bundle(Halite recommended)- Twig 3.12+
Installation
composer require nowo-tech/runtime-env-bundle
Requires a configured DoctrineEncryptBundle profile (Halite recommended). See docs/INSTALLATION.md.
Register routes (Flex recipe copies this):
# config/routes/nowo_runtime_env.yaml nowo_runtime_env: resource: . type: nowo_runtime_env
Configuration
# config/packages/nowo_runtime_env.yaml nowo_runtime_env: enabled: true table_prefix: runtime_env panel: enabled: true path_prefix: /_runtime_env security: access_roles: [ROLE_ADMIN] allow_unauthenticated: false # never true in production
Full tree: docs/CONFIGURATION.md.
Usage
use Nowo\RuntimeEnvBundle\Service\RuntimeEnvBag; public function __construct(private RuntimeEnvBag $runtimeEnv) {} public function __invoke(): void { $token = $this->runtimeEnv->get('MY_API_TOKEN'); }
{{ runtime_env('MY_API_TOKEN') }}
See docs/USAGE.md for more examples.
Development
make setup-hooks
make up
make test
make phpstan
make cs-check
Demo: cd demo/symfony8 && make up → http://localhost:8026 — see demo/README.md.
Documentation
- Installation
- Configuration
- Usage
- Contributing
- Changelog
- Upgrading
- Release
- Security
- Engram
- Spec-driven development
- GitHub Spec Kit
- Demo with FrankenPHP (development and production)
- GitHub Actions CI requirements
- PSR evaluation (REQ-CS-007)
- Code of Conduct
Tests and coverage
- Tests: PHPUnit (PHP) under
tests/Unit/ - Coverage:
- PHP: 100%
- TS/JS: N/A
- Python: N/A
- Badge / CI: PHPUnit coverage job on PHP 8.2 + Symfony 7.4
License
MIT. See LICENSE.
Author
Nowo.tech · Héctor Franco Aceituno
