Tags
Creators
Details
v2.1.1+API
Compatibility
Required content
Changes
DynamicSkins 2.1.1 — Free Skin API
A complete rework of how skins are delivered. Skins no longer travel through the Minecraft connection: they are stored on the DynamicSkins skin API and players download them directly over HTTPS. Servers use the free DynamicSkins API out of the box — no setup, no secrets.
⚠️ Install on both the server and every client. 2.x uses a new network protocol: 1.x clients cannot join 2.x servers, and 2.x clients cannot join 1.x servers.
✨ Highlights
- Zero-config free API — Drop the jar into the server's
modsfolder and start it. The server creates its own key and registers with the free API by itself. Nothing to configure. - Each server's skins stay separate — a server only sees and changes its own players' skins.
- Lighter servers — skin PNGs no longer go through the game connection; the server only sends small version updates, and clients download the files themselves.
- CrafOps Skin Studio — a new editor with a 3D preview (drag to rotate, Normal/Talking), where you can add, edit, apply and delete skins in one place.
- Skin library groups — organise saved skins into folders, move skins between them, and pick the folder when saving.
- Skin hotkeys — bind a key (with Ctrl, Shift or Alt) to a saved skin and switch skins in-game instantly, no menu needed.
- Hide the 3D preview per skin — keep a new skin a surprise while editing others.
- Choose your editor — the classic Legacy editor or Skin Studio as the default for F8; both share the same library, groups and hotkeys.
⚡ Performance
- Downloaded skins are cached on disk (up to 512 MB, oldest removed first), so skins you have seen load instantly next time. Every file is checked against its SHA-256 hash.
- At most 4 downloads at once, and skin updates are spread over a few seconds, so busy servers don't cause download spikes.
- The server re-reads online players' skins every minute, so changes always arrive.
🛠️ For server admins
/dynamicskins status— mode, server id, players with a skin, API calls and the last error./dynamicskins status <player>— that player's skin version, model and files./dynamicskins test— checks that the skin API is reachable./dynamicskins reload— applies config changes without a restart.- Back up
config/dynamicskins-server-key.json. It is your server's identity on the free API: if it is lost, the server registers again with a new identity and players upload their skins again. - Running your own skin API instead? Set
[api] urlandsecretinconfig/dynamicskins-common.toml. Leave both empty to use the free API.
🔒 Privacy & network
- Clients connect to the free API (
api-ds-revo.54621325.xyz) over HTTPS to upload and download skins. - Stored there: skin images (PNG), the player's UUID and skin model (slim/wide), and for each server its public key, server name (MOTD) and the IP address it registered from (for abuse limits). No passwords or Minecraft account credentials are ever sent.
- A player can only change their own skin: uploads need a short-lived token from the server.
- The free API is provided as-is (best effort) and has usage limits. Skins of servers that stay inactive for a long time may be removed.
⬆️ Upgrading from 1.x
- Skins stored on your server by 1.x are not moved automatically: players upload their skin again. Each player's saved skin library on their own PC is kept.
- The
[delivery] serverKBpssetting is gone (skins no longer go through the server).
📦 Requirements
- Minecraft 1.20.1, Forge 47.4.0 or newer — on the server and on every client.
- Optional: Plasmo Voice 2.1+ for the talking texture while speaking.
- Skins: square PNG, 64–1024 px, a normal and an optional talking texture.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:RQtFfZ30:HMKWagyc"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:RQtFfZ30:HMKWagyc"
}

