voo_config 1.0.0 copy "voo_config: ^1.0.0" to clipboard
voo_config: ^1.0.0 copied to clipboard

Build-time configuration code generation for Flutter. For non-sensitive values like URLs, feature flags, and API versions. NOT for secrets.

VooConfig #

pub package License: MIT

Build-time configuration code generation for Flutter. Generates type-safe Dart code from .env or .config files at compile time.

Important Security Notice #

This package is for CONFIGURATION, not secrets.

Use VooConfig For Use VooSecrets For
Base URLs API keys with write access
Feature flags Database credentials
API versions Signing keys
Debug mode toggles Payment processor keys
Analytics IDs Any sensitive credentials

Values generated by VooConfig are embedded directly in your app binary and can be extracted by anyone with access to your app. For secrets, use the voo_secrets package which fetches values from a secure backend at runtime.

Features #

  • Build-Time Generation - Configuration compiled directly into Dart code
  • Type Support - Parse values as String, int, double, or bool
  • Multi-Environment - Support for .env.development, .env.staging, .env.production
  • Type-Safe API - Generated code provides compile-time type safety
  • No Runtime Overhead - Values are constants, no file parsing at runtime

Installation #

Add to your pubspec.yaml:

dependencies:
  voo_config: ^1.0.0

dev_dependencies:
  voo_config_generator: ^1.0.0
  build_runner: ^2.4.0

Quick Start #

1. Create a configuration file #

# .env
BASE_URL=https://api.example.com
API_VERSION=2
DEBUG_MODE=true
MAX_RETRIES=3

2. Create a config class #

import 'package:voo_config/voo_config.dart';

part 'config.voo_config.g.dart';

@VooConfig()
abstract class Config {
  @ConfigField()
  static const String baseUrl = _Config.baseUrl;

  @ConfigField(type: ConfigType.int)
  static const int apiVersion = _Config.apiVersion;

  @ConfigField(type: ConfigType.bool)
  static const bool debugMode = _Config.debugMode;

  @ConfigField(type: ConfigType.int)
  static const int maxRetries = _Config.maxRetries;
}

3. Generate code #

dart run build_runner build --delete-conflicting-outputs

4. Use in your app #

import 'config.dart';

void main() {
  print('API: ${Config.baseUrl}/v${Config.apiVersion}');
  print('Debug: ${Config.debugMode}');

  runApp(MyApp());
}

API Reference #

@VooConfig #

Class annotation to enable code generation.

Parameter Type Default Description
path String .env Path to the config file
name String? null Custom name for generated class
allowOptionalFields bool false Allow nullable fields by default
useConstantCase bool false Convert camelCase to CONSTANT_CASE

@ConfigField #

Field annotation to configure individual values.

Parameter Type Default Description
name String? null Custom config var name to look up
type ConfigType string Value type (string, int, double, bool)
optional bool? null Allow null if config var is missing
defaultValue Object? null Default value for optional fields

Multi-Environment Support #

Create separate config files for each environment:

// config_development.dart
@VooConfig(path: '.env.development')
abstract class ConfigDevelopment {
  @ConfigField()
  static const String baseUrl = _ConfigDevelopment.baseUrl;
}

// config_production.dart
@VooConfig(path: '.env.production')
abstract class ConfigProduction {
  @ConfigField()
  static const String baseUrl = _ConfigProduction.baseUrl;
}

CI/CD Integration #

Since VooConfig is a build-time generator, create config files from CI secrets:

# GitHub Actions example
- name: Create config files
  run: |
    echo "BASE_URL=${{ secrets.BASE_URL }}" >> .env.production
    echo "API_VERSION=${{ secrets.API_VERSION }}" >> .env.production

- run: flutter pub get
- run: dart run build_runner build --delete-conflicting-outputs
- run: flutter build apk --release

Testing #

Run tests:

dart test

Migration from voo_env #

If you're migrating from voo_env:

  1. Replace voo_env with voo_config in dependencies
  2. Replace voo_env_generator with voo_config_generator
  3. Rename annotations:
    • @VooEnv@VooConfig
    • @EnvField@ConfigField
    • EnvTypeConfigType
  4. Remove obfuscate parameter (no longer supported)
  5. For secrets, migrate to voo_secrets package

License #

MIT License - see LICENSE file for details.


Built by VooStack #

Need help with Flutter development or secure configuration?

Contact Us

VooStack builds enterprise Flutter applications and developer tools.

0
likes
150
points
71
downloads

Publisher

verified publishervoostack.com

Weekly Downloads

Build-time configuration code generation for Flutter. For non-sensitive values like URLs, feature flags, and API versions. NOT for secrets.

Homepage
Repository (GitHub)
View/report issues

Topics

#config #configuration #code-generation #flutter

Documentation

API reference

License

MIT (license)

Dependencies

meta

More

Packages that depend on voo_config