Skip to content
Latchkey

OpenFeature PROVIDER_NOT_READY / provider not ready in CI

An OpenFeature client evaluated a flag before its provider finished initializing. OpenFeature returns the default value with reason ERROR and errorCode PROVIDER_NOT_READY. In CI this happens when evaluation races provider start-up, producing flaky results.

What this error means

Flag evaluations return the default with errorCode PROVIDER_NOT_READY, or the SDK logs that the provider is not ready. Tests depending on real flag values fail intermittently.

OpenFeature
Provider not ready: returning default value.
{ reason: 'ERROR', errorCode: 'PROVIDER_NOT_READY', value: false }

Common causes

Evaluation runs before the provider initializes

setProvider returns immediately while initialization is asynchronous; evaluating before it completes yields PROVIDER_NOT_READY.

The provider failed to initialize and stayed not ready

The underlying provider (a flag vendor SDK) could not reach its backend, so it never transitioned to READY.

How to fix it

Await setProviderAndWait before evaluating

Use the blocking form so the provider reaches READY before any flag is read.

openfeature.js
await OpenFeature.setProviderAndWait(new MyProvider());
const client = OpenFeature.getClient();
const value = await client.getBooleanValue('my-flag', false);

Handle provider events for readiness

Subscribe to the READY and ERROR events so the run does not proceed while the provider is still initializing.

openfeature.js
OpenFeature.addHandler(ProviderEvents.Ready, () => runFlagChecks());
OpenFeature.addHandler(ProviderEvents.Error, (e) => console.error(e));

How to prevent it

  • Use setProviderAndWait so providers are READY before evaluation.
  • Gate flag reads on the provider READY event in tests.
  • Use an in-memory provider in tests to make readiness deterministic.

Related guides

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →