# Why SdfSchemaBase and SdfSchema?

**URL:** https://forum.aousd.org/t/why-sdfschemabase-and-sdfschema/3023
**Category:** USD
**Tags:** cpp
**Created:** [August 24, 2026, 8:28pm UTC](https://forum.aousd.org/t/why-sdfschemabase-and-sdfschema/3023 "2026-08-24T20:28:14Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![maddy-adams](https://avatars.discourse-cdn.com/v4/letter/m/df705f/32.png) [@maddy-adams](https://forum.aousd.org/u/maddy-adams)
#### Post date: [August 24, 2026, 8:28pm UTC](https://forum.aousd.org/t/why-sdfschemabase-and-sdfschema/3023/1 "2026-08-24T20:28:14Z")

</div>

Why are `SdfSchemaBase` and `SdfSchema` different classes? Is this just a historical artifact, or is there a reason they can’t be merged/treated as the same?

- Are there other classes in OpenUSD that derive from `SdfSchemaBase`?
- Are users expected to sometimes write custom classes that derive from `SdfSchemaBase`, e.g. while writing an `SdfFileFormat` plugin?
- Could there be multiple distinct `SdfSchemaBase` instances during program execution which aren’t the immortal `SdfSchema` instance?

---

<div class="post-metadata">

### Author: ![spiff](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.aousd.org/spiff/32/22_2.png) [@spiff](https://forum.aousd.org/u/spiff)
#### Post date: [August 25, 2026, 12:57am UTC](https://forum.aousd.org/t/why-sdfschemabase-and-sdfschema/3023/2 "2026-08-25T00:57:28Z")

</div>

> [@](#):
>
> - Are there other classes in OpenUSD that derive from `SdfSchemaBase`?

There are not. It is required for Pixar because Presto builds atop OpenUSD with its own “Sd” document model, in which all Presto/Sd layers **are** SdfLayers, but which have a SdSchema that is distinct from SdfSchema.

> [@](#):
>
> - Are users expected to sometimes write custom classes that derive from `SdfSchemaBase`, e.g. while writing an `SdfFileFormat` plugin?

We don’t expect anyone to have a need to do that, and it would create interoperability issues that we deal with in Presto only because we need to. In a future world we hope to eliminate our own need, but it’s going to be awhile.

> [@](#):
>
> - Could there be multiple distinct `SdfSchemaBase` instances during program execution which aren’t the immortal `SdfSchema` instance?

That is the case in Presto. You will also soon be seeing some of the “usdMode” checks in Pcp being replaced by checks of a layer’s schema being the SdfSchema or not, as we begin the work that will ultimately allow us to eliminate multiple Schemas.
