All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
- Revamped 3D animation storage.
- New blend shape track to adjust blend shapes in animations more efficiently.
 - New expression-based transitions in AnimationTree state machines.
 - Support for animation compression to improve performance with long animations such as cutscenes.
 - Replaced transform tracks by position, rotation and scale tracks.
 - Removed the animation dependency on bone rests.
- Better compatibility with models that use non-uniform scaling in animations.
 - Better compatibility with models exported from Maya and 3DS Max.
 - Easier animation reuse across different models.
 - Easier procedural generation of animations.
 
 
 
- New TileMap and TileSet resources.
 - New Vector2i, Vector3i and Rect2i types.
- These are integer variants of Vector2, Vector3 and Rect2.
 
 - Callable type for first-class functions (can be created with lambdas in GDScript).
 - The Euler rotation order can now be adjusted in Node3D.
 - New 
Array.map(),Array.filter()andArray.reduce()methods that can be used with Callables. - Rewritten Tween with more functionality.
- Tween is no longer a node.
 - Easier chaining of tweens.
 - Low-level tweening option to get an interpolated value directly.
 - Existing projects will have to be modified to account for this, as automatic conversion isn't feasible.
 
 - New and improved IK in Skeleton2D.
- New classes: SkeletonModifier2D, SkeletonModifierStack2D, SkeletonModification2DLookAt, SkeletonModification2DCCDIK, SkeletonModification2DFABRIK, SkeletonModification2DJiggle, SkeletonModification2DTwoBoneIK, PhysicalBone2D, SkeletonModification2DPhysicalBones, SkeletonModification2DStackHolder.
 - New 
Transform2D.looking_at()function. 
 - New and improved IK in Skeleton3D.
- New classes: SkeletonModifier3D, SkeletonModifierStack3D, SkeletonModifier3DLookAt, SkeletonModification3DCCDIK, SkeletonModification3DFABRIK, SkeletonModification3DJiggle, SkeletonModification3DTwoBoneIK, SkeletonModification3DStackHolder.
 - The Bone struct now includes a local_pose_override.
 - The Bone struct now keeps track of its children bones, if it has any.
 - Added functions to Skeleton3D for getting the forward vector using the information stored in the rest pose for the bones.
 - New 
Basis.rotate_to_align()function. - Refactored the BoneAttachment3D node.
 - Removed the 
process_listfunctions. 
 - New GradientTexture2D resource (useful for 2D lights, particles, …).
 - Support for gettext PO template generation from scene and script files.
- Translation parser plugins can be written to allow extracting strings from custom file types.
 
 - New Time singleton to replace date/time handling methods in the OS singleton.
- Includes new methods to handle ISO 8601 timestamp conversion.
 
 - Support for custom performance monitors.
 - New 
randi_range()global scope function to return a random integer number within a range. - New 
randfn()global scope function to return a floating-point number along a normal gaussian distribution. - New 
pingpong()global scope function to return a floating-point number that increments then decrements in a "sawtooth" fashion. - Vectors and Colors can now be clamped between two values their respective 
clamp()methods. - New 
Vector3.limit_length()method as a Vector3 counterpart toVector2.limit_length()(formerlyVector2.clamped()). - New PackedArrays to replace PoolArrays.
- 64-bit integer and float arrays are now available in addition to the existing 32-bit ones.
 
 - New 
ConfigFile.parse(data: String)method to load a string as if it was a ConfigFile on disk. - New 
Image.save_png_to_buffer()method to save a PNG image to memory as a PackedByteArray (instead of saving to disk). - New File API to check, read and write symbolic links on macOS and Linux.
 - Replaced GDNative with GDExtension.
- Easier setup and compilation for various platforms.
 - Code structure is more similar to statically compiled C++ modules.
 - Lower performance overhead compared to GDNative.
 
 
- New TileMap and TileSet editors with better usability.
 - Support for multiple windows.
- Docks can be moved out of the main window into separate windows.
 - Single-window mode can be enabled in the Editor Settings to revert to the old behavior.
 
 - New dynamic infinite 3D grid, replacing the fixed 3D grid.
 - Movement and scaling handles in the 2D editor (similar to the 3D editor).
 - New Replace in Files dialog in the script editor to complement Find in Files.
 - Holding down Ctrl while drag-and-dropping a resource from the FileSystem dock to the script editor will now add 
preload()to the pasted resource path. - New settings to change the freelook navigation scheme:
- Default.
 - Partially axis-locked (similar to id Tech and Source's noclip modes). The Up and Down keys won't take the current view pitch into account.
 - Fully axis-locked (similar to Minecraft). The Forward, Backward, Up and Down keys won't take the current view pitch into account.
 
 - macOS: More built-in mouse cursors are now exposed (such as diagonal resize cursors).
 - macOS: Support for building Godot with Clang sanitizers.
 - HTML5: Support for profiling projects exported to HTML5.
 
- macOS: Projects can now optionally be exported to a application bundle contained within a ZIP archive.
- Previously, a DMG image was always used when exporting from macOS.
 
 - macOS: DMG images can now be codesigned after exporting.
 
- GDScript was rewritten from scratch with a cleaner approach.
 - New documentation generation system.
- Comments starting with 
##are considered documentation comments. - Documentation comments be placed before any member variable, constant, enum or function declaration, or at the top of a file.
 - Documentation comments appear in the editor help and when hovering exported properties in the inspector.
 
 - Comments starting with 
 
- Support for multiple windows on desktop platforms. Projects can spawn additional windows, each with their own viewport.
- Added 
NOTIFICATION_APPLICATION_FOCUS_INandNOTIFICATION_APPLICATION_FOCUS_OUTnotifications for "global" project focus changes (separate fromNOTIFICATION_WM_FOCUS_INandNOTIFICATION_WM_FOCUS_OUT). 
 - Added 
 - RichTextLabel property 
fit_content_heightto make the label's height fit its content automatically (not always reliable). - RichTextLabel's 
imgtag now supports an optionalcolorattribute to modulate the image. get_char_size()is now exposed in Font, making it usable in DynamicFont rather than being limited to BitmapFont.- Tree can now highlight relationship lines for the currently selected item, its parents and direct children.
- This is used in the scene tree dock in the editor.
 
 
- Support for importing lights from glTF scenes.
 
- Support for physical (keyboard layout-independent) key codes.
- This can be used to provide W/A/S/D controls that work on any keyboard layout.
 
 DisplayServer.keyboard_get_current_layout()andDisplayServer.keyboard_get_layout_*()methods to get information about keyboard layouts.- New 
Input.MOUSE_MODE_CONFINED_HIDDENmouse mode to combine the confined and hidden mouse modes. 
- Support for exporting C# projects to iOS and HTML5.
 - C# events can now be used to implement Godot signals.
 - New Visual Studio and Visual Studio Code add-ons.
 
- New NavigationServer.
- Support for dynamic obstacle avoidance.
 
 
- New DisplayServer abstraction, allowing for the creation of multiple windows.
- This is used in the editor for detachable docks, but can also be used in projects.
 
 - Android: Allow basic user data backup. This can be disabled in the export preset if needed.
 - Android: Support for changing the mouse cursor shape (no custom images).
 - iOS: The targeted device family (iPhone, iPad, iPhone and iPad) can now be specified in the export preset.
 
- New CharacterBody node to supersede KinematicBody.
- Some KinematicBody features were moved to PhysicsBody.
 
 
- Android: Clients of the Godot library can now add their own command line arguments.
 
- New Vulkan renderer.
 - New OpenGL renderer, using OpenGL 3.3/OpenGL ES 3.0/WebGL 2.0 as a baseline.
- Designed to target mobile/web platforms first, but also usable on desktop platforms.
 - Uses a low-end-friendly approach to maximize performance in simple scenes.
 - Currently supports 2D rendering only.
 - OpenGL 3D rendering is planned for a future 4.x release.
 
 - Support for specular mapping when using 2D lighting.
 - New DirectionalLight2D node for 2D lighting.
 - CanvasGroup node to modulate several 2D nodes as a group (or apply shaders to them).
 - Support for clipping in CanvasItem, replacing the use of Light2D as masks in a more convenient manner.
 - Support for light projectors/"cookies" in OmniLight3D and SpotLight3D.
- Only supported for lights with shadows enabled.
 
 - 3D lights now have a Size property which can be set to simulate area lights.
- This property also affects how fast shadow penumbras will grow over distance.
 - A shadow blur property is also available to set a constant blurring factor on a per-light basis.
 
 - Shadow mapping with improved filtering and PCSS-like penumbra simulation.
- Shadow normal offset bias is now implemented to avoid issues with shadow acne or peter-panning.
 
 - New Decal node to project textures onto 3D surfaces.
 - New fully real-time VoxelGI (formerly GIProbe).
- Dynamic lights and emissive can emit GI that's updated every frame (instead of only updating sporadically).
 - Dynamic objects can receive GI and contribute to it.
 
 - New signed distance field-based global illumination (SDFGI) for open world lighting.
- Enabled in the WorldEnvironment. No node required, no baking.
 - Semi-realtime: dynamic objects can receive GI, but not contribute to it.
 
 - Volumetric fog with optional GI contribution.
 - Fog volumes to locally apply volumetric fog (or subtract to global fog using negative density).
 - More physically accurate exponential fog to replace the old distance-based fog.
 - New Aerial Scattering property in distance-based fog to fade out to the background sky instead of a fixed color.
- Also available in volumetric fog with the Ambient Inject property.
 
 - New GPU-based lightmapper.
- When using a dedicated GPU, this results in much faster bake speeds compared to the CPU lightmapper.
 - Optional support for storing directional lighting information and rough reflections using spherical harmonics.
 - Improved support for lighting dynamic objects with better performance and quality.
 - In addition to automatic generation, LightmapProbe nodes can now be placed manually to provide better lighting information for dynamic objects where needed.
 
 - Physical sky material and custom sky shaders, both supporting real-time updates.
 - Global and per-instance shader uniforms.
- This can be used to better reuse shaders, leading to improved performance.
 
 - Support for automatically generating and using mesh LODs to improve performance.
- Several LOD levels are generated for imported 3D scenes by default.
 - LODs are automatically used for mesh rendering using a pixel coverage-based selection algorithm.
 - Uses the meshoptimizer library.
 
 - Support for LOD visibility ranges in GeometryInstance3D.
- Manually authored LODs can be configured using distance and hysteresis cutoffs.
 - Can be used for HLOD setups to reduce draw calls while preserving culling opportunities when up close.
 
 - Support for GeometryInstance3D distance fade to make distant meshes disappear smoothly without having to modify their material.
 - Support for automatically generating and using shadow meshes to improve performance.
- The generated shadow meshes are welded aggressively to improve performance with no difference in visual quality.
 - To further improve performance, hand-made shadow meshes can be specified in the inspector in MeshInstance nodes.
 
 - Support for rendering a viewport's 3D contents at a lower resolution to improve performance.
- 2D elements remain at full resolution to improve perceived sharpness.
 - A scaling factor above 1.0 can be used for supersampling, which is useful to maximize quality for offline rendering.
 
 - See individual progress reports for more information: #1, #2, #3, #4, #5, #6, #7.
 
- New shader compiler rewritten from scratch.
- Support for uniform arrays (including sampler arrays).
 - Arrays can now be passed as function parameters (including arrays of structs).
 - The return type of a function can now be an array (including arrays of structs).
 - Array size can now be optionally written before the identifier (
int[2] array;instead ofint array[2]).- This eases porting shaders from GLSL.
 
 - Array constructors can now be called at any time after initialization.
- For example, 
int array[3]; array = {1, 2, 3}is now valid. 
 - For example, 
 - New 
fma()(fused multiply-add) built-in function to optimize shaders in a low-level way. - New built-in data (un)packing functions to optimize shaders in a low-level way.
 - Warning system for common issues such as floating-point comparison and unused variables.
 - Argument names now appear in code completion tooltips.
 - More information in the progress report.
 
 - Add Billboard mode to visual shaders.
 - The constants 
PI,TAUandEare now available in the shader language. 
- The engine is now unit-tested using doctest.
 - Switched from Travis CI and AppVeyor to GitHub Actions.
 - A Fish shell completion file is now available for the Godot editor's command line interface.
 
- Increased the default AudioStreamPlayer3D unit size to (1 → 10) to make sounds more audible while setting up the node.
 - Renamed the audio-related 
FFT_Sizeenum toFFTSizefor consistency. 
- Tweaked the output strings to be more human-readable when printing various built-in Variant and Object types.
 - Renamed File's 
endian_swapproperty tobig_endianfor consistency with ResourceSaver and StreamPeer. - Renamed File's 
get_len()method toget_length(). - Renamed Object's 
PROPERTY_USAGE_NOEDITORtoPROPERTY_USAGE_NO_EDITOR. - Renamed 
Vector2.clamped()toVector2.limit_length()to differentiate it from the newVector2.clamp(). - Renamed 
rand_range()torandf_range()to avoid ambiguity with the newrandi_range()and make its return type more obvious. - Replaced 
Node.add_child_below_node()withNode.add_sibling(). - Replaced 
Directory.list_dir_begin()'sskip_navigationalandskip_hiddenarguments withshow_navigationalandshow_hidden.- Both arguments are 
falseby default, which means the default behavior is now to exclude both navigational and hidden files from the returned list. 
 - Both arguments are 
 - Renamed the built-in Quat type to Quaternion.
 - Renamed the built-in Transform type to Transform3D.
 - Renamed Node3D's 
translationproperty topositionfor consistency with Node2D. - Moved YSort functionality to a Node2D property.
 - Viewports now use a size of 512×512 by default to make them visible out of the box.
 - Screen orientation is now represented as an enum in the Project Settings.
 - Renamed 3D nodes to contain an explicit "3D" prefix for clarity and consistency.
 - Renamed various nodes:
- Spatial → Node3D
 - GIProbe → VoxelGI
 - BakedLightmap → LightmapGI
 - Light2D -> PointLight2D
 - VisibilityNotifier2D -> VisibleOnScreenNotifier2D
 - VisibilityNotifier3D -> VisibleOnScreenNotifier3D
 - VisibilityEnabler2D -> VisibleOnScreenEnabler2D
 - VisibilityEnabler3D -> VisibleOnScreenEnabler3D
 
 - Renamed various resources:
- GradientTexture -> GradientTexture1D
 
 - Old node and resource names are automatically converted when loading scenes from Godot 3.x.
 
- Renewed the editor theme for a more modern design.
- Increased icon saturation by 30% when using a dark theme.
- Icon saturation can now be adjusted in the Editor Settings.
 
 
 - Increased icon saturation by 30% when using a dark theme.
 - Improved the audio bus editor appearance.
 - Improved layout and texts of the Manage Editor Features dialog.
 - Improved the Video RAM debugger usability.
- The Video RAM tab is now refreshed automatically when switching to it.
 
 - Hovering layer checkboxes in the inspector now results in visual feedback.
- Clicking between two checkboxes will now enable the checkbox that was last highlighted instead of doing nothing.
 
 - CSV profiler measures can now be saved anywhere on the filesystem, not just in the project folder.
 - Improved the 2D zooming algorithm to always visit powers of two (50%, 100%, 200%, …) and avoid floating-point precision issues.
 - Times are now displayed as milliseconds in the profiler and performance monitors (instead of seconds).
 - Improved the batch rename dialog usability and design consistency.
- Clarified error messages when there are regular expression errors.
 
 - Optimized editor icon generation to speed up editor startup.
 - Script editor autocompletion now displays previews next to color constant suggestions.
 - The number of replaced results now appears in place of the matches counter when replacing text in the script editor.
 - Pressing Enter (or Shift + Enter) in the script editor replacement dialog now performs a forwards (or backwards) replacement operation.
 - Pressing Ctrl + F now focuses the search field in the AssetLib tab.
 - Pressing G now switches to the Pan mode in the 2D editor.
- The TileMap editor's Bucket Fill shortcut was moved to B to cater for this change.
 
 - Mouse wheel behavior for zooming in the animation behavior is now inverted.
 - The Sync Scene Changes and Sync Script Changes settings' values now persist on a per-project basis instead of being always enabled by default.
 - Various tooltips have been added or modified to clarify the editor operation.
 - Various visual and formatting changes to the editor help to improve readability and be closer to the online class reference.
 - Tweaked Camera2D editor line colors for better visibility.
 - Light theme presets now use a negative contrast rate by default for a more logical preview of UI elevation.
 - Increased the use of bold fonts throughout the editor.
 - Revised icons for the Gradient and GradientTexture resources.
 - Renamed "Identifier" to "Bundle Identifier" in the macOS and iOS export presets for clarity.
 - Renamed the script editor's "Adaptive" syntax theme to "Default" and "Default" to "Godot 2", for consistency with the editor theme presets.
 - Flipped the 2D editor icon to match Godot's coordinate handedness.
 
- Improved drive letter handling in EditorFileDialog and FileDialog.
 - Container nodes (except PanelContainer) now use the Pass mouse mode by default.
 - Pressing the left/right arrows while having selected text will now move the cursor to the beginning/end of the selection in LineEdit (while unselecting the text as usual).
 - TextEdit's 
search()method now returns a Dictionary instead of a PackedIntArray. - macOS: The Ctrl + A and Ctrl + E navigation shortcuts now work in LineEdit.
 
- Renamed InputEventKey's 
scancodetokeycode. - Renamed InputMap's 
get_action_list()toget_action_events(). 
- Optimized bandwidth usage in the high-level multiplayer API.
 
- Split KinematicBody into the new CharacterBody node and PhysicsBody.
 - RayCast nodes are now enabled by default.
- The 
disabledproperty was renamed toenabledwith its behavior inverted. 
 - The 
 - Renamed PlaneShape to WorldBoundaryShape.
 
- Some Environment settings such as depth of field have been moved to a CameraEffects resource which is assigned to individual Camera nodes.
 - The ACES Fitted tonemapping algoirthm is now used in place of the old ACES algorithm.
- The old non-fitted ACES tonemapping algorithm was removed.
 
 - Quality settings have been moved from individual nodes and resources to the Project Settings for better centralization.
 - Quality settings now have performance hints in their values' names, such as "Fast" or "Slow".
 
- Renamed the 
.shaderfile extension to.gdshader.- Existing text-based shader files will have to be renamed before loading the project in a new engine version.
 
 
- Renamed the 
x11platform tolinuxbsdto prepare for Wayland support. - The engine is now written in C++17.
 - Python 3.6 and SCons 3.1 are now required to build Godot from source.
 
- Removed the 
serverplatform in favor of disabling specific DisplayServers at build-time (e.g.vulkan=no). 
- Removed the YSort node in favor of the Node2D YSort property.
 - Removed the deprecated 
Color.gray()method.- Use 
Color.v()for a better grayscale approximation instead. 
 - Use 
 - Removed built-in HQ2X implementation (used for crude hiDPI support in the default project theme).
- This helps with binary size as HQ2X is made of particularly large functions.
 
 
- Removed the Dim Dialog on Editor Popup editor setting since it was made obsolete by the multi-window paradigm.
 
- Removed the ToolButton node in favor of Button.
- Existing ToolButton nodes from Godot 3.x projects will be converted to Button nodes.
 
 
- Removed the 
DisplayServer.get_latin_keyboard_variant()method (replaced by the more flexibleDisplayServer.keyboard_get_current_layout()). 
- Removed the deprecated 
allow_object_decodingproperty from PacketPeer. - Removed the deprecated 
syncandslavehigh-level multiplayer keywords. 
- Removed the deprecated PhysicsBody 
frictionandbounceproperties (replaced by PhysicsMaterial). 
- Removed OpenGL ES 2.0 renderer (replaced by the new mobile-oriented OpenGL 3 renderer).
- Vulkan, OpenGL 3.3, OpenGL ES 3.0 or WebGL 2.0 support is now required to run Godot.
 
 - Removed support for 16× MSAA due to driver bugs and low performance.
- For high-quality offline rendering, using supersampling together with 8× MSAA is a better option anyway.
 
 
- The positional command line argument now considers 
.resand.tresfiles as runnable scene formats.- This fixes Godot not running the main scene or a custom scene if they were saved with a 
.resor.tresextension. 
 - This fixes Godot not running the main scene or a custom scene if they were saved with a 
 - macOS/Linux: Fix the result of 
Directory.get_space_left(). - Windows: Godot can now kill its own PID using 
OS.kill(). 
- The Android exporter no longer reports progress on each file, greatly speeding up the exporting process.
 - Searching with the Whole Words option enabled in the script editor is no longer exceedingly slow.
 
- Fixed OptionButton minimum size.
 - TabContainer is no longer too large when tabs are hidden.
 - ScrollBar now allows using 
scroll_to_line()when Scroll Active is disabled. - DynamicFont outlines now have antialiasing disabled if it was disabled on the font itself.
 
- Windows: 
OS.execute()now only quotes command line arguments if they contain special characters. 
I don't know how to pull request a Gist but there is a typo:
NOIFICATION_APP_PAUSED⮞NOTIFICATION_APP_PAUSED