How to Make a Minecraft Bedrock Skin Pack

Build a Bedrock skin pack with manifest.json, skins.json and translated names. Package a .mcpack, test both arm models and fix import errors.

A skin pack puts several characters in one importable collection. This walkthrough builds a two-character pack from PNG skins you own, names each character and packages the result as a .mcpack. It is for a Bedrock device that supports importing local files; it does not publish a Marketplace product or unlock console file import.

Prepare two skins and a clean folder

Start with ordinary 64 × 64 skin textures, one designed for slim arms and one for classic arms. Keep a copy of the editable artwork outside the release folder. Use simple lowercase filenames so a capitalization mistake cannot hide until somebody imports the pack on a different device.

Pack layout
woodland-skins/
  manifest.json
  skins.json
  ranger.png
  explorer.png
  texts/
    en_US.lang
    languages.json

The PNG files in this example are your own artwork, not files generated by the JSON below. A character render or profile portrait is not a skin texture: the pixels must be laid out on the player's UV template. Check the front, back, sleeves and underside of the head before packaging.

Give the pack its own identity

The Microsoft skin-pack format uses format_version: 1 and a skin_pack module. Do not substitute a behavior-pack module. Generate two different UUIDs for your project and replace both placeholders.

manifest.json
{
  "format_version": 1,
  "header": {
    "name": "pack.name",
    "uuid": "REPLACE_WITH_HEADER_UUID",
    "version": [1, 0, 0]
  },
  "modules": [{
    "type": "skin_pack",
    "uuid": "REPLACE_WITH_MODULE_UUID",
    "version": [1, 0, 0]
  }]
}

On Windows, PowerShell's [guid]::NewGuid().ToString() generates one UUID. Run it twice. Record the IDs with the project: subsequent releases of this same pack should keep its identity and increase the version. A separate collection needs separate IDs. This makes updates deliberate rather than a sequence of unrelated imports.

List characters and match their arm models

skins.json
{
  "serialize_name": "icedfox_woodland",
  "localization_name": "icedfox_woodland",
  "skins": [
    {
      "localization_name": "ranger",
      "geometry": "geometry.humanoid.customSlim",
      "texture": "ranger.png",
      "type": "free"
    },
    {
      "localization_name": "explorer",
      "geometry": "geometry.humanoid.custom",
      "texture": "explorer.png",
      "type": "free"
    }
  ]
}

customSlim selects the slim-arm model; custom selects classic arms. These definitions do not import arbitrary Blockbench geometry. Keep the internal collection and character keys stable when changing their display names.

Add readable names

texts/en_US.lang
pack.name=Woodland Explorers
skinpack.icedfox_woodland=Woodland Explorers
skin.icedfox_woodland.ranger=Forest Ranger
skin.icedfox_woodland.explorer=Trail Explorer
texts/languages.json
["en_US"]

A language file is plain text, not JSON. Do not add quotation marks around its values. Additional translations should use the same keys in another language file, with that locale included in languages.json. Compare every character key against skins.json before exporting; a readable pack name does not prove all individual names are correct.

Package and test the actual download

  1. Select the contents of woodland-skins, including the texts folder, and create a ZIP.
  2. Open the ZIP and confirm manifest.json is at its root. An extra outer folder is a packaging mistake.
  3. With file extensions visible, rename the archive to woodland-explorers.mcpack. Check it is not .mcpack.zip.
  4. Open the file with Minecraft on your supported test device and inspect the imported collection in Dressing Room.
  5. Equip both characters. Inspect their arms, shoulders and outer clothing layers in a world, then restart the game and check again.

Ask a second tester to import the exact archive you plan to distribute. Send the file itself, not your development folder. Record the tested game version and device in the release notes. Browse Iced Fox Skin Packs for published collections, or use our custom-skin installation guide if you only need to equip one existing skin.

Fix the symptom you actually see

  • Import fails: validate both JSON files, replace the UUID placeholders, check the archive root and confirm the module is skin_pack.
  • The character is listed but looks wrong: compare the PNG layout with the chosen arm model. Rebuilding the manifest will not repair incorrectly painted sleeves.
  • Technical keys appear as names: compare the localization keys character by character and confirm texts/en_US.lang was included.
  • An old version remains: check which archive was imported and whether its version increased. Back up your source before removing test installations.

For release, include a small preview showing the real skins, credit any licensed artwork and state the tested import platforms. Do not label an untested device as supported just because it also runs Bedrock.

Sources and verification

References checked on October 29, 2026. Examples were checked against these references and validated structurally; in-game acceptance checks are included above for your target version.