provider block that declares the source (the registry namespace and provider name) and the version. On first ubx validate, ubx fetches the provider’s schema from the Pulumi Registry, caches it locally, and uses it for type-checking. This is a one-time network request — subsequent validates use the cache and work offline. The provider schema fetch is categorically different from cloud credentials: it’s a public registry call, not a cloud API call, and it never touches your actual Datadog account.
What you’ll learn
- How to use any Pulumi Registry provider with
source = "publisher/provider" - The one-time schema auto-sync on first validate
- How third-party provider usage differs from cloud credential requirements
Why this matters
Managing Datadog monitors, Cloudflare DNS records, or GitHub repositories in the same
.iac files as your AWS infrastructure means your full platform configuration lives in one place — the same language, the same type system, the same ubx apply. No separate Terraform configs, no separate tooling.The source code
How it works
ubx detects an uncached provider schema
When
ubx validate encounters a unit "datadog_monitor" block and the Datadog provider schema isn’t cached at ~/.ubx/schemas/datadog.json, it checks the provider block for source = "pulumi/datadog" and fetches the schema from https://api.pulumi.com/registry/packages/datadog.The schema is cached locally after the first fetch
The downloaded schema is written to
~/.ubx/schemas/datadog@5.x.json. All subsequent ubx validate calls use the cache — no network request, no Datadog credentials, no Pulumi account needed. Run ubx schema sync datadog to explicitly refresh the cache.Type checking works identically to built-in providers
Once cached, the Datadog schema is used exactly like the AWS schema: unknown attributes produce warnings, missing required attributes produce errors, and attribute types are checked. The provider being third-party is invisible to the rest of the compile pipeline.
What ubx generates
Common mistakes
Run it
What you learned
Any Pulumi Registry provider works in ubx with
source = "publisher/provider" on a provider blockThe schema is auto-fetched from the Pulumi Registry on first validate and cached locally
Schema fetching is a public registry call — distinct from cloud credentials needed for apply
Next steps
Backend S3 state
Store Pulumi state in S3 with per-stack isolation
provider block reference
Full provider block syntax and all source formats
Full runnable example: github.com/ubiquex/ubx-examples/38-third-party-provider-datadog

