# `Material`

> Contract 2.0.0 · package sha256 `a857eca95b35921109faf997094bb4192f12527d9d0fcd4be7e97f06425bad6e` · generated from `configurator-runtime.d.ts` by `services/onsite-scripter/scripts/build-contract-docs.mjs`; edit the source, not this file.

Interface · `import type { Material } from '@holostep-configurators/runtime-client/contract';` · stable · since 2.0.0 · section 8. Materials and textures

A material parts wear: one [`Part.material`](Part.material.md) reads, or one [`materials.create`](Materials.create.md) makes. Its one write is [`Frame.material`](Frame.material.md), which changes every part that wears it for that frame; to change a look, wear another through a rule ([`PartWriteOptions.fadeMs`](PartWriteOptions.fadeMs.md) crossfades).

## Members

| Member | Kind | Summary |
| --- | --- | --- |
| <a id="id"></a>[`id`](Material.id.md) | property | For a worn MaterialNode: its `nodeId`. |
| <a id="spec"></a>[`spec`](Material.spec.md) | property | Intent read: the material's current values. |
| <a id="disposed"></a>[`disposed`](Material.disposed.md) | property | True once disposed. |
| <a id="dispose"></a>[`dispose`](Material.dispose.md) | method | Terminal and immediate. |

## Declaration

```ts
export interface Material<C extends object = NoCommitOptions> {
  readonly id: string;
  readonly spec: Readonly<MaterialSpec>;
  readonly disposed: boolean;
  dispose(): void;
}
```

## Generic-API test (spec 3.1)

| Rule | Result |
| --- | --- |
| 1. Neutral name | pass: `Material` names no product |
| 2. A precedent | not recorded: no ledger row (coverage.json) names this member or its owner |
| 3. Two apps, or labs | not recorded: no ledger row names this member or its owner |
| 4. The cheaper fix first | not recorded per member (Appendix B decides it per need) |
