env_builder_cli 1.1.2 copy "env_builder_cli: ^1.1.2" to clipboard
env_builder_cli: ^1.1.2 copied to clipboard

A Flutter CLI tool to automate the creation and maintenance of the env Flutter package from multiple .env files.

env_builder_cli #

pub package License: MIT Dart SDK Version

A powerful Dart CLI tool that automates the creation and maintenance of environment packages for Flutter applications. Generate type-safe environment variable access from .env files with built-in encryption support.

Features #

  • πŸš€ Automated Environment Package Generation: Automatically creates Flutter packages from .env files
  • πŸ” Built-in Encryption: AES encryption support for sensitive environment variables
  • πŸ“ Type-Safe Access: Generates Dart classes using Envied for compile-time safety
  • πŸ—οΈ Flutter Integration: Seamlessly integrates with Flutter projects and handles pubspec dependencies
  • πŸ”„ Multi-Environment Support: Handle development, staging, production, and custom environments
  • πŸ“‚ Git Integration: Automatic .gitignore updates with appropriate environment file rules
  • πŸ§ͺ Testing Support: Generates test files for environment variable validation

Installation #

Global Installation #

Install the CLI globally using pub:

dart pub global activate env_builder_cli

Or using the executable name:

dart pub global activate env_builder

Local Installation #

Add to your pubspec.yaml:

dev_dependencies:
  env_builder_cli: ^1.1.2

Usage #

Basic Usage #

Navigate to your Flutter project root and run:

# Build with all .env* files found in current directory (.env.ci, .env.custom, .env.app, etc.)
env_builder build

# Build with specific environment files
env_builder build --env-file=.env.development,.env.production,.env.staging

This will:

  1. Create a packages/env directory
  2. Copy your .env files to the env package
  3. Generate Dart classes for type-safe access
  4. Update dependencies in pubspec.yaml files
  5. Run flutter pub get automatically

Commands #

Build Command

Generates environment packages from .env files:

# Build with default configuration (auto-detects .env* files)
env_builder build

# Build with specific environment files
env_builder build --env-file=.env.dev,.env.prod

# Build with custom output directory
env_builder build --output-dir=custom_env

Planned Features:

  • --output-dir: Custom output directory (default: packages/env)
  • --no-encrypt: Skip encryption of sensitive variables
  • --verbose: Detailed output during build process
  • Complex Data Types Support: Handle JSON-like strings (e.g., APP_CONFIG={"theme":"dark","features":["chat","notifications"]})
  • --config-env-file: Specify a default configuration file for environment-specific settings

Encrypt Command

Encrypt sensitive environment files:

env_builder encrypt --password=yourSecretKey .env

Decrypt Command

Decrypt previously encrypted environment files:

env_builder decrypt --password=yourSecretKey .env.encrypted

Version Command

Displays version information:

env_builder version
# or
env_builder --version

Aliases:

  • --version, -v

Displays:

  • CLI version (from pubspec.yaml)
  • Dart SDK version
  • Tool description
  • Homepage URL

Environment File Format #

Create .env files in your project root:

# .env.development
BASE_URL=https://dev-api.example.com
API_KEY=dev_key_123
DEBUG=true

# .env.production
BASE_URL=https://api.example.com
API_KEY=prod_key_456
DEBUG=false

Generated Code #

The tool generates type-safe Dart classes:

// env.development.dart
import 'package:envied/envied.dart';

part 'env.development.g.dart';

@Envied(path: '.env.development')
abstract class EnvDevelopment {
  @EnviedField(varName: 'BASE_URL')
  static const String baseUrl = _EnvDevelopment.baseUrl;

  @EnviedField(varName: 'API_KEY', obfuscate: true)
  static final String apiKey = _EnvDevelopment.apiKey;

  @EnviedField(varName: 'DEBUG')
  static const bool debug = _EnvDevelopment.debug;
}

Flutter Integration #

In your Flutter app, use the generated environments:

import 'package:env/env.dart';

// Access environment variables
final appFlavor = AppFlavor.production();

class ApiService {
    final appBaseUrl = appFlavor.getEnv(Env.baseUrl);
    final apikey = appFlavor.getEnv(Env.apiKey);
}

Project Structure #

After running the build command, your project structure will look like:

your-flutter-project/
β”œβ”€β”€ packages/
β”‚   └── env/
β”‚       β”œβ”€β”€ .env.development
β”‚       β”œβ”€β”€ .env.production
β”‚       β”œβ”€β”€ env.development.dart
β”‚       β”œβ”€β”€ env.production.dart
β”‚       β”œβ”€β”€ env.dart (barrel export)
β”‚       β”œβ”€β”€ env.g.dart (enum definitions)
β”‚       └── pubspec.yaml
β”œβ”€β”€ .env.development
β”œβ”€β”€ .env.production
β”œβ”€β”€ pubspec.yaml (updated with env dependency)
└── lib/
    └── main.dart

Security Best Practices #

  1. Never commit .env files - Add them to .gitignore
  2. Use encryption for sensitive production variables
  3. Store secrets securely in your CI/CD platform
  4. Use different keys for different environments
  5. Rotate secrets regularly

Examples #

Check the example/ directory for a complete working example.

To run the example:

cd example
flutter pub get
# The .env file already exists
env_builder build --env-file=.env
flutter run

Contributing #

Contributions are welcome! Please see CONTRIBUTING.md for details.

License #

This project is licensed under the MIT License - see the LICENSE file for details.


Made with ❀️ for the Flutter community

3
likes
150
points
255
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter CLI tool to automate the creation and maintenance of the env Flutter package from multiple .env files.

Repository (GitHub)
View/report issues
Contributing

Documentation

API reference

License

Apache-2.0 (license)

Dependencies

args, cli_util, crypto, encrypt, path, universal_io, yaml, yaml_edit

More

Packages that depend on env_builder_cli