Configuration Files
Essential Loader uses two types of configuration files:- Container mod configuration: Embedded in the mod jar
- User configuration: Stored in the game directory
Container Mod Configuration
Location: Root of the container jarUser Configuration
Location:.minecraft/essential/mods/$pub_$mod/essential-loader.properties
Where:
$pub=publisherSlugfrom container configuration$mod=modSlugfrom container configuration- If both are identical, shortened to just
$mod
Special case: Essential itself uses
.minecraft/essential/essential-loader.properties for legacy compatibility.Container Configuration Properties
Required Properties
The publisher slug as configured in the Essential Mods Panel.Used to:
- Identify the mod publisher
- Construct API endpoints
- Determine user configuration location
essentialThe mod slug as configured in the Essential Mods Panel.Used to:
- Identify the specific mod
- Construct API endpoints
- Determine user configuration location
examplemodHuman-readable name for UI and log messages.Shown in:
- Update prompts
- Log output
- Error messages
ExampleModOptional Properties
The publisher ID from the Essential Mods Panel.Optional identifier that may be used instead of slug in certain API calls.Example:
26d49e5b60ecf53d6b26c76aThe mod ID from the Essential Mods Panel.Optional identifier that may be used instead of slug in certain API calls.Example:
60ecf53d6b26c76a26d49e5bThe default update branch for this mod.Common values:
stable: Production releasesbeta: Beta channelstaging: Development builds
Pinning Properties
See Pinning Documentation for detailed information.Path to the embedded mod jar inside the container jar.Must start with
/ to be read as a jar resource (e.g., /bundled-mod-1.0.0.jar).Without leading slash, it’s treated as a URL.MD5 checksum of the pinned jar file.Required when
pinnedFile is set. Used to verify integrity.Example: d41d8cd98f00b204e9800998ecf8427eVersion string of the pinned jar.Recommended when using pinning. Required for:
- Click-to-update functionality
- Diff-updates
- Version-aware mods
1.2.0Version ID from the Essential Mods Panel.Optional. May be used instead of version string in future functionality.Example:
6b26c76a26d49e5b60ecf53dUser Configuration Properties
Update Control
Controls update behavior.Values:
true: Automatic updates on every bootwith-prompt: Check for updates, wait for user consentfalse: No automatic update checks
truefor thin container modswith-promptfor pinned container mods
Override the update branch.Overrides the branch specified in container configuration.Example:
betaUpdate Resolution (Internal)
Set by the loader when an update is available.Read-only for mods. Do not modify this value directly. Set
pendingUpdateResolution instead.Example: 1.2.0.13Set by the mod to accept or reject the pending update.
true: Download and install updatefalse: Skip this update- Unset: Waiting for decision
Internal use only. Tracks the last accepted update version.Prevents unwanted downgrades when container mod version changes.Automatically managed by the loader.
Configuration Examples
Thin Container Mod
A lightweight container that always downloads the latest version:Pinned Container Mod
Embeds a specific version with click-to-update:autoUpdate=with-prompt prompts users for updates.
Pinned with Auto-Update Enabled
Embed a version but enable automatic updates by default:- Container Config
- User Config
Beta Branch Testing
- Container Default
- Per-User Override
Offline/LAN Environment
Disable all update checks:- Container Config
- User Config
autoUpdate=false enables fully offline operation.
Environment Variables
Configuration can be influenced by environment variables:Override the API base URL for downloads.Default:
https://api.essential.gg/modsUseful for:- Corporate proxies
- Mirror servers
- Testing environments
Override the stage2 update branch.Affects the loader’s own update channel.
System Properties
JVM system properties provide additional control:Override the API base URL (same as
ESSENTIAL_DOWNLOAD_URL).Override stage2 update branch (same as
ESSENTIAL_STAGE2_BRANCH).Override auto-update setting globally.
Internal. Indicates if the game was relaunched.Set by the loader to prevent update checks on relaunch.
Configuration Priority
When multiple configuration sources conflict, this priority order applies:- System properties (
-Dessential.*) - Environment variables (
ESSENTIAL_*) - User configuration file (
.minecraft/essential/mods/$pub_$mod/essential-loader.properties) - Container configuration (
essential-loader.propertiesin jar) - Defaults (hardcoded in loader)
- Example Conflict
- Partial Override
Container config:User config:System property:Result:
staging (system property wins)Stage2 Configuration
Stage2 (the loader’s own loader) has separate configuration:Container Stage2 Config
Location:gg/essential/loader/stage1/stage2.properties in container jar
User Stage2 Config
Location:.minecraft/essential/loader/stage1/$variant/config.properties
Where $variant is the platform variant (e.g., fabric-1.16.5, forge-1.12.2).
Best Practices
For Mod Developers
- Always include displayName: Makes logs and prompts user-friendly
- Use semantic versioning: Enables proper version comparison
- Include pinnedFileVersion: Required for diff-updates and click-to-update
- Default to with-prompt: Give users control over updates
- Implement update UI: Better UX than fallback prompt
For Modpack Authors
- Pin specific versions: Ensure consistent user experience
- Test updates first: Use beta/staging branches before stable
- Document branch choice: Tell users which channel they’re on
- Consider offline users: Include pinned jars for offline play
For Server Administrators
- Use environment variables: Centrally control update behavior
- Consider proxies: Set
ESSENTIAL_DOWNLOAD_URLfor corporate environments - Disable auto-update: Set
essential.autoUpdate=falsefor controlled environments - Version lock: Use pinned jars with
autoUpdate=false