A lightweight mod that monitors your resource pack version and updates it automatically.
See the GitHub Wiki for full developer documentation, advanced features, and examples.
These resource packs already use automatic DynamicPack updates:
- CursedEveryday (GitHub)
- ModsRU
- Zelda Music
- PawTotems (SMP, GitHub)
- SPPack (SMP, GitHub)
- Essentially Tweaked
- Vanilla Leaves
Resource pack developers include a metadata file named dynamicmcpack.json inside their pack.
At game launch, DynamicPack checks for updates and automatically downloads the latest version if necessary.
Install the mod and enjoy — DynamicPack will handle updates in the background.
If you’d like your pack to update itself automatically, you can choose one of the integration options below.
🔗 Option 1 — Update from Modrinth
Create a file named dynamicmcpack.json in your pack:
{
"current": {
"version_number": "7.1" // Current version of your resource pack
},
"remote": {
"game_version": "1.21.1", // Compatible Minecraft version
"modrinth_project_id": "better-leaves", // Your Modrinth project slug or ID
"type": "modrinth" // Update source type (Modrinth)
},
"formatVersion": 1 // Internal config format version
}🐙 Option 2 — Update from GitHub
Create a file named dynamicmcpack.json in your pack:
{
"current": {},
"remote": {
"sign_no_required": true, // Optional digital signature — set to true to disable verification
"type": "dynamic_repo", // Update source type (Dynamic Repository)
"url": "https://adamcalculator.github.io/CursedEveryday/" // Remote repository URL
},
"formatVersion": 1 // Internal configuration format version
}Next, create a dynamicmcpack.repo.json file like this:
{
"formatVersion": 1, // Internal schema version
"build": 10, // Build number of your current release
"name": "CursedEveryday", // Display name of your resource pack
"contents": [
{
// Metadata block (main information about pack components)
"url": "path/to/content.json",
"hash": "5e4d4ad1e9714487263c51f5f83c448c0708773a", // SHA1 checksum of content.json
"id": "meta",
"hidden": true, // Hides this component from user‑facing lists
"required": true // Marks this component as mandatory
},
{
// Example of an additional content section
"url": "path/to/content.json",
"hash": "6e6739297dac80078bbc4890567f05d4015553db",
"id": "cursed",
"name": "Cursed content" // Optional friendly display name
}
]
}Next, create a separate content.json file for each content section:
{
"formatVersion": 1, // Schema version
"content": {
"parent": "path/to/parent", // Local folder containing the files
"remote_parent": "remote/path/to/parent", // Corresponding path in your Git repo
"files": {
"path/to/file": {
"hash": "ca55daeef2e2d84ccd64608cf889ac321c18d4c2", // SHA1 hash of file
"size": 4773 // File size in bytes
},
"path/to/file2": {
"hash": "336e9f4e6d7d1400d8a308a33e703e8b33ea5434",
"size": 54665
},
"path/to/file3": {
"hash": "09dae0777de1705e8acd0ff84c0bb6b7e3e22f63",
"size": 98592
}
}
}
}
⚠️ Important: These examples usejson5, which allows comments (//).
The actual files must be valid.json, so remove comments before use or validate them with this JSON checker.
Advanced features — such as dynamic repositories — are documented in the GitHub Wiki.
DynamicPack is open‑source and completely free under the MIT License.
If you’d like to support the original author:
Bitcoin:
bc1qpc0q9ym7rnfatdh43c4jyf68znj8x2jae5j4cz
Every satoshi helps keep things dynamic (and maybe buys some extra coffee ☕).