Back to Napcraft
SOURCE / PINNED RELEASE

Made of little things.

Napcraft

Release
ee47ac6a25df…
Author-recorded commit
410dea87e109…
License
LICENSE
Author’s source reference
nostr://npub182jczunncwe0jn6frpqwq3e0qjws7yqqnc3auccqv9nte2dnd63scjm4rf/wss%3A%2F%2Fgit.napplet.soy%2F/n-52f9e22f5ce

Archive hash verified: 9e6e0cabb18d0d46…. The source-to-build association is the author’s claim; it has not been independently rebuilt.

README.md
# Napcraft

A tiny multiplayer creative island with a playful, pastel voxel world. Create an
island, browse public worlds or share a world code, and build together. Confirmed blocks live in a soyLI
backend and remain after everyone leaves. Guest friends can build; creating an
island requires the host's signed-in account consent.

- Browse public worlds on the opening screen and tap **Join**. Listed worlds remain available after everyone leaves.
- Choose **Invite → List publicly** to advertise a saved world. **Remove my listing** keeps the world and its code intact. Existing worlds stay unlisted until deliberately shared.
- Six unlimited materials, simple terrain, little cube gardeners.
- Click a block to build on its column; right-click to erase its top block. Hover or Shift-click to aim. Drag to pan, WASD/arrows to wander, Space to build, X to erase.
- On phones: tap to aim, choose a material, use the D-pad and Build/Erase buttons.
- Friends have visible gardeners and short name tags; the player count also appears on phones.

- Drag to pan and use +/− to zoom. Creative gardeners climb any height.
- Keep your world code to return later. Recent worlds are stored through optional
  host storage. Codes identify a pinned backend release and instance.
- Shared worlds are public and editable by anyone with their code. The owner can
  pause building. Practice islands are explicitly temporary.

Latest verification: [public world directory](docs/world-directory-release.md).
Earlier verification: [consent and unfinished-save recovery](docs/consent-recovery-release.md).
Previous verification: [visible friends and direct building](docs/friends-and-building.md).

## Develop

This project is already scaffolded. Use `soyli dev --no-open` and the URL it prints.
Restart it after backend edits; worlds retain the release they were created with.
Stop your preview after testing. Never replace a publishing account to fix a failure.

```sh
soyli backend init       # generate public context in a fresh checkout
soyli backend check
pnpm verify
pnpm test:conformance
soyli dev --no-open
```

The app requires `cvm` and `webrtc`. Optional `storage` remembers codes; optional
`identity` resets viewer-scoped UI. Optional OUTBOX and the host’s app-data policy
enable the public directory; code joins remain available without them. The scene and interface keep their own colors
in both host themes. There is no direct network, signing, browser persistence, or
relay access in app code. The artifact is a single self-contained HTML file.

See [the build brief](docs/napcraft-brief.md), [verification](docs/verification.md)
and the historical [soyLI publication report](docs/publication-attempt-2026-09-25.md).

## Tests and publishing

`pnpm verify` runs guidance, backend rules, edit synchronization and directory tests, TypeScript and the build.
`pnpm test:conformance` checks the built artifact in the reference sandbox.
The real-host scenarios are under `tests/`; their results and captures are ignored
under `.napplet-space/`. See verification.md for exact commands and coverage.

Run `soyli check`, the multiplayer scenarios, and fresh media captures. Commit
reviewed changes, then `soyli publish`. soyLI 0.23.4 accepts validated historical
public backend context without rewriting Git history. The worlds backend is
already active; deploy a new backend release only when its rules or schemas
change. Verify the published build with two independent players. Existing worlds
remain pinned.

The maintained napplet guidance can be installed in other projects with
`npx skills add napplet/napplet`; it is already adapted and installed here.

## Responsive shared editing

Blocks appear immediately with a pending outline and save count. New worlds save
small atomic batches; friends refresh confirmed changes through peer hints with
a polling fallback. Offline/reload recovery retains exact retry requests. Keep
your code: existing worlds stay on their original backend release.

See [measurements, correctness evidence and platform limits](docs/responsive-editing.md).
Use `pnpm test:sync`, `pnpm test:edit-latency` and `pnpm test:edit-correctness` for
regressions. The browser scenarios accept `--turn-binary /path/to/turnserver` when
a local relay is needed.

## Unfinished saves

Account consent and signing can take up to two minutes. If a reply is lost,
**Review unfinished save** retries the exact saved request while it remains valid.
Expired creation requests explain that a world may already exist. **Keep request
and continue** retains its full details before allowing practice or joining a
known world. A recovered code requires recognition; a separate world requires
explicit acknowledgement. Recovery records are never replayed automatically.
The host scopes browser storage by build: an update cannot read the previous
build's local recovery records or recent list. Keep world codes; the previous
pinned release retains its local records in the same browser/account. See the
release report for this platform migration limitation.

Run `pnpm test:consent-recovery` for delayed signing, lost creation replies and
legacy recovery coverage. See the release report for public-host coverage and
remaining provider limitations.