---
title: Direct Provider Implementation
url: /docs/iac/guides/building-extending/providers/implementers/
---
This section covers implementing Pulumi providers directly using the generated gRPC bindings—Layer 2 in the [provider architecture](/docs/iac/guides/building-extending/providers/provider-architecture/).

## When to use direct implementation

Direct implementation gives you full control over provider behavior without SDK opinions. Choose this approach when your language lacks a higher-level SDK (such as Python or TypeScript), when you need precise control over Check/Diff/Update behavior, when you're building something unusual that doesn't fit standard patterns, or when you want to understand exactly how providers work at the protocol level.

## What you'll need

You'll need gRPC bindings for your language (generated from `provider.proto`), a hand-written schema defining your resources and their properties, and implementations of the provider interface methods.

## Trade-offs

| Aspect | Direct implementation | Higher-level SDK |
|--------|----------------------|------------------|
| Control | Full | Framework-guided |
| Boilerplate | More | Less |
| Schema | Hand-written JSON | Inferred from code |
| Learning curve | Protocol knowledge | SDK patterns |

## Guides

- [Protocol reference](/docs/iac/guides/building-extending/providers/implementers/protocol-reference/) - Complete gRPC method documentation
- [Python](/docs/iac/guides/building-extending/providers/implementers/python/) - Implement a provider in Python
- [TypeScript](/docs/iac/guides/building-extending/providers/implementers/typescript/) - Implement a provider in TypeScript

## Related resources

- [Provider architecture](/docs/iac/guides/building-extending/providers/provider-architecture/) - Understanding the layers
- [Schema reference](/docs/iac/guides/building-extending/packages/schema/) - Complete schema documentation
- [Pulumi Go Provider SDK](/docs/iac/guides/building-extending/packages/pulumi-go-provider-sdk/) - Higher-level Go SDK
