Claude Code Plugins

Community-maintained marketplace

Feedback

Efficient data serialization for game networking including Protobuf, FlatBuffers, and custom binary

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name data-serialization
description Efficient data serialization for game networking including Protobuf, FlatBuffers, and custom binary
sasmp_version 1.3.0
version 2.0.0
bonded_agent 02-networking-specialist
bond_type SECONDARY_BOND
parameters [object Object]
retry_config [object Object]
observability [object Object]

Data Serialization for Games

Implement efficient serialization for low-latency game networking.

Format Comparison

Format Size Speed Schema Use Case
Protobuf Small Fast Required Most games
FlatBuffers Small Fastest Required Real-time
MsgPack Small Fast Optional Flexible
JSON Large Slow None Debug
Custom Binary Smallest Fastest Custom Ultra-low latency

Protocol Buffers

syntax = "proto3";

message PlayerState {
    uint32 player_id = 1;
    float x = 2;
    float y = 3;
    float z = 4;
    uint32 health = 5;
}

message GameUpdate {
    uint64 tick = 1;
    repeated PlayerState players = 2;
}
GameUpdate update;
update.set_tick(current_tick);
auto* player = update.add_players();
player->set_player_id(1);
player->set_x(pos.x);

std::string serialized;
update.SerializeToString(&serialized);

Custom Binary Format

struct PacketHeader {
    uint16_t type;
    uint16_t length;
    uint32_t sequence;
};

struct PlayerUpdate {
    uint32_t player_id;
    float position[3];
    uint16_t angle;  // Compressed rotation
    uint8_t flags;
};

void serialize(Buffer& buf, const PlayerUpdate& p) {
    buf.write_u32(htonl(p.player_id));
    for (int i = 0; i < 3; i++)
        buf.write_float(p.position[i]);
    buf.write_u16(htons(p.angle));
    buf.write_u8(p.flags);
}

Compression Techniques

Technique Savings Complexity
Delta 50-80% Medium
Quantization 30-50% Low
LZ4 50-70% Low

Troubleshooting

Common Failure Modes

Error Root Cause Solution
Parse error Version mismatch Schema versioning
Large packets No compression Enable delta/LZ4
Slow parsing JSON in hot path Use binary format
Corruption Byte order Use htonl/ntohl

Debug Checklist

// Check serialized size
std::string data;
message.SerializeToString(&data);
std::cout << "Size: " << data.size() << " bytes\n";

// Validate roundtrip
Message parsed;
parsed.ParseFromString(data);
assert(parsed.id() == message.id());

Unit Test Template

TEST(Serialization, RoundTrip) {
    PlayerState original{1, 10.0f, 20.0f, 30.0f, 100};

    std::string data;
    original.SerializeToString(&data);

    PlayerState parsed;
    parsed.ParseFromString(data);

    EXPECT_EQ(original.player_id(), parsed.player_id());
    EXPECT_FLOAT_EQ(original.x(), parsed.x());
}

Resources

  • assets/ - Schema templates
  • references/ - Format benchmarks