SOURCE / PINNED RELEASE
Made of little things.
Safe Sand · Material studies
- Release
- 9101a9cd9fb4…
- Author-recorded commit
- 75d98e1b8edb…
- License
- LICENSE
- Author’s source reference
- nostr://npub182jczunncwe0jn6frpqwq3e0qjws7yqqnc3auccqv9nte2dnd63scjm4rf/wss%3A%2F%2Fgit.napplet.soy%2F/n-7682e55a791
Archive hash verified: 6c8ddabeb31100e1…. The source-to-build association is the author’s claim; it has not been independently rebuilt.
# Safe Sand · Material studies
A napplet adaptation of [av/safe-sand](https://github.com/av/safe-sand),
with the original WebGL2 grain simulation and six additional materials.
Drag to sculpt, or choose Pour to add a continuous stream. View offers a bounded
±35° orbit, an angled preset and an overhead reset. This is a height-field grain
simulation with height-aware rendering, not a fully volumetric 3D world.
Tools include push, a five-tooth rake, erase, magnetic attraction/repulsion for
iron, one-stroke undo, half/quarter speed and single-step while paused. The pour
brush has adjustable flow, width and drop height. Each tray uses one substance;
material selection and Refill replace its contents. Continuous pouring adds to
it, recycling the oldest particle slots when the fixed GPU pool fills.
Focus the tray: 1–7 select tools, F pours, V toggles the angled view, U/Ctrl+Z
undoes, P pauses, R refills, arrows/WASD tilt and Space shakes. The on-screen
controls provide the same operations on touch screens. Sound is opt-in when the
host supports coordinated audio. Resizing preserves the grains.
| Material | Character |
| --- | --- |
| River, beach, desert, volcanic, coral | Original grain mixtures and friction |
| Powder snow | Soft, cohesive, slow ridges |
| Glass beads | Rounded, low friction, bouncy edges |
| Iron filings | Metallic needles attracted by the magnet tool |
| Prism glitter | Flat, reflective colored flakes |
| Rock salt | Coarse angular pink crystals |
| Kinetic sand | High friction and cohesion for sculpted channels |
Materials are playful granular approximations, not fluid/chemical simulations.
Phone motion sensors are replaced by the on-screen tilt/shake controls inside
the sandbox. Multi-touch plowing, keyboard input and touch controls are supported.
The minimum interactive frame is 280×240; smaller frames show a resize notice.
Reduced-motion users start with settled grains and a paused simulation.
## Run and verify
Read [docs/napplet-space.md](docs/napplet-space.md) for the installed soyLI tooling.
Do not scaffold or reinstall the workspace. Run `soyli dev`, use its printed
hosted URL and stop it with Ctrl+C when finished.
```sh
pnpm verify
pnpm test:conformance
soyli check
```
`verify` runs guidance, setup validation, TypeScript, single-file build and real Chromium GPU/interaction checks. The GPU tests reuse the installed
conformance runner's Playwright dependency. `SAND_CHROMIUM` can select an existing
browser executable when needed. The output is the self-contained `dist/index.html`.
The napplet does not fetch code or assets at runtime.
Optional SDK storage saves material, surface, brush width, amount, camera, tool,
flow and time settings. Optional media coordinates synthesized sound with the host;
optional identity changes retire its audio session. Individual particle
positions are session-only. No domain is required; unavailable or denied storage
leaves the simulation usable. All colors belong to the app, independent of the
host theme. There is no signing, relay use, backend or network resource dependency.
See [the build brief](docs/BUILD-BRIEF.md), [verification evidence](docs/VERIFICATION.md)
and [capture recipe](docs/PROMOTION.md).
## Provenance
The original GPU core is credited in [THIRD_PARTY.md](THIRD_PARTY.md), including
its exact source revision and changed modules. The inspected upstream repository
has no license declaration. This adaptation is marked UNLICENSED; the starter's MIT license does not license
the imported simulation. No upstream redistribution license is asserted.
