This document tracks changes of released library versions.
See also Pulse for recent activities.
Cutting-edge API docs of the master branch are available here.
π indicates a breaking change. Deprecations are not marked breaking.
31 May 2025
See devlog article for highlights.
- Godot 4.4 support (#1065)
- Type-safe signals
- π User-defined signals (#1000)
- Explicit signal visibility (#1075)
- Type-safe signals for engine classes (#1111)
- Inherited typed signals (#1134)
emit()now available on inherited symbols + smaller cleanups (#1135)- User classes expose typed-signal API even without
#[signal](#1146) - Generated
emit()functions now takeimpl AsArg<T>(#1150) - Simplify
connect*usage (#1152) - Clean up
ConnectBuilderand some other signal APIs (#1171) ConnectBuilder::connect_*_gd()takesGdinstead of&mut Gd(#1175)- Replace macro approach with indirect trait (#1179)
- Async/await
- Registration
- Builtin types
- Interface traits
- Support
f32directly inprocessandphysics_process(#1110)
- Reduce number of classes in minimal codegen (#1099)
- Decrease
CallErrorsize from 176 to 8 bytes (#1167)
- Usability
- Propagate panics in object constructors to
Gd::from_init_fn(),new_gd(),new_alloc()(#1140) - π Correct
ConnectFlagsclassification (enum -> bitfield) (#1002) - Bitfields now have
|=operator (#1097) - Panic handling: thread safety; set hook once and not repeatedly (#1037)
- Add diagnostic hints for missing
ToGodot/FromGodottraits (#1084) bind/bind_mutborrow errors now print previous stacktrace (#1094)- Make CollisionShapes
...debug_colormethods available in Release builds (#1149) - π Add
_rawptrsuffix to all unsafe virtual functions (#1174) - π Remove deprecated symbols for v0.3 (#1160)
- Propagate panics in object constructors to
- Refactoring
- Dependencies, project structure, tooling
- Move examples out of repository (#1085)
- Remove paste, simplify plugin macros (#1069)
- π Bump MSRV from 1.80 to 1.87 (#1076, #1184)
- Validate that
api-customis run for Godot Debug binary (#1071) - Centralize + update dependencies in workspace
Cargo.toml(#1127) - π Reduce number of classes in minimal codegen (#1099)
- Post
Rust 1.86update: apply clippy lints (#1115) - Move
itestdefault featurecodegen-fullinto build script (#1100)
- WebAssembly
- Editor integration
- Misc
- Tooling workarounds
- Move builtin API design to
__docsmodule (#1063) - Regression test for checking if
RustCallableis connected to signal (#1068) - Describe semantics of
base_mut()in docs (#1103) - Document
DynGd<_, D>type inference (#1142) #[derive(GodotClass)],#[godot_api]docs: replace table of contents with sidebar (#1155)- Add
rustc-argstopackage.metadata.docs.rs(#1169) - Document runtime class in editor requirement (#1168)
- Improve signal/async docs (#1184)
24 February 2025
- Support additional doc comment markdown (#1017)
- Provide safe way for implementing
IScriptExtension::instance_has(#1013) - Global main thread ID (#1045)
- Add
validate_propertyvirtual func (#1030)
- Speed up creating and extending packed arrays from iterators up to 63Γ (#1023)
- Test generation of proc-macro code via declarative macro (#1008)
- Test: support switching API versions in check.sh (#1016)
- Support
Variant::object_id()for Godot <4.4; addobject_id_unchecked()(#1034) - Rename
Basis+Quaternionmethods, closer to Godot (#1035) - Compare scripts via object_id (#1036)
- Add Godot 4.3 to minimal CI (#1044)
- Add .uid files for GDScript + GDExtension resources; update script cache (#1050)
- Add
#[allow(...)]directives to macro-generated entries (#1049) - Clippy: disable excessive operator-precedence lint (#1055)
- Fix
Variant->Gdconversions not taking into account dead objects (#1033) - Fix
DynGd<T,D>export, implement proper export forArray<DynGd<T,D>>(#1056) - In
#[var]s, handle renamed#[func]s (#1019) - π
#[signal]: validate that there is no function body (#1032) - Disambiguate virtual method calls (#1020)
- Parse doc strings with litrs (#1015)
- Register-docs: don't duplicate brief in description (#1053)
- Move some compile-time validations from godot to godot-ffi (#1058)
- Clippy: fix "looks like a formatting argument but it is not part of a formatting macro" (#1041)
30 January 2025
- Map
Vector2.AxisandVector2i.AxistoVector2Axisenum (#1012) - Implement
VarandExportforDynGd<T, D>(#998) - Support associated types in
#[godot_dyn](#1022) - Add
Aabb::intersect_ray()(#1001) - FFI: compatibility layer for virtual methods (#991, #1007)
- FFI: postinit create, icon paths (#991)
- Follow clippy 1.84; limit
NodePath::subpath()polyfill again (#1010) - Remove dead binding code regarding Godot 4.0 (#1014)
- API consistency for bounding boxes (#1001)
- Document and refactor
PluginItemrelated stuff (#1003)
- Fix nightly compiler warnings about
#[cfg(before_api = "4.3")]in the generated#[godot_api]impl (#995) - Fix
#[derive(Var)]generating incorrecthint_stringfor enums (#1011)
- Document + test limitations of
Callable::from_local_static()(#1004) - Document builtin API design (#999)
31 December 2024
- Feature parity with Godot builtin types
- Support static functions in
Callable(#989) - Codegen can directly expose
Inner*builtin methods (#976) - Generate builtin methods with varargs (#977)
- More accurately provide spans to errors in the
GodotClassmacro (#920) - Improve some proc-macro attribute error messages (#971)
- Add required virtual method
IScriptInstance::get_doc_class_name()in test (#975) - Clean up
Callable+ tests, fixcheck.sh test(#990)
- Improve docs in
DynGd(re-enrichment) + Cargo features (#969)
8 December 2024
#[godot_api(secondary)]for multiple impl blocks (#927)DynGd<T, D>smart pointer for Rust-side dynamic dispatch (#953, #958)Callable::from_local_fn()+Callable::from_sync_fn()(#965)- Add
Variant::object_id()(#914)
#[gdextension]macro: renameentry_point->entry_symboland write docs (#959)- Use
GDExtensionCallableCustomInfo2instead of deprecatedGDExtensionCallableCustomInfo(#952) sys::short_type_name, conversions and relaxedGodotType(#957)- Clippy (elided lifetimes) + rustfmt (#956)
- Add test verifying that custom callables don't crash when
Erris returned (#950) - Minor signal cleanup; prevent
#[signal]from being used in secondary impl blocks (#964)
- Fix
#[godot_dyn]causing error when implemented for two traits (#962) - Prevent abort on double-panic if single-threading check fails (#965)
#[gdextension]macro: renameentry_point->entry_symboland write docs (#959)- Helpful doc aliases:
func,var,init, .. (#960)
15 November 2024
See devlog article for highlights.
- Godot 4.3 support in CI and
api-4-3feature (#859) - π Drop support for Godot 4.0 (#820)
- π Ergonomic arguments
- Godot docs from RustDoc comments
- RPC attributes
- Add
#[rpc]attribute to user-defined functions (#902)
- Add
- Registration APIs
- Enums
- Required virtual functions
- Conversions + operators
RawGd: cache pointer to internal storage (#831)ClassNamenow dynamic and faster (#834)- Pass-by-ref for non-
Copybuiltins (backend) (#906)
- Renames and removals
- π Remove deprecated symbols from before v0.1 (#808)
- Deprecate instance utilities in
godot::global(#901) - Shorten
#[init(default = ...)]to#[init(val = ...)](#844) #[class]attribute: renamehidden->internal, deprecateeditor_plugin(#884)- Cleanup around
godot::metaargument conversions (#948) - Remove
to_2d()+to_3d(); clean upApiParam(#943) - π Simplify property hint APIs (#838)
- Validation
- Fix validation for
api-*mutual exclusivity (#809) - Validate that virtual extension classes require
#[class(tool)](#850) - Validate that editor plugin classes require
#[class(tool)](#852) - Best-effort checks for
Array<Integer>conversions; fixDebugfor variants containing typed arrays (#853) - π Disallow
Exportif class doesn't inheritNodeorResource(#839) - π Validate that Nodes can only be exported from Node-derived classes (#841)
- Fix validation for
- CI and tooling
- Code generation and Godot APIs
- Upstream follow-up
- Panics
- Refactoring
- Argument passing
- Godot doc generation from RustDoc
- Registration
- Fix
Array<T>registered without element type (#836) - Virtual methods now take
Option<Gd<T>>(unless whitelisted) (#883) - Make arrays exportable only when their inner type is exportable (#875)
- Display script-virtual methods as
_methodinstead ofmethodin Godot docs (#918) - Implement the
safe_identstrategy for virtual call parameter identifier generation (#822)
- Fix
- FFI and memory safety
- Tooling and dependencies
- Math
Vecor3::sign()gives incorrect results due toi32conversion (#865)
- Builtin docs (impl blocks, navigation table, link to Godot) (#821)
- Add docs for
#[rpc](#949) - Overview about type conversions (#833)
- Document
godot::metaargument conversions (#948) - Add a doc to point users to kwarg builders (#876)
- Resolve doc warning with global enums (#896)
- ReadMe update + clippy error (#929)
22 July 2024
- Add helpful error for renamed Wasm module (#799)
- More thoroughly document
unsafeingodot-ffi(#774)
- Map
Vector3i.Axisenum to builtinVector3Axis(#797) - Prevent
out!from actually formatting the input if disabled (#801) - Disable
main_thread_idassertion for Android debug build (#780) GdCell::borrow_mutshould block on main thread if shared ref exists (#787)
15 July 2024
- Add more
normalizedfunctions (#761) - Add conversion from
Vec<$Element>to$PackedArraytypes (#785) - Add
snappedto integer vectors (#768) - Add determinant to
Transform2D(#770) - Support
#[export(range = (radians_as_degrees, suffix=XX))](#783) - Add support for
nothreadsWasm builds (Godot 4.3+) (#794)
- Reorder compile errors for
#[derive(GodotClass)](#773) - Change
Globalto useOnce(#752) - Prevent global
CallErrortracker from growing indefinitely (#798)
- Change logic to disable
OpenXRfor iOS (#781) - Pointer is already
*const u32on aarch64 (#788) - Handle panics in virtual interface methods (#757)
- Document why
Basiscolumns area,b, andc(#776)
24 June 2024
Initial release on crates.io. See devlog article.