Skin Pack Format Requirements Reference
One of the most frustrating experiences for a Minecraft creator is spending hours meticulously designing custom skins, only for them to refuse to appear in the game. Often, the culprit isn’t the skin itself, but a small, overlooked detail in the skin pack’s underlying structure or JSON formatting. Minecraft Bedrock Edition skin packs offer an incredible way to bundle multiple custom skins for easy import and use, but mastering their creation requires adherence to a precise set of file structures and metadata rules.
![]()
This guide will demystify the “Skin Pack Format Requirements Reference” for Minecraft Bedrock Edition, providing you with a comprehensive roadmap to successfully create, package, and import your custom skin collections. By understanding the core components and following a step-by-step process, you’ll ensure your creations are seamlessly integrated into the game, ready for players to enjoy.
Understanding the Core Components: File Hierarchy and Metadata
At its heart, a Minecraft Bedrock skin pack is a collection of files organized into a specific folder hierarchy, all working in concert to tell the game what skins are available and how to display them. This hierarchy typically resides within the game’s data directory, specifically in `com.mojang/skin_packs/SkinpackName` once imported. The crucial files within your main skin pack folder include:
manifest.json: The pack’s identity card.skins.json: The catalog of all skins in your pack.- A
textsfolder: Containing language files (e.g.,en_US.lang) for localized names. - Your actual skin
.pngfiles: The visual assets themselves.
Decoding manifest.json: The Pack’s Identity
The manifest.json file is the first point of contact for Minecraft, providing essential metadata about your entire skin pack. It’s crucial for the game to recognize and load your content.
format_version: This defines the manifest’s schema version. It can be1or2. For skin packs, transitioning from version 1 to 2 does not introduce significant changes or new features.name: This field typically references a localization key, often set aspack.name. This key will later be defined in your.langfile to display the actual name of your skin pack in-game.uuid: One of the most critical elements, requiring two distinct Universally Unique Identifiers (UUIDs). One UUID is for the pack’sheader, and another is for itsmodule. These unique identifiers prevent conflicts with other installed content and ensure your pack is recognized as a separate entity. Using the same UUID twice will lead to loading errors.version: Represents the version of your skin pack, typically formatted as an array, such as[1, 0, 0]for version 1.0.0.type: Within themodulessection of the manifest, thetypefield must be explicitly set to"skin_pack", signaling to the game its specific function.
skins.json: Defining Your Collection
While manifest.json defines the pack, skins.json is where you define each individual skin within that pack. It acts as a detailed catalog, linking texture files to specific player models and display names.
serialize_nameandlocalization_name: These are internal identifiers and display name references for the overall skin pack within this file. Thelocalization_namehere will correspond to the key used in your.langfile for the pack’s name.skinsarray: This is the core of the file, containing an object for every single skin you wish to include in your pack. Each skin object requires:localization_name: The specific display name for this individual skin, which will be referenced in your.langfile.geometry: This specifies the player model the skin is designed for. The most common options aregeometry.humanoid.customfor the standard Steve-like model andgeometry.humanoid.customSlimfor the Alex-like slim-armed model. It’s vital to match this to your skin’s arm width to avoid visual distortions. Note that custom geometries beyond these standard types are generally not supported for skin packs due to historical abuse and security reasons.texture: The filename (e.g.,my_cool_skin.png) of the actual PNG texture file for this skin. This filename must exactly match the texture file placed in your main skin pack folder.type: Defines whether the skin is"free"or"paid". For custom skin packs, this will almost always be"free".
Localizing Names with .lang Files
To ensure your skin pack and individual skins have user-friendly names that can be translated into different languages, you’ll use .lang files. These files reside in a texts folder within your main skin pack directory (e.g., My_Skin_Pack/texts/en_US.lang).
- Pack Name Format: The entry for your skin pack’s name follows the pattern:
skinpack.[skins.json localization_name]=[name of pack]. For instance, if yourskins.jsonhas"localization_name": "MyEpicPack", your.langfile would containskinpack.MyEpicPack=My Epic Skin Pack. - Skin Name Format: Each individual skin’s name is defined similarly:
skin.[skins.json serialize_name].[skin_localization_name]=[name of skin]. This links directly to the specific skin entry in yourskins.json. For example,skin.MyEpicPack.CoolGuy=Cool Guy Skin.
The Visuals: Skin Texture Files
These are the actual images that give your characters their appearance. They must be standard .png image files, typically sized at 64×64 or 128×128 pixels. Each skin in your pack should use a unique texture file, and the filenames referenced in skins.json must precisely match these files.
Crafting Your Skin Pack: A Step-by-Step Guide
With an understanding of the individual components, let’s walk through the process of assembling your skin pack.
- Create a Main Folder: Begin by creating a new, descriptive folder for your entire skin pack (e.g.,
My_Skin_Pack). This will be the root of your pack. - Add Skin PNGs: Place all your custom
.pngskin files directly into this main folder. Double-check that they are 64×64 or 128×128 pixels to ensure proper rendering. - Create
manifest.json: In your main folder, create a new file namedmanifest.json. Populate it with the requiredheaderandmodulessections, ensuring you generate and insert two distinct UUIDs using an online UUID generator. - Create
skins.json: Next, createskins.jsonin the same main folder. Define the overallserialize_nameandlocalization_namefor your pack. Then, within theskinsarray, create an object for each skin, specifying itslocalization_name, the correctgeometry(customorcustomSlim), the exacttexturefilename, and"free"as itstype. - Create
textsFolder and.langFile: Inside your main skin pack folder, create a subfolder namedtexts. Within thistextsfolder, create your language file, for instance,en_US.lang. Add the localized names for your skin pack and each individual skin using the precise format outlined above. - Package the Pack: Once all files are in place and correctly formatted, compress the entire main skin pack folder (e.g.,
My_Skin_Pack) into a.ziparchive. After compression, change the file extension from.zipto.mcpack. This special extension tells Minecraft how to handle the file. - Import to Minecraft: Simply double-click the newly created
.mcpackfile. Minecraft Bedrock Edition should launch and automatically import your skin pack. The game places it into the appropriatecom.mojang/skin_packsdirectory. - Test: Launch Minecraft, navigate to the Dressing Room, and verify that your new skin pack appears and all your skins are accessible and display correctly.
Expert Tips for Seamless Creation
To streamline your workflow and avoid common headaches, consider these expert tips:
- UUID Generation: Always use reliable online UUID generators to create your unique identifiers. Never try to guess or manually create them, as this will lead to errors.
- Geometry Matching is Key: Pay close attention to matching the
geometrysetting (customfor Steve’s arm model,customSlimfor Alex’s) inskins.jsonto the actual arm width of your skin texture. A mismatch will result in visually distorted or “smeared” textures in-game. - Localization Linkage: The
localization_nameandserialize_namefields inskins.jsonare critical. They act as bridges, linking your skin pack and individual skins to their display names in the.langfiles. Any typo or mismatch here will prevent names from appearing correctly. - Utilize Developer Tools: Tools like Blockbench are excellent for creating skins. For editing JSON files, a text editor with JSON syntax highlighting and validation, such as Visual Studio Code, is invaluable for catching formatting errors like missing commas or brackets.
- Testing Protocol: After making changes during development, it’s often necessary to fully reload Minecraft to see your updates reflected. Be aware that the
development_skin_packsfolder, while useful for other content, might not function reliably for live testing of skin packs.
Troubleshooting: Avoiding Common Pitfalls
Even with careful planning, issues can arise. Here are common mistakes and how to avoid them:
- Incorrect UUIDs: Using the same UUID for both the header and module, or using an invalidly formatted UUID, will prevent your pack from loading. Always generate two distinct, valid UUIDs.
- Wrong Geometry: As mentioned, mismatching your skin’s arm model (slim or classic) with the
geometrysetting inskins.jsonis a frequent cause of texture distortion. Double-check this for every skin. - Missing or Malformed JSON Files: The most common error source. A single missing comma, bracket, or quotation mark in
manifest.jsonorskins.jsoncan render the entire pack unreadable. Use a JSON validator or a good text editor to spot these issues. - Incorrect File Naming or Location: Misplaced files (e.g., textures not in the root folder,
.langfile not in atextssubfolder) or incorrect references to skin texture filenames inskins.jsonwill cause skins not to appear. Ensure every texture file has a unique name and is correctly referenced. - Difficulty Deleting Packs: On certain platforms, particularly Android, deleting imported skin packs without reinstalling the game can be challenging due to restrictive file access permissions. Be mindful of this when testing.
- Unreferenced Textures: Having
.pngtexture files in your pack that are not explicitly referenced by a skin entry inskins.jsonis technically not an error that breaks the pack, but it indicates inefficient packaging and potentially a forgotten skin.
Creating custom skin packs for Minecraft Bedrock Edition is a rewarding endeavor that allows for deep personalization of your gameplay. By meticulously following these format requirements, understanding the role of each file, and leveraging the provided tips, you’ll be well-equipped to create and share your unique skin collections with the Minecraft community.