Wiki 9Minecraft Wiki 9Minecraft

Fog IDs Reference and Stack Management

Complete list of vanilla Bedrock fog identifiers, stack mechanics, and custom fog JSON structure.

5Sections
2Code examples
3Known errors

Fog identifiers control the atmospheric distance haze, underwater visibility, and volumetric lighting effects across Minecraft Bedrock Edition. Creators use these IDs when assigning visuals to custom biomes, overriding vanilla weather atmosphere in a resource pack, or dynamically altering a player's vision using the /fog command. Understanding how the game resolves active fog layers is required before attempting to blend or replace these effects.

How the Fog Stack Works

Bedrock Edition does not simply apply one fog setting at a time; instead, it evaluates a prioritized list called the fog stack. Every player has an individual fog stack managed by the client. At the absolute bottom of this stack sits the default fallback fog, which only renders if no biome or command provides valid settings. Directly above the default layer is the biome fog layer, which updates automatically as the player walks across chunk borders into different biomes.

Above the biome layer sits the command layer, controlled via the /fog command or script APIs. When you push a fog ID to a player using a command, you must also supply a user-defined ID string. This string acts as a handle, allowing you to pop or remove that specific fog instance later without accidentally clearing other environmental fogs. If multiple fogs are pushed to the command layer, the most recently pushed fog takes priority at the top of the stack.

Finally, active status effects like Blindness or Darkness override the standard stack behavior for distance rendering, forcing the fog start and end planes immediately in front of the camera regardless of what biome or command fog is currently active.

Overworld Fog IDs

The Overworld relies heavily on biome-specific fog definitions to subtly shift the sky and horizon color between cold, temperate, and warm regions. While most standard surface biomes share the exact same distance values in vanilla, they remain separated by unique identifiers so resource pack creators can customize individual regions without affecting the entire dimension. For example, replacing the swampland fog allows you to create a murky, close-range atmosphere in swamps while leaving adjacent plains completely clear.

When referencing these in commands or custom biome files, always include the minecraft: namespace. Omitting the namespace in a custom biome client definition will cause the game to look for a custom fog under a missing namespace and fall back to the default engine fog.

Fog IdentifierAssociated Biome / UsageVisual Notes
minecraft:fog_defaultGlobal fallbackStandard blue-white horizon used when a biome lacks an explicit mapping.
minecraft:fog_plainsPlains, Sunflower PlainsStandard clear visibility across air and water.
minecraft:fog_forestForest, Wooded HillsIdentical to plains in vanilla, isolated for resource pack overrides.
minecraft:fog_taigaTaiga, Cold Taiga, Mega TaigaSlightly cooler sky tint in certain lighting configurations.
minecraft:fog_swamplandSwamp, Swamp HillsMurkier water fog settings with reduced underwater visibility.
minecraft:fog_desertDesert, Desert HillsWarm atmospheric haze during weather transitions.
minecraft:fog_extreme_hillsMountains, Gravelly MountainsStandard high-altitude clear visibility.
minecraft:fog_jungleJungle, Jungle Edge, Bamboo JungleIncreased humidity density for volumetric configurations.
minecraft:fog_savannaSavanna, Savanna PlateauWarm horizon blend matching arid sky colors.
minecraft:fog_mesaBadlands, Eroded BadlandsWarm dust tint on the far distance plane.
minecraft:fog_ice_plainsSnowy Tundra, Ice SpikesCrisp distance rendering with icy water fog properties.
minecraft:fog_mushroom_islandMushroom FieldsIsolated ID for mycelium island atmospheres.
minecraft:fog_oceanOcean, Deep OceanStandard open water visibility.
minecraft:fog_lukewarm_oceanLukewarm OceanLighter cyan underwater fog color and slightly further end distance.
minecraft:fog_warm_oceanWarm OceanBrightest and clearest underwater fog settings in the Overworld.
minecraft:fog_cold_oceanCold OceanDarker blue underwater haze with tighter visibility limits.
minecraft:fog_frozen_oceanFrozen Ocean, Deep Frozen OceanVery dark underwater visibility under ice sheets.
minecraft:fog_riverRiver, Frozen RiverFreshwater tint, distinct from ocean blue.
minecraft:fog_beachBeach, Snowy Beach, Stone ShoreTransitional coastal atmosphere.
minecraft:fog_cherry_groveCherry GroveSoft pastel horizon tinting introduced for cherry biomes.
minecraft:fog_mangrove_swampMangrove SwampDense greenish-brown underwater fog and humid air settings.
minecraft:fog_deep_darkDeep DarkStandard underground air values; darkness pulses are handled by effects, not this ID.
minecraft:fog_lush_cavesLush CavesUnderground atmospheric lighting support.
minecraft:fog_dripstone_cavesDripstone CavesStandard subterranean distance planes.

Nether and End Fog IDs

Unlike the Overworld, where fog primarily blends the far render distance border into the skybox, Nether fogs are aggressive and close-range. They use fixed distance values rather than render-distance multipliers in certain modes, obscuring terrain to create a claustrophobic atmosphere and hide unloaded chunks inside the dimension ceiling. Each Nether biome uses a distinct fog color to dramatically shift the mood as players travel.

The End dimension uses a single identifier across the central island and outer void islands, producing a dark, starless purple-black horizon.

Fog IdentifierAssociated BiomeVisual Notes
minecraft:fog_hellNether WastesClassic dull red haze at medium-close distance.
minecraft:fog_crimson_forestCrimson ForestRich, saturated dark red atmosphere.
minecraft:fog_warped_forestWarped ForestDeep cyan and purple-tinted alien haze.
minecraft:fog_soulsand_valleySoul Sand ValleyBright turquoise fog that contrasts with soul fire.
minecraft:fog_basalt_deltasBasalt DeltasThick, desaturated lilac-gray ash atmosphere with reduced visibility.
minecraft:fog_the_endThe EndDark void purple horizon with standard distance limits.
minecraft:fog_powder_snowPowder Snow BlockPushed dynamically by the engine when a camera enters a powder snow block.

Defining a Custom Fog in a Resource Pack

You can create completely new fog identifiers or override the vanilla IDs listed above by placing a JSON file in the RP/fogs/ directory of your resource pack. The file name does not dictate the identifier; the identifier inside the description object is what commands and biome files actually read.

A fog definition is split into two primary parts: distance and volumetric. The distance object controls standard linear fog for different camera media (air, water, weather, lava). Setting render_distance_type to render makes the fog_start and fog_end values act as multipliers of the player's current video settings (from 0.0 to 1.0). Setting it to fixed interprets those numbers as exact block distances from the camera, which is useful for blinding sandstorms or pitch-black dungeons.

RP/fogs/custom_toxic_fog.json
{
  "format_version": "1.16.100",
  "minecraft:fog_settings": {
    "description": {
      "identifier": "my_pack:fog_toxic_swamp"
    },
    "distance": {
      "air": {
        "fog_start": 4.0,
        "fog_end": 28.0,
        "fog_color": "#4E6B2C",
        "render_distance_type": "fixed"
      },
      "water": {
        "fog_start": 0.0,
        "fog_end": 8.0,
        "fog_color": "#2A3B17",
        "render_distance_type": "fixed"
      },
      "weather": {
        "fog_start": 2.0,
        "fog_end": 16.0,
        "fog_color": "#394F21",
        "render_distance_type": "fixed"
      }
    }
  }
}

Assigning Fog IDs to Biomes and Commands

To make a biome use a vanilla or custom fog ID without running commands, bind it inside RP/biomes_client.json. Every biome key in this file accepts a fog_identifier string alongside its water surface color and transparency settings. This file applies to both vanilla biome overrides and custom biomes created in your behavior pack.

Notice that biomes_client.json does not use the standard minecraft: prefix on the biome object keys themselves, except when necessary for custom namespaces, though the fog_identifier value always requires its full namespace.

RP/biomes_client.json
{
  "biomes": {
    "swampland": {
      "water_surface_color": "#4c6559",
      "water_surface_transparency": 1.0,
      "fog_identifier": "my_pack:fog_toxic_swamp"
    }
  }
}

Which versions this applies to

Applies to Minecraft Bedrock 1.16.100 and newer. No experimental toggles are required to create custom fog JSON files, use RP/biomes_client.json, or run the /fog command.

When it does not work

What you seeWhyThe fix
Running /fog @s remove results in an error or leaves the player's screen permanently covered in custom fog.The /fog command does not remove fog by the fog identifier itself; it removes entries by the user_provided_id string you invented when you ran the push subcommand.Ensure your push command uses a memorable handle, such as /fog @s push my_pack:fog_toxic_swamp toxic_layer, and then clear it using /fog @s remove toxic_layer.
Content Log displays: [Fogs][error] fog_end must be greater than fog_start, and the fog falls back to default white.Inside your RP/fogs/ JSON file, one of the camera states (air, water, lava, or weather) has a fog_start number that is equal to or higher than fog_end.Make sure fog_end is strictly greater than fog_start. Also verify you did not mix up fixed block values (like 32.0) with render multiplier values (which must be between 0.0 and 1.0 when render_distance_type is set to render).
Custom fog works when pushed via /fog command, but refuses to show up naturally in the biome assigned in biomes_client.json.Either the player still has an active command fog sitting higher on their fog stack, or the biome name key inside RP/biomes_client.json is misspelled.Run /fog @s pop or test in a fresh world to guarantee the command layer of the fog stack is empty, and verify the biome key matches the exact identifier used in the behavior pack.

Reference, straight from the game files

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