# open-feature/go-sdk architecture

> Architecture diagram of the GitHub repository open-feature/go-sdk, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/open-feature/go-sdk
- Repository: https://github.com/open-feature/go-sdk

## Overview

The OpenFeature Go SDK exposes a vendor-neutral feature-flag API: applications configure a provider and evaluate typed flags through a client, receiving values and resolution details. Evaluation can use global, client, and transaction context; hooks add lifecycle behavior, while provider events support state changes and graceful shutdown. The repository also supplies multi-provider strategies, in-memory/no-op providers, isolated APIs, logging and telemetry utilities. The README documents several capability relationships; some internal wiring is not shown in the sampled excerpts, so those links are omitted or marked unverified.

Main entry points: [`openfeature/client.go`](https://github.com/open-feature/go-sdk/blob/main/openfeature/client.go) (Client), [`openfeature/multi/multiprovider.go`](https://github.com/open-feature/go-sdk/blob/main/openfeature/multi/multiprovider.go) (Multi-provider), [`openfeature/openfeature.go`](https://github.com/open-feature/go-sdk/blob/main/openfeature/openfeature.go) (API registry), [`openfeature/hooks.go`](https://github.com/open-feature/go-sdk/blob/main/openfeature/hooks.go) (Hook lifecycle)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["SDK API"]
  node_api_surface["API registry<br/>[openfeature.go]"]
  node_client["Client<br/>[client.go]"]
  node_isolated_api["Isolated API<br/>[isolated.go]"]
end

subgraph group_evaluation["Evaluation"]
  node_eval_context["Evaluation context"]
  node_resolution["Resolution details"]
  node_hooks["Hook lifecycle<br/>[hooks.go]"]
  node_eventing["Provider events<br/>[event_executor.go]"]
end

subgraph group_providers["Providers"]
  node_provider_contract["Provider contract<br/>[provider.go]"]
  node_multi_provider["Multi-provider<br/>[multiprovider.go]"]
  node_comparison["Comparison strategy"]
  node_strategies["Strategy helpers<br/>[strategies.go]"]
  node_first_match["First-match strategy"]
  node_multi_isolation["Hook isolation<br/>[isolation.go]"]
  node_memory_provider[("Memory provider")]
  node_noop_provider["No-op provider<br/>[noop_provider.go]"]
end

subgraph group_extensions["Extensions"]
  node_logging_hook["Logging hook<br/>[logging_hook.go]"]
  node_telemetry["Telemetry events<br/>[telemetry.go]"]
  node_test_provider["Test provider<br/>[testprovider.go]"]
end

node_application(("Application"))
node_flags(("Flag service"))

node_application -->|"configures"| node_api_surface
node_application -->|"creates"| node_client
node_client -->|"evaluates through"| node_provider_contract
node_provider_contract -->|"integrates with"| node_flags
node_client -->|"uses context"| node_eval_context
node_eval_context -->|"propagates transaction context"| node_client
node_client -->|"runs lifecycle"| node_hooks
node_client -.->|"returns details"| node_resolution
node_hooks -->|"invokes hook"| node_logging_hook
node_hooks -->|"supports evaluation events"| node_telemetry
node_api_surface -->|"exposes eventing"| node_eventing
node_api_surface -->|"registers providers"| node_provider_contract
node_application -->|"can configure"| node_multi_provider
node_multi_provider -.->|"selects strategy"| node_comparison
node_multi_provider -.->|"selects strategy"| node_first_match
node_multi_provider -.->|"uses helpers"| node_strategies
node_multi_provider -.->|"isolates hooks"| node_multi_isolation
node_application -.->|"can register"| node_memory_provider
node_application -->|"can register"| node_noop_provider
node_application -->|"creates independent API"| node_isolated_api
node_test_provider -->|"delegates evaluation"| node_memory_provider

click node_api_surface "https://github.com/open-feature/go-sdk/blob/main/openfeature/openfeature.go"
click node_client "https://github.com/open-feature/go-sdk/blob/main/openfeature/client.go"
click node_isolated_api "https://github.com/open-feature/go-sdk/blob/main/openfeature/isolated/isolated.go"
click node_eval_context "https://github.com/open-feature/go-sdk/blob/main/openfeature/evaluation_context.go"
click node_provider_contract "https://github.com/open-feature/go-sdk/blob/main/openfeature/provider.go"
click node_resolution "https://github.com/open-feature/go-sdk/blob/main/openfeature/resolution_error.go"
click node_hooks "https://github.com/open-feature/go-sdk/blob/main/openfeature/hooks.go"
click node_eventing "https://github.com/open-feature/go-sdk/blob/main/openfeature/event_executor.go"
click node_logging_hook "https://github.com/open-feature/go-sdk/blob/main/openfeature/hooks/logging_hook.go"
click node_telemetry "https://github.com/open-feature/go-sdk/blob/main/openfeature/telemetry/telemetry.go"
click node_multi_provider "https://github.com/open-feature/go-sdk/blob/main/openfeature/multi/multiprovider.go"
click node_comparison "https://github.com/open-feature/go-sdk/blob/main/openfeature/multi/comparison_strategy.go"
click node_strategies "https://github.com/open-feature/go-sdk/blob/main/openfeature/multi/strategies.go"
click node_first_match "https://github.com/open-feature/go-sdk/blob/main/openfeature/multi/first_match_strategy.go"
click node_multi_isolation "https://github.com/open-feature/go-sdk/blob/main/openfeature/multi/isolation.go"
click node_memory_provider "https://github.com/open-feature/go-sdk/blob/main/openfeature/memprovider/in_memory_provider.go"
click node_noop_provider "https://github.com/open-feature/go-sdk/blob/main/openfeature/noop_provider.go"
click node_test_provider "https://github.com/open-feature/go-sdk/blob/main/openfeature/testing/testprovider.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_api_surface,node_client,node_isolated_api toneBlue
class node_eval_context,node_resolution,node_hooks,node_eventing toneAmber
class node_provider_contract,node_multi_provider,node_comparison,node_strategies,node_first_match,node_multi_isolation,node_memory_provider,node_noop_provider toneMint
class node_logging_hook,node_telemetry,node_test_provider toneRose
class node_application,node_flags toneIndigo
```

## Components

### SDK API

- [API registry](https://github.com/open-feature/go-sdk/blob/main/openfeature/openfeature.go): `openfeature/openfeature.go`
- [Client](https://github.com/open-feature/go-sdk/blob/main/openfeature/client.go): `openfeature/client.go`
- [Isolated API](https://github.com/open-feature/go-sdk/blob/main/openfeature/isolated/isolated.go): `openfeature/isolated/isolated.go`

### Evaluation

- [Evaluation context](https://github.com/open-feature/go-sdk/blob/main/openfeature/evaluation_context.go): `openfeature/evaluation_context.go`
- [Resolution details](https://github.com/open-feature/go-sdk/blob/main/openfeature/resolution_error.go): `openfeature/resolution_error.go`
- [Hook lifecycle](https://github.com/open-feature/go-sdk/blob/main/openfeature/hooks.go): `openfeature/hooks.go`
- [Provider events](https://github.com/open-feature/go-sdk/blob/main/openfeature/event_executor.go): `openfeature/event_executor.go`

### Providers

- [Provider contract](https://github.com/open-feature/go-sdk/blob/main/openfeature/provider.go): `openfeature/provider.go`
- [Multi-provider](https://github.com/open-feature/go-sdk/blob/main/openfeature/multi/multiprovider.go): `openfeature/multi/multiprovider.go`
- [Comparison strategy](https://github.com/open-feature/go-sdk/blob/main/openfeature/multi/comparison_strategy.go): `openfeature/multi/comparison_strategy.go`
- [Strategy helpers](https://github.com/open-feature/go-sdk/blob/main/openfeature/multi/strategies.go): `openfeature/multi/strategies.go`
- [First-match strategy](https://github.com/open-feature/go-sdk/blob/main/openfeature/multi/first_match_strategy.go): `openfeature/multi/first_match_strategy.go`
- [Hook isolation](https://github.com/open-feature/go-sdk/blob/main/openfeature/multi/isolation.go): `openfeature/multi/isolation.go`
- [Memory provider](https://github.com/open-feature/go-sdk/blob/main/openfeature/memprovider/in_memory_provider.go): `openfeature/memprovider/in_memory_provider.go`
- [No-op provider](https://github.com/open-feature/go-sdk/blob/main/openfeature/noop_provider.go): `openfeature/noop_provider.go`

### Extensions

- [Logging hook](https://github.com/open-feature/go-sdk/blob/main/openfeature/hooks/logging_hook.go): `openfeature/hooks/logging_hook.go`
- [Telemetry events](https://github.com/open-feature/go-sdk/blob/main/openfeature/telemetry/telemetry.go): `openfeature/telemetry/telemetry.go`
- [Test provider](https://github.com/open-feature/go-sdk/blob/main/openfeature/testing/testprovider.go): `openfeature/testing/testprovider.go`

### Other components

- **Application**
- **Flag service**

## Connections

- Application → API registry: configures (evidence: `README.md`)
- Application → Client: creates (evidence: `README.md`)
- Client → Provider contract: evaluates through (evidence: `README.md`)
- Provider contract → Flag service: integrates with (evidence: `README.md`)
- Client → Evaluation context: uses context (evidence: `README.md`)
- Evaluation context → Client: propagates transaction context (evidence: `README.md`)
- Client → Hook lifecycle: runs lifecycle (evidence: `README.md`)
- Client → Resolution details: returns details
- Hook lifecycle → Logging hook: invokes hook (evidence: `openfeature/hooks/logging_hook.go`)
- Hook lifecycle → Telemetry events: supports evaluation events (evidence: `openfeature/telemetry/telemetry.go`)
- API registry → Provider events: exposes eventing (evidence: `README.md`)
- API registry → Provider contract: registers providers (evidence: `README.md`)
- Application → Multi-provider: can configure (evidence: `README.md`)
- Multi-provider → Comparison strategy: selects strategy
- Multi-provider → First-match strategy: selects strategy
- Multi-provider → Strategy helpers: uses helpers
- Multi-provider → Hook isolation: isolates hooks
- Application → Memory provider: can register
- Application → No-op provider: can register (evidence: `README.md`)
- Application → Isolated API: creates independent API (evidence: `openfeature/isolated/isolated.go`)
- Test provider → Memory provider: delegates evaluation (evidence: `openfeature/testing/testprovider.go`)
