OUTBOX
Implementation: supported · Proposal: in-review (status checked 2026-10-31). Routing and subscription bindings have focused tests and an integration regression for structured-clone boundaries. All capabilities remain subject to change. Maturity and opt-in policy.
Outbox-aware relay routing — getEvent / query / subscribe / publish / resolveRelays; the shell owns NIP-65 relay discovery, fallback, dedup, signature validation, signing, and fanout. This is the default event-read and publish boundary when relay selection is part of result correctness.
if (window.napplet?.outbox) {
await window.napplet.outbox.getEvent('ev1…', { author: 'ab12…' });
const { events } = await window.napplet.outbox.query(
[{ authors: ['ab12…'], kinds: [1], limit: 20 }],
{ authors: ['ab12…'], timeoutMs: 3000 },
);
const sub = window.napplet.outbox.subscribe(
[{ authors: ['ab12…'], kinds: [1], limit: 20 }],
{ authors: ['ab12…'], timeoutMs: 3000 },
);
sub.on('event', (result) => render(result.event, result.sidecar?.relayHints));
await window.napplet.outbox.publish({
kind: 1,
content: 'gm',
tags: [],
created_at: Math.floor(Date.now() / 1000),
});
}This non-normative guide defers to the living NAP-OUTBOX proposal. Feature-gate with if (window.napplet?.outbox) before use; the runtime injects only available domains. Typed helpers ship from @napplet/nap/outbox and @napplet/sdk.