IntelliToggle OpenFeature provider for Dart
The official server-side Dart provider for IntelliToggle, built on the OpenFeature Dart Server SDK.
The legacy intellitoggle_server_sdk package is deprecated. New server
integrations should use this package.
Install
dependencies:
openfeature_dart_server_sdk: ^0.0.24
openfeature_provider_intellitoggle: ^0.0.11
The provider uses an IntelliToggle OAuth client with flags:read and
flags:evaluate scopes. Keep the client secret in a runtime secret manager;
never ship it in a browser or mobile application.
Configure and evaluate
import 'dart:io';
import 'package:openfeature_provider_intellitoggle/openfeature_provider_intellitoggle.dart';
Future<void> main() async {
final provider = IntelliToggleProvider(
clientId: Platform.environment['INTELLITOGGLE_CLIENT_ID']!,
clientSecret: Platform.environment['INTELLITOGGLE_CLIENT_SECRET']!,
tenantId: Platform.environment['INTELLITOGGLE_TENANT_ID']!,
options: IntelliToggleOptions(
baseUri: Uri.parse('https://api.intellitoggle.com'),
environment: 'production',
),
);
final api = OpenFeatureAPI();
await api.setProviderAndWait(provider);
final client = api.getClient('orders-service');
final enabled = await client.getBooleanFlag(
'new-checkout',
defaultValue: false,
context: const EvaluationContext(
targetingKey: 'non-pii-subject-id',
attributes: {
'cohort': 'beta',
'device.platform': 'android',
},
),
);
print(enabled);
await OpenFeatureAPI.resetInstance();
}
The default transport uses IntelliToggle's canonical REST endpoints:
POST /api/v1/oauth/tokenPOST /api/v1/flags/{flagKey}/evaluate
Use IntelliToggleOptions.environment to supply the deployment environment
for every evaluation. An invocation context can override it by explicitly
providing environment.
Context and privacy
Evaluation attributes are sent as IntelliToggle's top-level context contract. JSON-compatible nested maps and lists are preserved, including dotted attribute names.
The provider does not require a targeting key for default flag evaluation.
When targeting is needed, use an opaque, non-PII identifier. Attributes listed
in privateAttributes are removed before the request is sent:
const EvaluationContext(
targetingKey: 'subject-7f41',
attributes: {
'plan': 'free',
'email': 'not-sent@example.com',
'privateAttributes': ['email'],
},
)
Paid entitlements, authorization, and other product policy should remain in the consuming service. A feature flag is not an authorization boundary.
Failure behavior
IntelliToggle follows OpenFeature fallback semantics:
- missing flags return the caller default with
FLAG_NOT_FOUND; - response type mismatches return the caller default with
TYPE_MISMATCH; - authentication, transport, and unexpected API failures return the caller
default with
GENERAL.
Use the OpenFeature detailed-evaluation methods when the caller needs the reason, variant, or error code.
Optional OFREP transport
Set useOfrep: true and provide ofrepBaseUri to evaluate through an
OFREP-compatible endpoint. The package also includes local OREP/OFREP helpers
for protocol testing.
final options = IntelliToggleOptions(
useOfrep: true,
ofrepBaseUri: Uri.parse('https://ofrep.example.com'),
ofrepAuthToken: Platform.environment['OFREP_AUTH_TOKEN'],
timeout: const Duration(seconds: 5),
maxRetries: 3,
cacheTtl: const Duration(minutes: 1),
);
Plain HTTP is accepted only for localhost and 127.0.0.1.
Local and fallback testing
final provider = InMemoryProvider()
..setFlag('new-checkout', true);
final api = OpenFeatureAPI();
await api.setProviderAndWait(provider);
final client = api.getClient('test-service');
final enabled = await client.getBooleanFlag(
'new-checkout',
defaultValue: false,
);
Run the package validation suite with:
dart pub get
dart analyze
dart test
dart pub publish --dry-run
Live IntelliToggle integration tests additionally require
INTELLITOGGLE_CLIENT_ID, INTELLITOGGLE_CLIENT_SECRET, and
INTELLITOGGLE_TENANT_ID. Set INTELLITOGGLE_API_URL to test a
non-production deployment.
License
BSD-3-Clause
Libraries
- hooks/intellitoggle_telemetry_hook
- openfeature_provider_intellitoggle
- Main entry point for the IntelliToggle OpenFeature provider package.
- utils/telemetry