Wiki 9Minecraft Wiki 9Minecraft

Client Biomes (Resource Pack Biome Visuals)

Configure sky, water, fog, and foliage colors for custom and vanilla biomes in your resource pack.

6Sections
2Code examples
3Known errors

Client biome files define the visual and audio atmosphere of a biome on the resource pack side. You use them when you want to change sky colors, water tints, fog identifiers, or ambient sounds for either a custom behavior pack biome or an existing vanilla biome. Unlike legacy biome client definitions that placed every biome inside one giant file, the modern client biome system splits each biome into its own modular file inside the resource pack.

How Client Biomes Work

In Minecraft Bedrock, biome definitions are split between the behavior pack and the resource pack. The behavior pack controls where a biome generates, its temperature, its surface blocks, and what tags it has. The resource pack controls what the player actually sees and hears while standing inside that biome.

Historically, resource packs used a single file at RP/biomes_client.json to assign water and fog settings. Because only one pack could win when modifying that single file, combining multiple world-gen add-ons often broke biome visuals. The modern client biome architecture solves this by placing individual JSON files inside the RP/biomes/ directory, matching the structure used by blocks, items, and entities.

Every file in RP/biomes/ targets one biome by its identifier. If you create a custom biome in your behavior pack with the identifier wiki:crystal_caves, you give it visuals by creating a matching client biome file with the exact same identifier. You can also override vanilla biomes by using their vanilla identifier, such as minecraft:plains.

File Location and Basic Structure

Client biome files live inside the RP/biomes/ folder of your resource pack. The file name itself does not technically need to match the biome identifier, though naming RP/biomes/crystal_caves.client_biome.json after your biome keeps large packs organized and prevents confusion between behavior and resource files.

The root object requires a format_version and a minecraft:client_biome wrapper containing a description block and a components block. The identifier inside description must match the server-side biome identifier you want to style. Note that overriding a vanilla biome requires the identifier without the minecraft: namespace prefix in some older schemas, while modern schemas expect the full namespaced string.

RP/biomes/crystal_caves.client_biome.json
{
  "format_version": "1.21.40",
  "minecraft:client_biome": {
    "description": {
      "identifier": "wiki:crystal_caves"
    },
    "components": {
      "minecraft:sky_color": {
        "sky_color": "#4a3b7c"
      },
      "minecraft:fog_appearance": {
        "fog_identifier": "minecraft:fog_hell"
      },
      "minecraft:water_appearance": {
        "surface_color": "#28d7b5",
        "surface_opacity": 0.65
      },
      "minecraft:foliage_appearance": {
        "color": "#39a88e"
      },
      "minecraft:grass_appearance": {
        "color": "#2e8b75"
      }
    }
  }
}

Core Visual and Audio Components

All visual customization happens inside the components object. Each aspect of the biome's atmosphere is broken into a distinct component. Color values across these components are typically written as six-character hex strings prefixed with a hash symbol, such as #78a7ff.

When you omit a component from your client biome definition, the game falls back to hardcoded defaults or colormap sampling based on the behavior pack biome's temperature and downfall values. For example, if you leave out grass and foliage appearance components, the engine reads the grass.png and foliage.png colormaps in RP/textures/colormap/ using the biome's climate parameters.

ComponentWhat it doesNotes
minecraft:sky_colorSets the RGB hex color of the upper sky dome when standing in this biome.Takes a sky_color string property.
minecraft:fog_appearanceLinks the biome to a fog definition file from RP/fogs/.Takes a fog_identifier string matching a vanilla or custom fog ID.
minecraft:water_appearanceControls the tint and transparency of water blocks.Supports surface_color (hex string) and surface_opacity (0.0 to 1.0 float).
minecraft:foliage_appearanceOverrides the leaf color for oak, jungle, acacia, and mangrove leaves.Can take a direct hex color or a color_map reference.
minecraft:grass_appearanceOverrides the tint applied to grass blocks, short grass, and ferns.Can take a direct hex color or a color_map reference such as swamp or dark_forest.
minecraft:atmosphere_identifierLinks the biome to deferred rendering atmospheric settings.Only visible when Deferred Technical Preview graphics are enabled.
minecraft:ambient_soundsAssigns background audio loops, mood sounds, and random sound additions.References sound events defined in sound_definitions.json.

Grass, Foliage, and Water Blending

As players walk across biome borders, Minecraft smoothly interpolates sky, water, grass, and foliage colors across several blocks so transitions do not look like harsh grid lines. Because of this biome blending, testing a custom client biome inside a very small biome patch can produce muddy or diluted colors mixed with the surrounding biome.

For grass and foliage, you have two choices: pass a static hex string to lock the biome to one exact shade, or specify a colormap palette preset where supported by the schema (such as swamp noise coloring). Note that birch and spruce leaves have hardcoded tint behavior in the base game and ignore the biome's foliage appearance component unless you also modify block tinting or textures directly.

Connecting Fog and Ambient Audio

The minecraft:fog_appearance component does not define fog distances directly inside the client biome file. Instead, it points to a fog definition by identifier via fog_identifier. That identifier can be a built-in vanilla fog like minecraft:fog_the_end or a custom fog file you placed inside RP/fogs/. The fog file then handles near and far distances, water fog density, and fog color.

Similarly, minecraft:ambient_sounds points to sound event names rather than raw .ogg file paths. It accepts keys for addition, loop, and mood sounds—matching how Nether biomes play continuous background wind along with occasional eerie sound effects. Any custom sound identifier used here must first be registered inside RP/sounds/sound_definitions.json.

RP/biomes/haunted_mire.client_biome.json
{
  "format_version": "1.21.40",
  "minecraft:client_biome": {
    "description": {
      "identifier": "wiki:haunted_mire"
    },
    "components": {
      "minecraft:fog_appearance": {
        "fog_identifier": "wiki:fog_haunted_mire"
      },
      "minecraft:water_appearance": {
        "surface_color": "#3a4228"
      },
      "minecraft:ambient_sounds": {
        "loop": "ambient.soulsand_valley.loop",
        "mood": "ambient.soulsand_valley.mood"
      }
    }
  }
}

Migrating from Legacy biomes_client.json

If you are maintaining an older resource pack that still uses the single RP/biomes_client.json file, you can convert each entry under the biomes object into its own file in RP/biomes/. In the old file, water_surface_color and water_surface_transparency sat together with fog_identifier in a flat object.

In the individual RP/biomes/ format, those properties move into minecraft:water_appearance (as surface_color and surface_opacity) and minecraft:fog_appearance (as fog_identifier). If both a legacy RP/biomes_client.json entry and a modern RP/biomes/ file exist for the same biome, the game's behavior depends on the pack format version, so avoid defining the same biome in both places within the same resource pack.

Which versions this applies to

Individual client biome files in RP/biomes/ using the minecraft:client_biome schema were introduced around Bedrock 1.21.20–1.21.40 as part of the data-driven biomes update. Applying client biomes to vanilla biomes works in stable releases, while pairing them with custom behavior pack biomes requires the Custom Biomes experimental toggle on the world in versions where server-side custom biomes remain experimental.

When it does not work

What you seeWhyThe fix
Content Log shows: [Biomes][error] Failed to parse client biome file or unknown component error.The format_version at the top of the JSON file is older than the version that introduced a component you used, or a component name is misspelled.Set format_version to at least "1.21.40" and verify that every key inside components begins with the "minecraft:" namespace.
Custom biome generates in the world, but sky, water, and grass colors look exactly like standard Plains.The identifier in the resource pack's minecraft:client_biome description does not exactly match the identifier in the behavior pack's minecraft:biome file, or the resource pack is not active on the world.Check both the BP/biomes/ file and RP/biomes/ file and ensure both description.identifier strings are identical, including the namespace.
Content Log warns that a fog_identifier could not be found and the biome renders with default overworld fog.The string inside minecraft:fog_appearance does not match the description.identifier of any file in RP/fogs/ or any built-in vanilla fog.Open your fog JSON file in RP/fogs/ and copy the exact identifier from its description block, not the file name on disk.

Reference, straight from the game files

Read out of the game itself, so the ids match the version you are building for.