KQ-1786 · SINGING/BOWL
Singing Bowl
A brass singing bowl full of water seen from above, drawn in one WebGL2 pass: circle the pointer round the rim, or hold Space, and the angular speed of your circling feeds energy into the water, which rises into a standing wave of petals at the wall and rings running inward whose order climbs with the speed on the drift spring's time scale, cross-fading so the petals visibly multiply. Stop and the energy drains at the damping rate while the rings let go from the centre out, the last petals dying at the wall, and the rim keeps a soft travelling glint that fades half as fast; a tap on the rim, or Enter at the keyboard's mallet, sends one clean ring across the water. The water is shaded from its height field, its slope reflecting the room and its curvature throwing caustics on the brass floor.
Hold Space to rub the rim, faster the longer you hold; Enter strikes it; Left and Right move the mallet round the rim.
Coldbrook Sit
Morning sit · 10 min
Circle the rim to ring the bell. The session begins as the water settles.
still water · circle the rim, or hold Space
Install
One command — the source lands in your repo. Or copy it from the Code tab.
$ pnpm dlx shadcn@latest add @kinetiq/singing-bowl
Props
- modes
- number
- default 5
- The highest petal order rubbing can reach, 2 (four petals) to 8 (sixteen).
- damping
- number
- default 0.4
- How fast the singing dies, 0 (rings on and on) to 1 (dies at once).
- metal
- "brass" | "bronze" | "copper" | "pewter" | string
- default "brass"
- The bowl's metal: a preset, or any CSS colour.
- sensitivity
- number
- default 0.5
- How much each circle of the rim puts into the water, 0 to 1.
- rings
- number
- default 5
- How many standing rings run inward at full energy, 2 to 8.
- glint
- number
- default 0.6
- The rim's highlights and its glint, 0 (satin) to 1 (polished).
- waterColor
- string
- default a dark tint of the metal
- The colour of the bowl's floor seen through the water, any CSS colour.
- interactive
- boolean
- default true
- The pointer and touch rub and strike the rim. Keys still do.
- paused
- boolean
- default false
- Hold the water still: the pattern stays where it is.
- label
- string
- default "Singing bowl"
- The bowl's accessible name.
- sound
- boolean
- default false
- Hum while the bowl sings. Off unless asked for.
- onSingingChange
- (singing: boolean) => void
- default —
- Fires as the bowl starts and stops singing.
- onModeChange
- (petals: number) => void
- default —
- Fires as the number of petals at the rim changes while it sings.
- seed
- number
- default 2
- Seeds the brushing on the rim and the hammer marks in the floor.
- disabled
- boolean
- default false
- Nothing reaches the bowl and its button is disabled.
- dpr
- number
- default 2
- Cap on the canvas's device pixel ratio, at most 2.
- className
- string
- default "size-56"
- Sizes the bowl; it is a circle fitted to the box.
| Prop | Type | Default | Description |
|---|---|---|---|
| modes | number | 5 | The highest petal order rubbing can reach, 2 (four petals) to 8 (sixteen). |
| damping | number | 0.4 | How fast the singing dies, 0 (rings on and on) to 1 (dies at once). |
| metal | "brass" | "bronze" | "copper" | "pewter" | string | "brass" | The bowl's metal: a preset, or any CSS colour. |
| sensitivity | number | 0.5 | How much each circle of the rim puts into the water, 0 to 1. |
| rings | number | 5 | How many standing rings run inward at full energy, 2 to 8. |
| glint | number | 0.6 | The rim's highlights and its glint, 0 (satin) to 1 (polished). |
| waterColor | string | a dark tint of the metal | The colour of the bowl's floor seen through the water, any CSS colour. |
| interactive | boolean | true | The pointer and touch rub and strike the rim. Keys still do. |
| paused | boolean | false | Hold the water still: the pattern stays where it is. |
| label | string | "Singing bowl" | The bowl's accessible name. |
| sound | boolean | false | Hum while the bowl sings. Off unless asked for. |
| onSingingChange | (singing: boolean) => void | — | Fires as the bowl starts and stops singing. |
| onModeChange | (petals: number) => void | — | Fires as the number of petals at the rim changes while it sings. |
| seed | number | 2 | Seeds the brushing on the rim and the hammer marks in the floor. |
| disabled | boolean | false | Nothing reaches the bowl and its button is disabled. |
| dpr | number | 2 | Cap on the canvas's device pixel ratio, at most 2. |
| className | string | "size-56" | Sizes the bowl; it is a circle fitted to the box. |