This document defines the compatibility boundary for the Material Editor public API.
The initial API baseline was captured from upstream commit 2534d592b971b472a6bc44002ef6961ea0092e65.
The authoritative machine-readable API list is:
src/MaterialEditor.API/PublicAPI.Shipped.txt
It contains the 234 public symbols emitted by src/MaterialEditor.API/API.MaterialEditor.csproj at the baseline commit. PublicAPI.Unshipped.txt records reviewed additions that have not been included in a release yet.
Microsoft.CodeAnalysis.PublicApiAnalyzers runs when the API project is built. The build fails when a public symbol is added without being declared, when a shipped symbol is removed, or when the API files are missing or invalid.
Run the compatibility check with:
dotnet build src/MaterialEditor.API/API.MaterialEditor.csproj -c Release
The frozen surface is the MaterialEditorAPI reference assembly produced by the API project. The same shared source is compiled into the game-specific Material Editor assemblies.
The baseline currently contains these public types:
MaterialEditorAPI.MaterialAPIMaterialEditorAPI.MaterialAPI.ProjectorPropertiesMaterialEditorAPI.MaterialAPI.RendererPropertiesMaterialEditorAPI.MaterialAPI.ShaderPropertyTypeMaterialEditorAPI.CopyContainerMaterialEditorAPI.CopyContainer.MaterialColorPropertyMaterialEditorAPI.CopyContainer.MaterialFloatPropertyMaterialEditorAPI.CopyContainer.MaterialKeywordPropertyMaterialEditorAPI.CopyContainer.MaterialShaderMaterialEditorAPI.CopyContainer.MaterialTexturePropertyMaterialEditorAPI.CopyContainer.ProjectorPropertyMaterialEditorAPI.MaterialEditorPluginBaseMaterialEditorAPI.MaterialEditorPluginBase.ShaderDataMaterialEditorAPI.MaterialEditorPluginBase.ShaderPropertyDataMaterialEditorAPI.MaterialEditorUIMaterialEditorAPI.ExportMaterialEditorAPI.FloatLabelDragTrigger
Reviewed additions currently recorded in PublicAPI.Unshipped.txt include the semantic extension surface:
MaterialEditorExtensionApicapability and version queries- renderer, material, shader, and property selection events
MaterialEditorTargetContextandMaterialEditorPropertyContext- custom property descriptor providers and semantic property editor factories
MaterialEditorEditService, a stable facade over repository-backed edits- optional English property tooltip metadata and the
PropertyTooltipscapability - bounded numeric conditions and the
ConditionalPropertyVisibilitycapability - semantic Enum, Vector2/3/4, and Float-backed Toggle editor contracts with append-only capability flags
MaterialAPI.ShaderPropertyType.Vector = 4, Vector copy payloads,MaterialAPI.SetVector, and repository-backed Vector facade operations
These APIs deliberately do not expose the internal row model, row view, binder registry, or concrete Unity controls.
The exact constructors, methods, properties, fields, enum values, optional parameter defaults, return types, and accessibility are listed in PublicAPI.Shipped.txt.
Public API changes must preserve the following unless an explicitly approved breaking release says otherwise:
- Existing public types and members remain present with binary-compatible signatures.
- Existing enum member numeric values do not change.
- Existing optional parameter defaults do not change.
- Public types do not move to a different namespace or assembly.
- Public or protected members on
MaterialEditorPluginBaseandMaterialEditorUIremain available even when their implementation moves to new internal services. - New APIs are additive and are first declared in
PublicAPI.Unshipped.txt. - Public API removals require an explicitly approved breaking release.
- Registration methods document ownership and disposal behavior; changing callback order or lifetime semantics requires compatibility review.
- Capability flags and enum numeric values are append-only.
- New property editor families are added as new semantic editor types rather than by exposing internal controls.
The following implementation details are not included in the frozen API surface:
- Unity UI hierarchy names, child order, layout values, and concrete row objects.
RowModel,RowView,RowBinder, and their family-specific implementations.- Internal UI types such as
ItemInfo,ItemTemplate,ListEntry, andVirtualList. - Private and internal storage implementation details.
- Maker and Studio scene lifecycle timing beyond behavior exposed through the public API.
Game-specific implementation assemblies also expose legacy public types that are not part of the standalone MaterialEditorAPI reference assembly. They should be reviewed before changing accessibility or signatures, but they are not declared extension points by this baseline.
For an additive API change:
- Add the public type or member.
- Add the analyzer-provided signature to
PublicAPI.Unshipped.txt. - Document the intended behavior and supported games.
- Build the API project and all affected game targets.
- Move reviewed entries to
PublicAPI.Shipped.txtwhen preparing a release.
Extension API usage and behavioral semantics are documented in Extension API.md.
Do not silence compatibility diagnostics globally. Any suppression or removed API marker requires an explicit compatibility review in the pull request.