HomeGuidesAPI Reference
Submit Documentation FeedbackJoin Developer CommunityOptimizely GitHubOptimizely NuGetLog In

Initialize SDK

This topic describes how to initialize the Optimizely Feature Experimentation Go SDK in your application.

To initialize the OptimizelyClient that exposes API methods like Decide, you will need either the SDK key or a hard-coded JSON datafile.

Basic initialization with SDK Key

import optly "github.com/optimizely/go-sdk"

// Instantiates a client that syncs the datafile in the background
optlyClient, er := optly.Client("SDK_KEY_HERE")

Advanced configuration

Static client instance

If you do not want the client to periodically sync the datafile in the background, you can instantiate a static client. This is useful for using the SDK in short-lived environments, such as Lambda functions. You can use the OptimizelyFactory for these more advanced use cases:

import "github.com/optimizely/go-sdk/pkg/client"

optimizelyFactory := &client.OptimizelyFactory{
          Datafile: []byte("DATAFILE_JSON_STRING_HERE"),

// Instantiate a static client (no datafile polling)
staticOptlyClient, err := optimizelyFactory.StaticClient()

If you want the SDK to initialize and perform just a one-time remote datafile fetch you can pass in the SDK key instead and instantiate a static client:

import "github.com/optimizely/go-sdk/pkg/client"

optimizelyFactory := &client.OptimizelyFactory{
          SDKKey: "[SDK_KEY_HERE]",

// Instantiate a static client that will pull down the datafile one time
staticOptlyClient, err := optimizelyFactory.StaticClient()

Custom initialization

You can further customize the top-level components of the SDKs: Event Processor, Config Manager, Default Decide Options, and Decision Service using the OptimizelyFactory:

import (

optimizelyFactory := &client.OptimizelyFactory{
        SDKKey: "[SDK_KEY_HERE]",

datafilePollingInterval := 2 * time.Second
eventBatchSize := 20
eventQueueSize := 1500
eventFlushInterval := 10 * time.Second
defaultDecideOptions := decide.OptimizelyDecideOptions{
  IgnoreUserProfileService: true,

// Instantiate a client with custom configuration
optimizelyClient, _ := optimizelyFactory.Client(
  client.WithPollingConfigManager(datafilePollingInterval, nil),

For more details on configuring the event batching please see Event Batching. For more details on configuring default decide options, see Decide methods.

Use authenticated datafile in secure environment



Authenticated datafiles are in beta. Contact your Customer Success Manager if you are interested in becoming an early user of authenticated datafiles as part of the beta secure environment feature.

You can fetch the Optimizely Feature Experimentation datafile from an authenticated endpoint using a server-side (only) Optimizely Feature Experimentation SDK. To use an authenticated datafile, download your environment's access token from the Optimizely app at Settings>Environments. Select your secure environment, and copy the Datafile access token. The example below shows how to initialize the Optimizely client using an access token and sdk_key, enabling the client to fetch the authenticated datafile and complete initialization.

// fetch the datafile from an authenticated endpoint
sdkKey := `<YOUR_SKD_KEY>`
factory := client.OptimizelyFactory{SDKKey: sdkKey}
optimizelyClient, err := factory.Client(client.WithDatafileAccessToken(accessToken))