Back to Outbreak: Soycoon City
SOURCE / PINNED RELEASE

Made of little things.

Outbreak: Soycoon City

Release
db7750b1d009…
Author-recorded commit
3ee3f5fd27a6…
License
LICENSE
Author’s source reference
nostr://npub182jczunncwe0jn6frpqwq3e0qjws7yqqnc3auccqv9nte2dnd63scjm4rf/wss%3A%2F%2Fgit.napplet.soy%2F/n-b87c04571a9

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

docs/package-surfaces.md
# Package Surfaces

## Runtime Packages

If no package exposes the named interface or wire format you need, do not add a
new private message domain in this app. Read `docs/new-nap-proposals.md` and
propose protocol-level work in `https://github.com/napplet/naps` only when the
guardrails are met.

### `@napplet/shim`

Runtime-side injected global installer. Napplet application code does not import
this package. Runtime implementers use it to install selected
`window.napplet.<domain>` objects before napplet scripts run; app authors should
consult runtime package documentation rather than copying installer code here.

### `@napplet/sdk`

Named helpers for napplet app code.

```ts
import { outbox, storage, identity, config, resource } from '@napplet/sdk';
```

Use this for app calls. It wraps runtime-injected domains at call time and
re-exports types and constants. Current package domains are `relay`, `identity`,
`storage`, `inc`, `theme`, `keys`, `media`, `notify`, `config`, `resource`,
`cvm`, `outbox`, `upload`, `intent`, `ble`, `webrtc`, `link`, `count`, `lists`,
`serial`, `common`, and `dm`. Prefer OUTBOX or a higher-level social domain for
normal Nostr work; RELAY is the low-level relay-local escape hatch.

### `@napplet/nap`

Domain-specific subpaths. Use these when you need granular imports.

```ts
import { relaySubscribe } from '@napplet/nap/relay/sdk';
import type { ResourceBytesMessage } from '@napplet/nap/resource/types';
```

Do not import from the `@napplet/nap` root. Import a domain subpath.

## Build Package

### `@napplet/vite-plugin`

Vite plugin for single-file builds and a local napplet manifest/hash workflow.

```ts
import { nip5aManifest } from '@napplet/vite-plugin';
```

Set `artifactMode: 'single-file'` for the NIP-5D artifact shape. The plugin can
write a legacy local manifest, but soyLI does not use that as its publication.
Do not set `VITE_DEV_PRIVKEY_HEX`; soyLI signs the standalone HTML-hash manifest.
Its `R` tags are derived from the explicit local `requires` option
and keep inference disabled for optional features. Config-schema metadata is
private package plumbing until a living protocol document defines that encoding.

Production relay publishing is intentionally outside this boilerplate.