beta or staging instead of stable).
What is a Container Mod?
A container mod is an Essential-using dummy mod that’s just a stage0 with an embedded configuration file and no functionality of its own. It’s a thin container for the loader rather than the actual mod.Thin Container Mods
A thin container mod contains:- Stage0 loader code
- Configuration file pointing to a mod
- No embedded mod jar
Pinned Container Mods
A pinned container mod additionally embeds a specific version of the mod:- Works fully offline
- Can enable auto-updates programmatically
- Supports click-to-update functionality
When auto-updates are enabled, the container mod behaves like a regular thin container jar, ignoring the embedded version.
Update Modes
Auto-Update
Automatically downloads and installs the latest version on each game boot. Pinned versions are ignored.
Click-to-Update
Notifies the user in-game when an update is available. User decides whether to upgrade or stay on the current version.
Pinned
Uses the embedded version. Updates only when the user explicitly chooses or the container mod is updated.
One-Time Download
Downloads the latest version once if not already present, then uses that cached version.
Configuration
Container Mod Configuration
The container mod is configured via anessential-loader.properties file at the root of the jar:
Configuration Properties Explained
Configuration Properties Explained
- publisherSlug: Your publisher username from Essential’s Mods Panel
- modSlug: Your mod’s slug identifier from Essential’s Mods Panel
- publisherId: (Optional) Your publisher ID for additional validation
- modId: (Optional) Your mod ID for additional validation
- displayName: Human-readable name shown to users
- branch: Which update channel to follow (stable, beta, staging, etc.)
Pinning a Mod
To create a pinned container mod, embed the mod jar and add these properties:Why MD5 Checksums?
Why MD5 Checksums?
The MD5 checksum verifies the integrity of the embedded jar file. While MD5 is cryptographically weak, it’s perfectly suitable for detecting file corruption or accidental modifications.
Runtime Configuration
Container mods can be further configured programmatically (e.g., via an in-game user interface) to enable/disable auto-updates or switch to a specific version/branch. Configuration file location:$pubis the mod’spublisherSlug$modis the mod’smodSlug
If
publisherSlug and modSlug are identical, the folder name is shortened to just $mod.For legacy reasons, Essential itself uses .minecraft/essential/essential-loader.properties.Update Workflow
Auto-Update Flow
Click-to-Update Flow
Fallback Update Prompt
Fallback Update Prompt
If the mod fails to write to the
pendingUpdateResolution property, the loader will show its own prompt. This ensures users can still update even if the current mod version is broken or bricked.Pinning Stage2
Stage2 can also be pinned, but with some limitations.Configuration
Instead of anessential-loader.properties file at the root of the container mod, place the file at:
All three properties are required for stage2 pinning. Only
pinnedFile, pinnedFileMd5, and pinnedFileVersion are supported.Runtime Configuration
The external configuration file for stage2 is at:autoUpdatebranchpendingUpdateVersionpendingUpdateResolution
Best Practices
For Mod Developers
- Use pinned containers for stable releases
- Enable click-to-update by default
- Provide clear update prompts to users
- Test offline functionality with pinned versions
For Modpack Authors
- Pin versions for stability
- Disable auto-updates in production packs
- Document the update process for users
- Test container mod compatibility
For Advanced Users
- Use auto-update for bleeding-edge features
- Switch branches for beta testing
- Keep backups when experimenting
- Understand the configuration hierarchy
For Distribution
- Always include MD5 checksums
- Use unique paths for embedded jars
- Document the pinned version clearly
- Provide migration guides for updates
Use Cases
- Modpack Distribution
- Beta Testing
- Offline Play
- User Choice
Scenario: You’re distributing a modpack and want stable, tested versions.Solution: Use pinned container mods with auto-updates disabled.Runtime config:Users get the exact version you tested, with no surprise updates.
Troubleshooting
Container mod loads wrong version
Container mod loads wrong version
Check the runtime configuration file at
.minecraft/essential/mods/$pub_$mod/essential-loader.properties. It may have overridePinnedVersion set, causing the pinned version to be ignored.Solution: Delete the runtime config file or remove the overridePinnedVersion property.Updates not downloading
Updates not downloading
Verify:
autoUpdate=truein runtime config- Internet connection is available
- Publisher and mod slugs are correct
- The mod exists on Essential’s API
MD5 checksum mismatch
MD5 checksum mismatch
The embedded jar has been corrupted or modified.Solution: Re-build the container mod with the correct jar file and updated MD5 checksum.Generate MD5:
md5sum yourmod.jar (Linux/Mac) or CertUtil -hashfile yourmod.jar MD5 (Windows)Click-to-update prompt not showing
Click-to-update prompt not showing
Ensure:
autoUpdate=with-promptin runtime configpinnedFileVersionis set in the container mod config- The mod properly implements update prompt handling