# Material 3 Expressive default spatial: stiffness 380, damping 31.19 spring

> Material 3 Expressive default spatial as a CSS linear() spring: stiffness 380, damping 31.19, settles in 0.435 s. Copy the CSS and the Web Animations line.

Canonical: https://vawe.dev/springs/material-expressive-default-spatial
Last updated: 2026-11-04

Stiffness 380, damping 31.19 and mass 1 give a damping ratio of 0.8, so the spring is underdamped. It settles to within 0.1% in 0.435 s. It passes the end value by up to 1.5% at 0.269 s and crosses it 1 time.

Material 3 documents the default spatial spec for animations that may change the shape or bounds of a component.

| Measure | Value |
| --- | --- |
| Stiffness | 380 |
| Damping | 31.19 |
| Mass | 1 |
| Damping ratio | 0.8 (underdamped) |
| Settle time | 0.435 s |
| Overshoot | 1.5% |
| Crosses the end value | 1 |
| 50% of travel at | 0.078 s |
| 90% of travel at | 0.153 s |

## CSS linear()

```css
transition: translate 435ms linear(0, 0.0053, 0.0201, 0.0426, 0.0716, 0.1056, 0.1435, 0.1844, 0.2273, 0.2714, 0.3163, 0.3612, 0.4056, 0.4493, 0.4919, 0.533, 0.5726, 0.6104, 0.6463, 0.6803, 0.7123, 0.7422, 0.7702, 0.7961, 0.8201, 0.8423, 0.8626, 0.8811, 0.898, 0.9133, 0.9271, 0.9395, 0.9506, 0.9605, 0.9693, 0.977, 0.9837, 0.9895, 0.9946, 0.9989, 1.0026, 1.0056, 1.0081, 1.0102, 1.0118, 1.0131, 1.014, 1.0146, 1.015, 1.0151, 1.0151, 1.015, 1.0147, 1.0143, 1.0138, 1.0132, 1.0126, 1.012, 1.0113, 1.0106, 1.01, 1.0093, 1.0086, 1.008, 1.0073, 1.0067, 1.0061, 1.0056, 1.005, 1.0046, 1.0041, 1.0037, 1.0032, 1.0029, 1.0025, 1.0022, 1.0019, 1.0016, 1.0014, 1.0012, 1);
```

## Web Animations

```js
el.animate({ translate: ['0 0', '240px 0'] }, { duration: 435, easing: 'linear(0, 0.0053, 0.0201, 0.0426, 0.0716, 0.1056, 0.1435, 0.1844, 0.2273, 0.2714, 0.3163, 0.3612, 0.4056, 0.4493, 0.4919, 0.533, 0.5726, 0.6104, 0.6463, 0.6803, 0.7123, 0.7422, 0.7702, 0.7961, 0.8201, 0.8423, 0.8626, 0.8811, 0.898, 0.9133, 0.9271, 0.9395, 0.9506, 0.9605, 0.9693, 0.977, 0.9837, 0.9895, 0.9946, 0.9989, 1.0026, 1.0056, 1.0081, 1.0102, 1.0118, 1.0131, 1.014, 1.0146, 1.015, 1.0151, 1.0151, 1.015, 1.0147, 1.0143, 1.0138, 1.0132, 1.0126, 1.012, 1.0113, 1.0106, 1.01, 1.0093, 1.0086, 1.008, 1.0073, 1.0067, 1.0061, 1.0056, 1.005, 1.0046, 1.0041, 1.0037, 1.0032, 1.0029, 1.0025, 1.0022, 1.0019, 1.0016, 1.0014, 1.0012, 1)', fill: 'both' });
```

## In a vawe page

```js
import { spring, springDuration, springLinear } from '../../core/motion/springs.js';

const k = 380, d = 31.19;

// per-frame code (window.seek, vawe.onFrame): t is seconds since the move starts
const x = 240 * spring(t, k, d);

// CSS and Web Animations: 435 ms, the linear() string above
el.animate(
  { translate: ['0 0', '240px 0'] },
  { duration: springDuration(k, d) * 1000, easing: springLinear(k, d), fill: 'both' },
);
```

## Source of the numbers

damping ratio 0.8, stiffness 380 (MotionScheme.expressive().defaultSpatialSpec()). androidx main at 9adbcd8 (compose material3 1.6.0-alpha01), ExpressiveMotionTokens.SpringDefaultSpatialDamping (0.8) and SpringDefaultSpatialStiffness (380) (https://github.com/androidx/androidx/blob/androidx-main/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ExpressiveMotionTokens.kt). Conversion: Stiffness is used as it is with mass 1 (SpringSimulation takes the natural frequency as sqrt(stiffness)). damping = 2 x dampingRatio x sqrt(stiffness), the same c = 2 x naturalFreq x dampingRatio that SpringSimulation.getAcceleration uses.

## Related

- [vawe snappy](https://vawe.dev/springs/vawe-snappy)
- [Compose NoBouncy with StiffnessMediumLow](https://vawe.dev/springs/compose-no-bouncy-medium-low)
- [react-spring stiff](https://vawe.dev/springs/react-spring-stiff)
- [Material 3 Standard default spatial](https://vawe.dev/springs/material-standard-default-spatial)
- [All spring presets](https://vawe.dev/springs)
