.dev

Protocol8 min read

Message reference

Every framed message with its type id and capability.

Every framed message, with its type id and the capability it belongs to. Fields are listed in field-number order, starting at 1. Nested types such as rows and entries are defined in teho_api.proto.

C -> S messages are sent by the client and S -> C by the server. Reply and Chunk go both ways.

Core

Always available after the handshake.

TypeMessageDirection
0x01Hello{protocol, client, minecraft, platform, capabilities[]}C -> S
0x02Welcome{protocol, session, enabled[], server_name, grant, verified}S -> C
0x03HelloRequest{}S -> C
0x04Reset{}S -> C
0x05Reply{request_id, ok, error, data}Both
0x06Event{kind, target, value, request_id}C -> S
0x07Chunk{stream, index, total, data}Both
0x0DConsentResult{scope, granted, items[]}C -> S
0x0EPrivateStatus{capabilities[], error, server}C -> S

Assets

Capability asset:1.

TypeMessageDirection
0x08AssetOffer{hash, kind, size}S -> C
0x09AssetWant{hashes[]}C -> S
0x0CAssetData{hash, kind, data}S -> C

Notifications

Capability notify:1.

TypeMessageDirection
0x10Notify{id, title, body, accent, duration_ms, sound}S -> C
0x11Dismiss{id}S -> C

Waypoints

Capability waypoint:1.

TypeMessageDirection
0x20WaypointSet{id, name, x, y, z, dimension, color, focus}S -> C
0x21WaypointRemove{id}S -> C
0x22WaypointClear{}S -> C

Module rules

Capability modules:1.

TypeMessageDirection
0x30ModuleRules{disabled[], disabled_categories[], reason, competitive, allowed[]}S -> C
0x31SettingCaps{caps[]}S -> C
0x32CombatRules{legacy_swing, legacy_blockhit, no_hit_delay_visual, miss_penalty_visual, legacy_hit_color}S -> C
0x33ThirdPartyPolicy{deny[], reason, report}S -> C
0x34PolicyReport{granted, violations[]}C -> S

Staff tools

Capability staff:1.

TypeMessageDirection
0x40StaffGrant{tools[], reason, xray_blocks[], radius, storage_blocks[], entity_types[]}S -> C
0x41StaffRevoke{tools[]}S -> C
0x42StaffState{tool, active}C -> S
0x43EspStyle{entries[]}S -> C
0x44StaffSupport{tools[]}C -> S
0x45Highlight{id, kind, entity, x, y, z, x2, y2, z2, color, label, style, tracer, ttl_ms, dimension}S -> C
0x46HighlightRemove{ids[]}S -> C
0x47Trail{player, points[], color, label, ttl_ms, dimension}S -> C
0x48InspectRequest{request_id, kind, target, x, y, z}C -> S
0x49InspectCard{request_id, title, subtitle, rows[], actions[], ttl_ms, target}S -> C
0x4AActionWheel{actions[], title}S -> C
0x4BAlert{id, severity, title, body, player, x, y, z, dimension, ttl_ms}S -> C
0x4CTargetStats{player, rows[], ttl_ms}S -> C
0x4DSpectate{player, distance}S -> C
0x4EStaffAction{action, target_kind, target, x, y, z}C -> S
0x4FLagMap{cells[], dimension, ttl_ms}S -> C

HUD

Capability hud:1.

TypeMessageDirection
0x50Cooldown{id, label, duration_ms, item, asset, color}S -> C
0x51CooldownClear{}S -> C
0x52Timer{id, label, mode, millis, paused, color}S -> C
0x53TimerRemove{id}S -> C
0x54SidebarSet{title, rows[], remove[], replace, accent, footer}S -> C
0x55SidebarClear{}S -> C
0x56Bar{id, text, progress, color, style, ttl_ms, item}S -> C
0x57BarRemove{ids[]}S -> C
0x58KillFeed{killer, victim, weapon, text, color, killer_id, victim_id, ttl_ms}S -> C
0x59ScreenTint{color, vignette, fade_ms, ttl_ms, strength}S -> C
0x5ATitle{title, subtitle, animation, fade_in_ms, stay_ms, fade_out_ms, color, scale}S -> C
0x5BTntFuse{fuse_ticks}S -> C

Suspect tools

Capability suspect:1.

TypeMessageDirection
0x60FreezeScreen{on, title, body}S -> C
0x61ScreenshotRequest{request_id, reason, max_width}S -> C
0x62ScreenshotResult{request_id, granted, png, width, height}C -> S
0x63ModListRequest{request_id, reason}S -> C
0x64ModList{request_id, granted, mods[], teho_modules[]}C -> S

NPC cosmetics

Capability npc:1.

TypeMessageDirection
0x70NpcLook{npc, mode, slots[]}S -> C
0x71NpcEmote{npc, action, emote, loop}S -> C
0x72NpcClear{npcs[]}S -> C

World visuals

Capability world:1.

TypeMessageDirection
0x80Beam{id, x, y, z, entity, color, height, width, pulse, dimension, ttl_ms}S -> C
0x81Hologram{id, x, y, z, entity, lines[], item, asset, scale, background, clickable, through_walls, dimension, ttl_ms, range}S -> C
0x82Shape{id, kind, points[], radius, height, color, fill, width, through_walls, label, dimension, ttl_ms}S -> C
0x83WorldRemove{kind, ids[]}S -> C
0x84EntityStyle{entity, glow, name, scale, rainbow, hide[], ttl_ms, hide_name}S -> C
0x85EntityStyleClear{entities[]}S -> C
0x86BorderStyle{color, hide_wall, reset}S -> C
0x87FireColor{entity, color, reset}S -> C

Players & teams

Capability players:1.

TypeMessageDirection
0x90Nametag{player, above[], below[], prefix, suffix, badge, hide, badge_item}S -> C
0x91NametagClear{players[]}S -> C
0x92TabList{header[], footer[], entries[], hide_ping, replace, remove[], reset}S -> C
0x93Team{id, name, color, members[], markers, through_walls, health, compass}S -> C
0x94TeamRemove{ids[]}S -> C
0x95NickHint{nick, player}S -> C

Keybinds

Capability keybind:1.

TypeMessageDirection
0xA0Keybinds{binds[], category}S -> C
0xA1KeyPress{id, pressed, held_ms}C -> S

Camera

Capability camera:1.

TypeMessageDirection
0xB0CameraShake{intensity, duration_ms, frequency}S -> C
0xB1FovPunch{amount, duration_ms}S -> C
0xB2LookAt{x, y, z, entity, duration_ms, hold_ms}S -> C
0xB3Letterbox{on, size, fade_ms}S -> C
0xB4Cutscene{id, frames[], skippable, hide_hud, letterbox, loop, dimension}S -> C
0xB5CutsceneStop{id}S -> C
0xB6ScreenFade{color, in_ms, hold_ms, out_ms}S -> C
0xB7CutsceneEnded{id, skipped}C -> S

Audio

Capability audio:1.

TypeMessageDirection
0xC0PlaySound{id, asset, sound, x, y, z, entity, positional, volume, pitch, loop, fade_in_ms, music}S -> C
0xC1StopSound{ids[], fade_out_ms}S -> C

Social

Capability social:1.

TypeMessageDirection
0xD0Presence{game, map, state, started, party_size, party_max, joinable, clear}S -> C
0xD1InviteSheet{reason, party, address}S -> C
0xD2Transfer{host, port, token, title, reason}S -> C
0xD3ServerLinks{links[]}S -> C

Server UI

Capability ui:1.

TypeMessageDirection
0xE0UiOpen{id, surface, title, nodes[], width, closeable, anchor}S -> C
0xE1UiPatch{id, nodes[], remove[], title}S -> C
0xE2UiClose{id}S -> C
0xE3UiEvent{id, node, action, value}C -> S

Client info

Capability info:1.

TypeMessageDirection
0xF0InfoRequest{request_id, fields[], reason}S -> C
0xF1InfoReply{request_id, granted[], input, fps, frame_p50, frame_p99, render_distance, mods[], teho_modules[], locale, gui_scale, width, height, os, memory_mb}C -> S

Identity proof

Capability assert:1.

TypeMessageDirection
0x110AssertRequest{request_id, nonce}S -> C
0x111AssertResult{request_id, token, error}C -> S

Integrity proof

Capability attest:1.

TypeMessageDirection
0x118AttestRequest{request_id, nonce}S -> C
0x119AttestResult{request_id, token, error}C -> S

Resource packs

Capability pack:1.

TypeMessageDirection
0x120PackHint{url, sha1, size, required, prompt, id}S -> C
0x121PackStatus{sha1, state, error}C -> S

Highlight clips

Capability clips:1.

TypeMessageDirection
0x130ClipMark{id, title, before_ms, after_ms}S -> C
0x131ClipResult{id, saved, url, error}C -> S

Broadcast

Capability broadcast:1.

TypeMessageDirection
0x140ObserverHud{on, title, subtitle, teams[]}S -> C
0x141CameraFollow{player, mode, distance, smooth}S -> C

Statues

Capability statue:1.

TypeMessageDirection
0x170Statue{id, player, name, x, y, z, yaw, pose, scale, dimension, label, emote}S -> C
0x171StatueRemove{ids[]}S -> C

Branding

Capability branding:1.

TypeMessageDirection
0x180Branding{accent, logo, banner, background, tagline, reset}S -> C

Showcase

Capability showcase:1.

TypeMessageDirection
0x190ShowcaseOpen{title, items[], emote, focus, subtitle}S -> C