Anuken/Mindustry · error · IOException

Unknown version: {ver} (are you trying to load a schematic f

Error message

Unknown version: {ver} (are you trying to load a schematic from a newer version of the game?)

What it means

Thrown by Schematics.read(InputStream) after the header passes, when the version byte read from the stream is greater than the supported schematic version (Schematics.version, currently 1). This is a forward-compatibility guard: a higher version implies a format the running code cannot safely parse.

Source

Thrown at core/src/mindustry/game/Schematics.java:579

    public static Schematic read(Fi file) throws IOException{
        Schematic s = read(new DataInputStream(file.read(1024)));
        if(!s.tags.containsKey("name")){
            s.tags.put("name", file.nameWithoutExtension());
        }
        s.file = file;
        return s;
    }

    public static Schematic read(InputStream input) throws IOException{
        for(byte b : header){
            if(input.read() != b){
                throw new IOException("Not a schematic file (missing header).");
            }
        }

        int ver = input.read();

        if(ver > version) throw new IOException("Unknown version: " + ver + " (are you trying to load a schematic from a newer version of the game?)");

        try(DataInputStream stream = new DataInputStream(new InflaterInputStream(input))){
            short width = stream.readShort(), height = stream.readShort();

            if(limitSchematicSize && (width > 128 || height > 128)) throw new IOException("Invalid schematic: Too large (max possible size is 128x128)");

            StringMap map = new StringMap();
            int tags = stream.readUnsignedByte();
            for(int i = 0; i < tags; i++){
                map.put(stream.readUTF(), stream.readUTF());
            }

            ContentMapper mapper = null;

            //set up content mapping if found; this should not fail
            if(map.containsKey("contentMap")){
                IntMap<ObjectIntMap<String>> nameMap = JsonIO.json.fromJson(IntMap.class, ObjectIntMap.class, map.get("contentMap", "{}"));
                IntMap<IntMap<Content>> contentMap = new IntMap<>();

View on GitHub (pinned to f695ad7e60)

Solutions

  1. Update Mindustry to a version >= the one that created the schematic.
  2. Re-save the schematic in an older/compatible version, or obtain a version-1 schematic.
  3. Catch the IOException and inform the user the schematic requires a newer game version.

Example fix

// before
Schematic s = Schematics.read(input);

// after
try{
    Schematic s = Schematics.read(input);
}catch(IOException e){
    ui.showErrorMessage("This schematic was made by a newer version of the game.");
}
Defensive patterns

Strategy: try-catch

Validate before calling

// version is read after header; pre-check the game/schematic source version if known
if(knownSchematicVersion > Schematics.version){
    ui.showErrorMessage("Schematic requires a newer game version");
    return;
}

Try / catch

try{ Schematic s = Schematics.read(input); }catch(IOException e){ ui.showErrorMessage("Unsupported schematic version"); }

Prevention

When it happens

Trigger: Loading a schematic saved by a newer game version. The header is valid but the following byte (ver) > Schematics.version. The message hints the user may be loading a schematic from a newer game.

Common situations: Player shares a schematic made in a newer Mindustry build with someone on an older build; loading schematics imported across version boundaries; dev builds with bumped version read by stable.

Related errors


AI-assisted analysis of Anuken/Mindustry@f695ad7e60 (2026-08-14). Data as JSON: /api/errors/0862fb3e265acd55. Report an issue: GitHub.