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
A threaded, node-based download manager plugin for Godot 4.2+ with intelligent caching, sequential group downloads, and a runtime singleton API.
Godot Download Manager
A threaded, node-based download manager plugin for Godot 4.2+ with intelligent caching, sequential group downloads, and a runtime singleton API.
Features
- Node-based setup β configure entirely in the Inspector, no boilerplate
- Multi-threaded β concurrent downloads via configurable thread pool (1β16 threads)
- Sequential groups β groups download one at a time with per-group progress
- Smart caching β files matching expected size + SHA-256 hash are skipped instantly
- Automatic retries β failed downloads retry up to 3 times with exponential backoff
- Redirect following β follows HTTP 301, 302, 307, 308 redirects (up to 5 hops)
- Hash verification β post-download SHA-256 integrity check with automatic cleanup on mismatch
- Update check β pre-flight cache check before downloading
- HTTP / HTTPS β full TLS support via Godot's built-in HTTPClient
- Signal-driven β plugin emits signals only, you build the UI
- Runtime API β
DLClientautoload singleton for on-demand downloads during gameplay
Installation
- Copy the
addons/download_manager/folder into your Godot project. - Open Project > Project Settings > Plugins.
- Enable Godot Download Manager.
The plugin registers a DLClient autoload singleton automatically.
Quick Start
YourLoadingScene
βββ DownloadProgress β Orchestrator
β βββ DownloadGroup β Group: "Sound Effects"
β βββ DownloadGroup β Group: "Music"
βββ CanvasLayer
βββ (your UI)
@onready var dl: DownloadProgress = $DownloadProgress
func _ready() -> void:
dl.check_completed.connect(_on_check)
dl.all_completed.connect(_on_done)
func _on_check(needs_download: bool, bytes: int) -> void:
if needs_download:
dl.start()
func _on_done(success: bool) -> void:
if success:
get_tree().change_scene_to_file("res://main_menu.tscn")
Documentation
- Usage guide: https://mapdu.dev/blog/godot/download-manager/
Contributing
Contributions are welcome! Here's how to get started:
Setup
- Fork this repository.
- Clone your fork and open the project in Godot 4.2+.
- Enable the plugin in Project > Project Settings > Plugins.
- The
addons/download_manager/demo/demo_scene.tscnis a working demo β use it to test changes.
Code Style
- Strict typing everywhere β all variables, constants,
forloops, and return types must have explicit type annotations. const X: Type = valueβ never use:=inference.var x: Type = valueβ never use untypedvar.for item: Type in collection:β always type loop variables.func name() -> ReturnType:β always include return type, including-> void.
Pull Requests
- Create a feature branch from
main. - Keep changes focused β one feature or fix per PR.
- Test your changes with the included
addons/download_manager/demo/demo_scene.tscn. - Ensure all code follows the style guide above.
- Write a clear PR description explaining what and why.
Reporting Issues
- Open an issue with steps to reproduce.
- Include your Godot version and OS.
- Attach any error logs from the Godot console.
License
This project is licensed under the MIT License.
A threaded, node-based download manager plugin for Godot 4.2+ with intelligent caching, sequential group downloads, and a runtime singleton API.
Reviews
Quick Information
A threaded, node-based download manager plugin for Godot 4.2+ with intelligent caching, sequential group downloads, and a runtime singleton API.