- Unified Wang and Terrain tools (backwards incompatible change!)
- Added support for a per-layer parallax scrolling factor (#2951)
- Added export to GameMaker Studio 2.3 (#1642)
- Added option to change object selection behavior (#2865)
- Added Monospace option to the multi-line text editor
- Added option to auto-scroll on middle click
- Added smooth scrolling option for arrow keys
- Added a 'Convert to Polygon' action for rectangle objects
- Added support for drawing with a blob tileset
- Added 'Duplicate Terrain Set' action
- Added Terrain Set type (Corner, Edge or Mixed)
- Added support for rotating and flipping Terrain tiles (by Christof Petig, #2912)
- Added support for exporting to RPTools MapTool RpMap files (by Christof Petig, #2926)
- Added Ctrl+Shift to toggle Snap to Fine Grid (by sverx, #2895)
- Eraser: Added Shift to erase on all layers (by Michael Aganier, #2897)
- Automatically add .world extension to new World files
- Shape Fill Tool now displays the size of the current shape (#2808)
- Tile Collision Editor: Added action to add an auto-detected bounding box collision rectangle (by Robin Macharg, #1960)
- Tile Collision Editor: Added context menu action to copy selected collision objects to all other selected tiles (by Robin Macharg, #1960)
- Tilesets view: Added "Edit Tileset" action to tab context menu
- Tilesets view: Added "Add External Tileset" action to tilesets menu
- Scripting: Added initial API for creating and modifying Terrain Sets
- Scripting: Added API for working with images (#2787)
- Scripting: Added API for launching other processes (#2783)
- Scripting: Added MapView.center property
- Scripting: Added missing Layer.id and Layer.parentLayer properties
- Scripting: Enable extending most context menus
- Scripting: Fixed reset of file formats on script reload (#2911)
- Scripting: Fixed missing GroupLayer and ImageLayer constructors
- Scripting: Added default icon for scripted actions
- Enabled high-DPI scaling on Linux and changed rounding policy
- Remember last file dialog locations in the session instead of globally
- Fixed loading extension path from project config (by Peter Ruibal, #2956)
- Fixed performance issues when using a lot of custom properties
- Fixed storing template instance size when overriding the tile (#2889)
- Fixed removal of object reference arrow when deleting target object (#2944)
- Fixed updating of object references when layer visibility changes
- Fixed map positioning issues in the World Tool (#2970)
- Fixed handling of Shift modifiers in Bucket and Shape Fill tools (#2883)
- Fixed scrolling speed in Tileset view when holding Ctrl
- Fixed issue causing export.target to get written out as "."
- Fixed "Repeat last export on save" when using Save All (#2969)
- Fixed interaction shape for rectangle objects to be more precise (#2999)
- Fixed "AutoMap While Drawing" not applying when using Cut/Delete
- Fixed path in AutoMap error message when rules file doesn't exist
- Lua plugin: Don't embed external tilesets, unless enabled as export option (#2120)
- Python plugin: Added missing values to MapObject.Shape enum (#2898)
- Python plugin: Fixed linking issue when compiling against Python 3.8
- CSV plugin: Include flipping flags in exported tile IDs
- GMX plugin: Take tile object alignment into account
- Linux: "Open Containing Folder" action now also selects the file
- libtiled-java: Many updates (by Henri Viitanen, #2207)
- Ported Tiled to Qt 6 (releases still use 5.15 for now)
- Updated Bulgarian, Chinese (Simplified), Czech, Finnish, French, Portuguese, Portuguese (Portugal), Russian, Swedish and Turkish translations