---
title: Registry Data
description: "Configuration 0x07, server → client."
---

`config` · `0x07` · **clientbound** (server → client)

Sends the contents of one dynamic registry (dimension types, biomes, damage types, chat types, wolf variants, and so on) as a list of ids with optional NBT entries. One packet is sent per registry, after `SelectKnownPacks`. Entries without data must be known to the client from a selected pack.

Sent by the server, read by the client. Listen for it with `client.on("RegistryData", (data) => …)` on the receiving side.

## Fields

| Field | Type | Notes |
|---|---|---|
| `registryId` | Identifier |  |
| `entries` | Array | Shape: `Array<{ entryId: string; data?: unknown }>`. |

## Send it

```ts
// Server side with autoInit: false. One packet per registry.
await client.sendPacket("RegistryData", {
  registryId: "minecraft:dimension_type",
  entries: [
    { entryId: "minecraft:overworld", data: { /* dimension type NBT */ } },
    { entryId: "minecraft:the_nether", data: null }, // null: client uses its own copy
  ],
});
```

`data` is optional NBT for each entry; `null` means the client already has the entry from a known pack. The vanilla client needs every synchronised registry (`dimension_type`, `worldgen/biome`, `chat_type`, `damage_type`, `wolf_variant`, and so on) before `FinishConfiguration`. With `autoInit: true` the server sends the full vanilla set, so most servers never build this by hand.

Field aliases listed under Notes are accepted as alternative keys when writing.

Source: [`src/Core/Versions/776/Packets/config/clientbound/RegistryData.ts`](https://github.com/GDLev/mc-protocol/blob/master/src/Core/Versions/776/Packets/config/clientbound/RegistryData.ts)
