Recipes

What you can build on GozWire

GozWire supplies membership, messages, threads, reactions, structured mentions, private aliases, blocks, media, and moderation. Discovery feeds, votes, ranking, account authentication, and product UI remain host application concerns. These recipes match the public engine API.

direct

One-to-one messaging

createDirect is idempotent for a pair. Direct chats do not accept a retention policy write. Senders can use persistent, after-duration, or after-read when the type policy allows it. See conversations and messages.

group

Private groups

createGroup assigns owner to the creator. Additional users are members unless you add them as admin or moderator. Only owners and admins can add participants. Direct conversations cannot add participants. See groups.

channel

Slack-style or Discord-style channels

createChannel uses the same membership model. Access is membership-based. Workspace directories and channel browsers belong in your application. Default retention is persistent only until staff expand policy. See community.

forum

Reddit-style topics with nested comments

createForum plus messages.history with rootsOnly lists posts. messages.thread pages a reply tree. Upvotes, ranking, and subreddit discovery are not engine features. See channels, forums, and threads.

media

Images, files, audio, and video

Clients upload directly to S3-compatible storage after media.createUpload. messages.send stores object keys, not bytes. Audio and video skip the moderation pipeline. SVG is not allowed. See storage.

mentions

Conversation-scoped mentions

Mentions are identity IDs in metadata.mentions. Body text is never parsed. Autocomplete is conversations.membersForMention for the current room. Unknown, self, duplicate, blocked, and over-cap IDs are dropped. Edits never enqueue push. See conversations and messages.

aliases

Private display labels

identities.aliases are owner-only. The owner sees them on participants and mention members. Events, push, and identities.list stay canonical. See conversations and messages.

blocks

Bilateral blocks

Either direction suppresses new DMs, invites, mention targeting, and push both ways. Shared-room ordinary messages and thread replies stay allowed. Errors match a missing user. See conversations and messages.

moderation

Held text and images

Send still commits in PostgreSQL first. Text and images can be held until the sidecar returns scores. Named presets (default lenient text, strict image) and the resolved maps decide allow, review, or block. See moderation.

push

Wake the client when the socket is gone

Optional Web Push, FCM HTTP v1, and APNs HTTP/2. Default push.enabled is false. A provider 2xx is acceptance, not device display. Missed events recover with messages.sync. See push.

retention

Disappearing messages

Expiration is a field on every message: persistent, after_duration, or after_read. Channel and forum default to persistent only. Integrators own who may change modes. See retention.