← Docs
Feature Matrix
A “does it work?” view of every Discord bot feature on GameVox. Use this to scope a migration before you flip the gateway URL. The Self-hosted column shows whether a feature works when your bot is installed on a customer's self-hosted GameVox server. See the self-hosted docs for the forwarding architecture.
| Area | Feature | Cloud | Self-hosted | Notes |
|---|---|---|---|---|
| Gateway | JSON encoding | Yes | Yes | Default; what every library uses |
| zlib-stream compression | Yes | Yes | Covered by every major library | |
| ETF encoding | No | No | Libraries fall back to JSON when encoding=etf is missing | |
| Zstandard compression | No | No | zlib-stream is the universal alternative | |
| Resume / op:6 | Yes | Yes | Resume buffer mirrored to Redis, so op:6 survives api task restarts | |
| Sharding | Yes | Yes | Standard (guild_id >> 22) % num_shards hash | |
| REST | Messages CRUD | Yes | Yes | Send, edit, delete, bulk-delete, get, pin, typing, reactions, file attachments, polls |
| Channels CRUD | Yes | Yes | Cloud: reorder, and role overwrite writes (PUT and DELETE); channel objects do not list overwrites yet. Self-hosted: reorder yes, role overwrites yes (no member overwrites), listed on channel objects | |
| Per-channel permission overwrites | Partial | Partial | Role (group) overwrites only, no member overwrites. Writing them (PUT, DELETE) works on cloud and self-hosted. Reading them (permission_overwrites on channel objects and CHANNEL_UPDATE) is self-hosted only for now; cloud channel objects do not include the field. On self-hosted an allow never grants beyond what the group itself is allowed | |
| Members / roles / bans | Yes | Yes | Full CRUD; communication_disabled_until (timeout) not supported | |
| Webhooks (channel & app) | Yes | Yes | Full CRUD + execute (embeds, attachments, multipart). On self-hosted servers the rows stay in cloud storage and executed messages are written into the self-hosted channel | |
| App-owned emojis | Portal-only | Portal-only | Managed in the developer portal; GET on bot-API works. See Emojis | |
| Audit log | Partial | Partial | Bot-relevant entries; per-channel-overwrite history not indexed | |
| Rate-limit headers | Yes | Yes | X-RateLimit-* on every response, bucket-aware | |
| Interactions | Application commands (slash, user, message) | Yes | Yes | Bulk PUT + individual CRUD. Commands are registered in the cloud for both kinds of server; invocations on self-hosted servers are routed through the cloud |
| Buttons, string selects, modals (Components v1) | Yes | Yes | Ephemeral replies too. Server channels only, not DMs. See Message components | |
| User, role, mentionable and channel selects | Partial | Partial | Accepted and stored; clients show them disabled, so they never produce an interaction | |
| Components v2 | No | No | Not supported; v2 layout components are not rendered | |
| HTTP-mode interactions (outgoing endpoint) | Partial | Partial | POSTed to your interactions_endpoint_url with an Ed25519 signature, with gateway fallback if the endpoint fails. Needs a connected gateway session, and the response body is ignored: answer through the callback endpoint. See OAuth2 | |
| Voice | UDP voice gateway | Yes | Yes | Per-region. See Voice docs |
| AEAD AES-256-GCM | Yes | Yes | Preferred | |
| AEAD XChaCha20-Poly1305 | Yes | Yes | Fallback | |
| Bot-driven voice-state modify | Yes | Partial | Both: PATCH .../voice-states/{user_id} for mute / move / disconnect. Self-hosted also takes deaf, in any combination with a move; a move fires two events instead of one | |
| Other | Server emojis (read) | Yes | Yes | List + get; create/patch/delete via portal only |
| Soundboard (read) | Yes | Yes | List + get; bot-driven playback not supported | |
| Vanity URL | Partial | No | Cloud: read + patch (Gold+ servers). Self-hosted: PATCH returns 501 | |
| Threads / forum posts | Partial | Partial | Forum posts: start one (POST /channels/{forum}/threads), read it and reply in it. Other thread endpoints (archiving, thread members, active threads) are not supported | |
| Scheduled events | Yes | Partial | CRUD and RSVP, mapped to GameVox server events. No GUILD_SCHEDULED_EVENT_* gateway events. Self-hosted: recurring events are stored, but later occurrences are not generated | |
| Stage channels, AutoMod | No | No | Intents accepted, no events | |
| Premium Apps / Entitlements | No | No | No monetization layer in v1 | |
| Portal | Teams (multi-developer ownership) | Yes | Discord parity. See Teams | |
| Application transfer to team | Yes | One-way (matches Discord) | ||
| App Testers (private-app install allowlist) | Yes | 100/app. See Teams → Testers | ||
| OAuth2 install URLs (user + server contexts) | Yes | None / GameVox-provided / Custom URL. See OAuth2 | ||
| Client secret rotation | Yes | Bcrypt-hashed; shown once on create / rotate | ||
| Bot directory listing | Yes | Admin-approved listings at gamevox.com/bots | ||
Legend
- Yes: works as on Discord, no code changes.
- Partial: wire-compatible but missing some semantics. Safe to call, may not produce events.
- No: accepted on the wire (won't 4014), but does nothing. Plan for it not being there.