All but React Native are in beta.
All but React Native are in beta.

The Environment Inspector lets you view and validate environment config in your Flutter app — required-variable checks, type detection, per-variable status badges, and a 0–100% health score.

your environment, in 80 secondsThe film and the demo show the React Native tool, and the demo uses mock data. Use the Flutter setup and feature descriptions below for supported behavior; the demo does not establish Flutter feature parity.
This demo supplies example environment values and validation rules. In your app, pass values explicitly; Expo public variables need static references for bundler substitution.
flutter pub add buoy_envFlutter has no enumerable process.env — --dart-define values are compile-time and can't be listed at runtime. So instead of auto-discovery, you hand Buoy the map explicitly:
import 'package:buoy_env/buoy_env.dart';
registerBuoyEnv(
vars: {
'API_URL': const String.fromEnvironment('API_URL'),
'ENVIRONMENT': const String.fromEnvironment('ENVIRONMENT'),
// ...any runtime config strings
},
requiredEnvVars: [
envVar('API_URL').withType('url').build(),
RequiredEnvVar.value('ENVIRONMENT', 'production'),
envVar('FEATURE_FLAG').exists(), // existence check
],
);
import 'package:buoy_env/buoy_env.dart';
registerBuoyEnv(
vars: {
'API_URL': const String.fromEnvironment('API_URL'),
'ENVIRONMENT': const String.fromEnvironment('ENVIRONMENT'),
// ...any runtime config strings
},
requiredEnvVars: [
envVar('API_URL').withType('url').build(),
RequiredEnvVar.value('ENVIRONMENT', 'production'),
envVar('FEATURE_FLAG').exists(), // existence check
],
);
envVar BuilderThe same fluent builder API as React Native:
envVar('API_KEY')
.withType('string') // Set expected type
.withValue('sk_test_123') // Or set expected value
.withDescription('API Key') // Add documentation
.build() // Finalize config
// Shorthand for just checking existence
envVar('API_KEY').exists()
envVar('API_KEY')
.withType('string') // Set expected type
.withValue('sk_test_123') // Or set expected value
.withDescription('API Key') // Add documentation
.build() // Finalize config
// Shorthand for just checking existence
envVar('API_KEY').exists()
// 'string' | 'number' | 'boolean' | 'array' | 'object' | 'url'
// 'string' | 'number' | 'boolean' | 'array' | 'object' | 'url'
registerBuoyEnv Options| Option | Type | Meaning |
|---|---|---|
vars | Map<String, String>? | Explicit runtime values to display |
requiredEnvVars | List<RequiredEnvVar>? | Required names, types, and expected values |
Each required entry must be a RequiredEnvVar. Use envVar(name).exists() for an existence check, RequiredEnvVar.value(...) for an expected value, or the builder for type checks.
| Status | Description |
|---|---|
required_present | Required var is set and correct |
required_missing | Required var is not set |
required_wrong_value | Set but doesn't match expected value |
required_wrong_type | Set but wrong type |
optional_present | Optional var that is set |
Flutter has no enumerable process.env, and compile-time --dart-define values can't be listed at runtime — so you hand Buoy the map in registerBuoyEnv(vars: {...}). The inspector then shows the value each variable resolved to, with per-variable status badges and a 0–100% health score.
Yes — declare expectations with the envVar builder (withType, withValue, withDescription, or exists for a plain existence check). Supported types are string, number, boolean, array, object, and url, and anything missing or wrong is flagged.