Install Asset
Install via Godot
To maintain one source of truth, Godot Asset Library is just a mirror of the old asset library so you can download directly on Godot via the integrated asset library browser

Quick Information

Easily zip a bunch of files for save games or level editors!Support images, nodes, resources, and built in types like dictionaries.**API**```gd# Write files by passing as a zip, with names as file paths.Zip.write("user://slot0.save", {"state.var": {"score": 10, "name": "player"}, "scene.scn": get_tree().current_scene(), "screen.jpg": screenshot })# Append works the same but without erasing data.Zip.append()# Automatically snaps, shrinks, and appends to the file.Zip.write_screenshot("user://slot.zip", get_viewport())# Automatically converts bytes to the appropriate format.# .tscn and .scn will come back as a PackedScene.Zip.read("user://slot.zip", "screen.jpg")# Get a list paths that match the head and tail.Zip.get_files("user://slot0.save", "", ".png")# Remove a list of files.Zip.remove("user://custom_map.map", ["area1.scn", "area2.scn"])```**Check the README for more details.**
Easy Zip
v1.0
Write multiple files to a zip.
Ideal for save systems + level editors.
Autoconverts:
- Dictionary -> (.json or .var) -> bytes
- String -> bytes
- Image -> (.png, .jpg/jpeg, .webp, .svg) -> bytes
- Resource -> (.tres or .res) -> bytes
- Node -> (.tscn or .scn) -> bytes
Saving files as file.json
will use JSON.stringify
, while file.var
will use Godots var_to_str
which supports built in formats.
Usage
Writing
Zip.write("user://data.zip", {
"version.txt": "123",
"state.json": {"score": 10, "position": [0.0, 0.0]},
"state.var": {"score": 10, "position": Vector2(0.0, 0.0)},
"image.webp": Image,
"bytes.data": PackedByteArray(),
"current_scene.tscn": get_tree().current_scene,
})
kwargs
lossy
: (bool) Used for .webpquality
: (float) Used for .jpg & .webpflags
: (ResourceSave.FLAG_) Used for saving resources
Reading
var current_scene = Zip.read("user://data.zip", "current_scene.tscn")
Other
# For kwargs look above.
# You don't have to call await before it, but it's ideal.
await Zip.write_screenshot("user://data.slot", get_viewport(), "name_and_ext.jpeg", shrink, kwargs)
# List of files you want removed from the zip.
Zip.remove("user://data.slot", ["file.json", "screenshot.jpg"])
# Exactly like write() but preserves the previous content if it exists.
Zip.append("user://data.slot", {"image.jpg": image})
Easily zip a bunch of files for save games or level editors!
Support images, nodes, resources, and built in types like dictionaries.
**API**
```gd
# Write files by passing as a zip, with names as file paths.
Zip.write("user://slot0.save", {"state.var": {"score": 10, "name": "player"}, "scene.scn": get_tree().current_scene(), "screen.jpg": screenshot })
# Append works the same but without erasing data.
Zip.append()
# Automatically snaps, shrinks, and appends to the file.
Zip.write_screenshot("user://slot.zip", get_viewport())
# Automatically converts bytes to the appropriate format.
# .tscn and .scn will come back as a PackedScene.
Zip.read("user://slot.zip", "screen.jpg")
# Get a list paths that match the head and tail.
Zip.get_files("user://slot0.save", "", ".png")
# Remove a list of files.
Zip.remove("user://custom_map.map", ["area1.scn", "area2.scn"])
```
**Check the README for more details.**
Reviews
Quick Information

Easily zip a bunch of files for save games or level editors!Support images, nodes, resources, and built in types like dictionaries.**API**```gd# Write files by passing as a zip, with names as file paths.Zip.write("user://slot0.save", {"state.var": {"score": 10, "name": "player"}, "scene.scn": get_tree().current_scene(), "screen.jpg": screenshot })# Append works the same but without erasing data.Zip.append()# Automatically snaps, shrinks, and appends to the file.Zip.write_screenshot("user://slot.zip", get_viewport())# Automatically converts bytes to the appropriate format.# .tscn and .scn will come back as a PackedScene.Zip.read("user://slot.zip", "screen.jpg")# Get a list paths that match the head and tail.Zip.get_files("user://slot0.save", "", ".png")# Remove a list of files.Zip.remove("user://custom_map.map", ["area1.scn", "area2.scn"])```**Check the README for more details.**