Development Updates

New Update Style

I’m kicking off 2017 with a new format for the development updates, since I’ve noticed that the ones I wrote so far are simply taking too much time to write, and not that many people are reading them. I’d like to spend that time writing something more useful, like code and documentation.

In addition, I’m working to add a blog back to the Tiled website, so that new releases and new features get more visibility. Tiled has changed so much in the past year and gained many interesting features, but there’s sadly nothing about it on the website.

Last year, I managed to finish the Tiled 0.18 release and after that I was on holiday doing family visits. I started working on Tiled again on 2nd of January, mostly catching up with e-mails. Without further ado, here’s what happened in January so far:



  • Fixed processor architecture of shipped MSVC DLLs (7fcd786)


  • Made safe writing of files optional (#1402, #1404)
  • Changed Alt-drag behavior to not override resize handles (#1425)


  • Added invert selection action (by leonidax, #1428)


  • Fixed crash when resizing map causes objects to get removed (ad3eb5b)
  • Fixed position of image layer after Resize or Offset Map (#1418)
  • Added Ctrl+I as shortcut for Invert Selection (4164dcf)
  • Fixed tile collision editor getting disabled permanently (dfd7834)
  • Allow setting up the orientation and grid size of a tileset (#757, #419)


  • GmxPlugin: Fixed positioning and support scaling for instances (#1426)
  • GmxPlugin: Export tile objects without a type as tiles (8461607)
  • GmxPlugin: Support horizontal and vertical flipping (e6d8a32)
  • Moved Layer::width/height members to TileLayer (688ec7d)


  • Fixed terrain brush for isometric staggered maps (by luyungeng, #1430)


  • Fixed encoding problems with command-line output (#1381)


  • Travis CI: Fixed the build for pull requests from forks (00ddf6e)
  • Travis CI: Update clang build to compile against Qt 5.4.2 (f4354fc)

Looking Ahead

With all the fixes that have been made on the 0.18 branch, it’s time for a Tiled 0.18.1 release. Also, I’m currently working on the layer grouping feature so I’m hoping to make some good progress with that.

1 Like

If you wanted me to help with your site, I could add the updates information. I know how hard it is to maintain a site. You can PM me if you are interested.



I did some cleanup while working on support for group layers:

  • f4f85a8 Unified New Layer menu actions
  • eb44b06 Python plugin: Removed Layer.setMap from bindings

Also, since I don’t like how Tiled looks when simply scaled up and because I’m getting annoyed by related bugs, I also worked to improve DPI-awareness in many places. Apart from the icons, Tiled now looks quite decent on any DPI. Here’s Tiled at 160 DPI:



  • fe6b62b When adding a new layer, insert it above the current one


  • d025687 More DPI-awareness in Tiled Fusion style
  • 90c365e Fixed a warning from QObject::disconnect
  • 036a3ca Replaced some foreach loops with modern for-loops
  • f32e836 Added diagonal mirroring mode to terrain brush
  • fd2796b Terrain Brush: Changed the way the mirroring works

That last one is really neat. It was requested by a developer of AsteriodFight, a team based action RTS, and it makes it easier to create maps with equal opportunities for both sides, like for example:


  • 5500c56 Added GroupLayer and GroupLayerItem
  • 497ad3b Added saving and loading for GroupLayers


  • 0f7cc18 Add some Chinese translation (PR #1432)
  • ea50425 Fixed a crash when duplicating an object layer (regression in 0.18.0)
  • 66bdcee Fixed changing properties of multiple objects (regression on master)
  • c717d5a Windows Installer: Fixed selection of the right MSVC DLL once more (#1338)
  • Released Tiled 0.18.1
1 Like


I worked most of the day on group layers, but didn’t finish that commit since the change kept getting bigger. I was removing all usages of “layer index” and replacing most of them with a direct layer reference, since working with an index is not going to work when the layers form a hierarchy. I also made a start on changing the LayerModel from a list model to a tree model.

  • Added gmx plugin to Specfile (PR #1434)


I realized the Tiled 0.18.1 upgrade wasn’t working properly on Windows in general, and made an attempt at resolving the situation. It didn’t work out, unfortunately.


While testing some group layer related functionality, I discovered two additional regressions in Tiled 0.18 and fixed them:

  • 4f45b7e Fixed updating of values displayed in Objects and Layers views
  • ee4f898 Fixed crash when deleting multiple selected objects

I think they’re quite serious, so I’ll have to make a Tiled 0.18.2 release sometime soon.



  • c0bcca7 Removed most usages of layer index (finished the work I started on the 24th)
  • b4212d8 Added Group Layer and Ungroup Layer actions
  • 5f29613 Added support for group layers in the MapScene


Google Summer of Code 2017

In the morning I tweaked the application for Tiled to Google Summer of Code and made minor improvements to our GSoC wiki page, started by @leonidax. Wouldn’t it be awesome to make some great contribution to Tiled this summer, with professional game developers lending a hand? We’re trying to make it happen!


  • 782893a Added support for layer hierarchy to several actions
  • a02c667 Fixed up restoring of previously selected layer
  • 3af6758 Handle layer hierarchy in Offset Map dialog
  • 4d15a49 More adjustment to handle layer hierarchy

At this point, I have realized that adding support for group layers was way more work than I had anticipated. I had expected it to take about 3 full days, but I have now spent almost 5 full days on it and it’s not done yet. It also asks for other features like multi-selection and drag-and-drop for layers, though I will probably merge it and work on some other things before that.

But of course, it’s also going to be a very useful feature for some! Here’s a screenshot showing a little bit of the current state:



Somehow I found some time on Friday to fix two more group-layer related issues:

  • 7106d93 Fixed the Show/Hide all Other Layers action for grouped layers
  • 86482b8 Fixed an issue with the Move Layer Down action on group layers


  • 6f99802 Fixed the Move Layer Down action some more

I spent the rest of the day adding support for layer groups to the data model used for the Objects view, but I didn’t manage to finish it yet.


Today I made a huge amount of progress on group layer support and eventually pushed it to the development snapshots. Highlights inlude:

  • 539989d Support group layers in the Objects view
  • d2771fc Fixed group layer handling in layer combo box
  • 38712a4 Used the standard directory icon for the group layers
  • 1b49e06 Fixed handling of group layer offset
  • f4b1f99 Added handling of group layers to tmxrasterizer

I also found some time for fun things like:

  • 1ecd50a Replaced include guards with #pragma once
  • 026e653 Updated copyright year in About dialog


With the group layers mostly done (and still awaiting your feedback), I moved on to adding a Text object. This was not only a much requested feature (#193, #1429), but it even has a $100 bounty. I estimated it would take me only one day, but it turned out to be rather more work.

Some small changes committed today:

  • f0d8687 Tried to improve the readability of MapObject class a little
  • 5682582 Replaced more foreach with range-based for


  • 468e606 QtPropertyBrowser: Font-property changes
  • 33e048b Added a Text object

The first change was necessary because the QtPropertyBrowser was using point size, whereas for Tiled to display text objects at the same size regardless of the DPI of the display, the font size needed to be specified in pixels.

Support for the new Text object isn’t entirely finished yet, since there is no way to change the alignment of the text yet. It could also be extended in various other ways, including possible support for bitmap fonts. However, it already has a lot of features including color, font style and word wrapping. Here’s a screenshot I made to show it off:

If you’re interested, please give it a try by using a development snapshot!


  • d991aa8 Fixed properties displayed when clicking nested layers (#1449)
  • 02ba8cd Object Types Editor: Improved behavior when adding new types (#1448)
  • 4d06bd7 Bumped version to 0.18.2 and updated NEWS file
  • 1147768 Travis CI: Use linuxdeployqt release 2

I had hoped to still be able to release Tiled 0.18.2 this day, but there were some missing Qt image format plugins in the Linux binary package.


  • 7ca1e19 Travis CI: Install additional Qt image format plugins (#1444)
  • d3f1996 Link to QtSvg when creating a Linux binary archive
  • ec1f3cc Fixed up release day for 0.18.2

After making the Tiled 0.18.2 release, I started working on inheriting tile properties and inheriting the type from the tile for tile objects.


  • 5ab9bb9 Added Tile.type and inherit tile object properties from the tile (#432, #436, #1248)
  • 71ee0a4 Removed no longer needed public emitX functions
  • 84ec154 Fixed a possible crash when selecting objects while editing a tileset
  • 07347c4 Fixed a small regression regarding label color updating

The first commit is a big new feature that took me most of the day. It is now included in the snapshot builds, but it’s something I’ll still have to document thoroughly.

Also, Tiled got accepted for the Google Summer of Code 2017!


  • 0087318 Added brief contributing guidelines
  • 6dc2213 Added short and consistent map format names to use with --export-map (by Marce Coll, PR #1454, #1382)
  • 2c6cde6 Added Swap Tiles action (by Alexander Münch, PR #866)
  • b52338c Made the Swap Tiles command work on the entire map

Apart from merging two pull requests, I’ve reviewed two more (#1446 and #1457), which I hope to be able to merge next week!

It’s great to see so many new people looking to contribute to Tiled, mostly driven by the opportunity to work on Tiled during the summer! It reminds me how lonely I’m usually going about developing Tiled and that it’s worth putting time and money into encouraging others to participate.

In the same vein, I want to thank again all my awesome patrons for enabling me to work on Tiled! To those not being a patron yet, please join if you can. Upon reaching my goal of having two days/week fully funded, all additional donations will go towards encouraging more people to work on Tiled, through bounties on BountySource.

1 Like

Code Review Time!

This month has so far been characterized by an overwhelming amount of repeatedly reviewing pull requests, as well as digging through loads of feedback, especially from @eevee in his monster post. The huge pull request activity is due to the upcoming Google Summer of Code 2017 and our acceptance into that program. For the last two weeks I barely had time to code myself, but it’s great to see so much interest from students to contribute to Tiled!




  • 388bd94 Changed the eye icon again
  • 2ea0b28 Tweaked setting the current object when switching layers
  • fae6ebd Support 60 degree rotation for hexagonal maps by Victor Nicolaichuk (PR #1447)
  • 4dd3671 Add Ctrl+Y as possible redo shortcut
  • 5634162 Fixed Offset Layers tool to wait with dragging
  • bcf6f3e Always update current stamp when a tile is clicked





  • 2efca7d Qbs: Removed obsolete dependency on Qt.opengl
  • f53b0ba Qbs: Added option to install the libtiled header files
  • 6938786 Qbs: Install more files on Linux
  • 39caf09 Qbs: Added an option to disable the use of RPATH



All in all, 10 pull requests were merged from 6 different authors! Many small usability issues were fixed and some nice new features were added. If you’re interested in giving it a try, please don’t hesitate to install a development snapshot (links available on the downloads page on

1 Like

The reviewing continued for another two full days. Here’s the summary:


  • Merged Updated French translation (#1499)
  • Reviewed Selection of underlying objects (#1494)
  • Reviewed Added an executable picker (#1488)
  • Replied to Request to Add Support for Enumeration Properties (#1211) with a UI mockup of how I’d imagine it could be added.
  • Reviewed Added flipping a group of objects like expected (#1481)
  • Reviewed Zoom default without Ctrl (#1500)
  • Reviewed Stamp brush now works with the stagger in hex mode as expected (#1496)
  • Reviewed Selection of underlying objects (#1494) again


  • Reviewed Stamp brush now works with the stagger in hex mode as expected (#1496)
  • Reviewed Added an executable picker (#1488)
  • Reviewed three GSoC proposals (Benjamin Trotter, Artem Sharganov, Kalinich Ignat)
  • Merged Added an executable picker to Commands dialog by @ketanhwr (#1488)
  • Reviewed Stamp brush now works with the stagger in hex mode as expected (#1496) again
  • Merged Flipping a group of objects works like expected by @Vitek1425 (#1481)

The result of flipping a group is nicely demonstrated by Vitek1425 in the following image:

And more merging:

thabetx uploaded a demonstration of the marching ants he implemented:


  • Merged Add libtiled/libtiled-static.pri (#1505)

Many thanks to everybody who’s contributing to Tiled, whether you’re doing so for GSoC participation or not! I don’t mind at all to sit in the reviewing seat for a while. It’s great to see so many long standing issues finally getting resolved!


  • Reviewed Shortcut Handler Class and Basic Functional Shorcut Editor (#1512)
  • Merged Selection of underlying objects by @Acuion (#1494)
  • f7c2c3f Fixed external tilesets changing into embedded ones on save

The selection of underlying objects is a cool new feature, which is now possible by holding the Alt modifier key. It is also possible to combine this with Shift to add lower stacked objects to the selection. Finally, you can hold Alt while opening the context menu, to get a menu with all objects at that location.


  • Merged translations from Weblate
  • 8494cd6 Fixed disappearing of tile properties on export/import (#1513)
  • bce8cbb Fixed disappearing of tileset and terrain properties as well
  • 1fc40ab Fixed tileset reloading not updating tileset properties
  • 9df735d Fixed JSON tilesets getting saved in TSX format

Many thanks to @M4rw and others using the development snapshots and reporting bugs in them! You are making sure that Tiled 1.0 will be a more stable release for everybody.


  • Reviewed Staggered flipping now works as expected, as well, Hexagonal rotation now works in 60 degree intervals (#1515)


This last change took a while because of the huge amount of commits to go through (211 commits, excluding merges). Tiled hasn’t seen such a big release since version 0.9 and 0.10, both of which took more than a year since their previous feature release. Reaching this milestone is only possible because of the continuous support I receive through Patreon and, and many of the improvements of course have been enabled by others in the recent explosion of pull requests. It is a very exciting time and I’m really grateful to everybody who contributed!



  • Reviewed Staggered flipping now works as expected, as well, Hexagonal rotation now works in 60 degree intervals (#1515)
  • f19f97b AutoMapper: Apply custom properties set on output layers (topic)
  • Merged Adjusted dash length in object selection rectangle by @thabetx (#1521)
  • Reviewed Minimap in a resizing dialog (#1516)
  • Reviewed Added layer properties: horizontal/vertical repeat, move speed, width, height (#1509)
  • Reviewed and merged Added auto-show/hide all palettes (Clear View) option to View menu by @erem2k (#1522)


  • Merged Staggered flipping now works as expected, as well, Hexagonal rotation now works in 60 degree intervals by @Benjamin_Trotter (#1515)


  • Restored the blog on the Tiled website. Check out the news archive to see how far we’ve come and the increased activity in the last two years!
  • Reviewed Minimap in a resizing dialog and tried to write a follow-up patch.
  • Merged some Tiled Quick related pull requests (#1527, #1528), merged master into wip/qtquick and updated its Qbs projects. Tiled Quick is an early work-in-progress Qt Quick based version of Tiled, which I worked on years ago. I may consider continuing it when Tiled 1.0 is done, but so far there is still not a huge benefit to using Qt Quick instead of QWidgets for a desktop application like Tiled.


Here you can see the preview of the map in the resize dialog:



  • b6d16d Implemented drag-n-drop for layers (#178)
  • Reviewed Allow changing the tile of tile objects (#1525)
  • Updated documentation about Custom Properties to cover the new tile type and property inheritance features


  • Merged Allow changing the tile of tile objects by @thabetx (#1525)

Here’s a demonstration of this new feature by Mohamed:

Time is racing past and I’m not getting around to the development update, which of course also keeps getting bigger, making it harder to get around to it. Anyway, if you’re reading this it means I somehow made it.


Overall a productive day. I was especially thrilled to finally have gotten around to working on the Tiled Manual!


Writing documentation takes time as well. Any feedback welcome!


  • Display tileset file name in tool tip of tileset tab, to help debug this problem (f647d40)
  • Renamed ‘Documentation’ to ‘User Manual’, cause I think it will be more fitting (021613f)
  • Added support for storing object type definitions in JSON format (to help with issue #1313)
  • terraingenerator: Copy tile properties from the source tilesets (requested at issue #1537)


  • Fixed external JSON tilesets getting loaded multiple times (e508241)
  • Added cut/copy/paste actions for custom properties (549368e, #515)
  • QtPropertyBrowser: Added multi-selection option to QtTreePropertyBrowser (28eb07d)
  • Enable multi-property multi-object cut/copy/paste (9133960, #515)

The support for cutting and pasting custom properties could still use some testing!



  • Reviewed a suggested tweak to the AutoMapping by @Galdred
  • Fixed restoring of the map view for previously open maps, a regression on master (6ec324e)
  • Prevent adding the same external tileset multiple times (0e397fe)
  • Allow adding external tilesets by dragging to the Tilesets dock (9d6c3db)
  • Accept images dropped on image collection tilesets, when editing the tileset (1b64982)


Many of the stuff I did the last days had been about implementing or fixing things that I consider necessary before I could name the next release “Tiled 1.0”. I plan to release Tiled 1.0 this month, and that meant today was the last day before announcing the String Freeze (giving the translators time to update all the translations).

  • Enabled editing of text alignment for text objects (a2ca6cc, #1429)
  • Make sure text in About dialog doesn’t need to scroll (1d2fb08)
  • AppVeyor: Build Windows releases against Qt 5.8 and added a Qt 5.6 build for Windows XP users (d2af052)
  • Activate the Patreon dialog automatically after one month (37b405d, #1064)
  • Imported translations from Weblate
  • Updated translation files (423bfdb)
  • Updated the file (51d6d54) - Biggest list ever!
  • Announced the String Freeze for Tiled 1.0 to current translators (and now tweeted)
  • Imported translations from Weblate once more

Tiled 1.0 will see new translations for Finnish, Ukrainian and Hungarian!

I realize that automatically popping up the Patreon dialog may be a little controversial. Here’s how it looks:

Of course, I hope it will help to fill the funding gap so that I can keep working two days per week on Tiled, cause if I don’t manage this I will eventually have to go back to working only one day/week on Tiled. On the plus side, I trimmed down the dialog and you can easily turn off the reminder by either acknowledging that you’re already a supporter, or simply saying that you would not like to be reminded.

Looking Ahead

I still have 4 full days before the Tiled 1.0 release, which I’d like to do on May 25th (Father’s Day here in Germany). Before that I need to:

  • Close or reschedule the last remaining issues on the Tiled 1.0 milestone
  • Finish the essential parts of the Tiled Manual (to be determined)
  • Test, polish and fix - You can help by trying a development snapshot!

I’ll also need to go through the proposals of our Google Summer of Code students once more and help them get ready to start coding on May 30th.

1 Like

Recently I’ve started writing posts to the Tiled Devlog on, and I think this will largely replace this forum thread here. But I still have some catching up to do:



I spend a lot of time setting up a new distribution model for the Tiled snapshots for Windows. They are now also pushed to along with those for Linux, in a way that makes it easy and efficient (no clicking through an installer) to keep them up to date by using the app. And snapshots for Windows XP are now available for those who still need them.

Once the snapshots were working and uploaded to, I wrote my first Devlog post about the New Development Snapshot.

I also made a start on changing the tile collision editor to a dockable view, while doing a 40-minute livestream.



I spent most of this day finishing the dockable tile collision editor, which was still much more work than I had anticipated (and I’m glad I didn’t attempt to stream its entire development…).


Finally finished the now docked tile collision editor, and also made a huge amount of fixes in preparation of the 1.0 release. I wrote a new Devlog about the Docked Tile Collision Editor and Many Fixes.


  • 03706a6 Changing the type of a tile now affects all selected tiles


This was the day of the Tiled 1.0 release. In the morning, I managed to still work on a rather large change to restore and improve the behavior when dragging images or tilesets into the Tilesets view.

Then, I pulled all the translations from Weblate, did the Dutch translation update myself and merged Russian translation updates.

Finally it was time to push the v1.0.0 tag, write the release post and announce the release on the social networks and of course write a Devlog update as well. I’m not good at doing this fast, and I’m afraid to say that it took me until after 4:00 in the night to wrap things up.

Holiday, Visiting Family

Here is when our holiday started, where I was away for 10 days visiting my parents and those of my wife. I had hoped to do more Tiled development during this time, but I pretty much only managed to respond to e-mails, do some reviewing and apply some fixes:

  • Merged Rename Polygon tool icon names (by @ketanhwr, #1588)
  • Merged Updated Russian translation (by oktonion, #1590)
  • Reviewed and Merged Allow setting working directory for custom commands (by @ketanhwr, #1580)
  • Reviewed and Merged Show output of custom commands in Debug Console (by @ketanhwr, #1593)
  • Reviewed and Merged Added Autocrop feature (by @ketanhwr, #1574)
  • Lua plugin: Fixed group layers being exported with “imagelayer” type (#1595)
  • Fixed reset of font size when using font dialog (#1596)
  • Reviewed and Merged Reusable object templates into wip/templates (by @thabetx, #1587)


This was the first proper Tiled development day after the holiday. I fixed a large amount of bugs reported after the Tiled 1.0 release. Since you can read about these below I won’t mention them here.

  • Reviewed Templates dock
  • Merged Added Korean translation (#1604)


  • Reviewed Added Move selection Feature
  • Resolved merge issues on Weblate due to Korean translation being added on both Weblate and GitHub
  • Resolved issues with building the Windows installer on AppVeyor
  • Released Tiled 1.0.1, with the fixes made yesterday and during my holiday. Published a new Devlog about the release and updated snapshots.


Looking Forward

I think the new Devlog feature on is a much better way of keeping everybody updated on the state of development than these posts. The only thing I’m not sure about how you can subscribe to these posts, but you can follow me on to get these updates in your feed. I think it would be cool if it was possible to subscribe to these by e-mail. encourages to write a Devlog post each time a new version is published, which provides me with a good push to write a small post every time I update the snapshots. I wrote 4 posts to the Devlog in the time covered by this forum post, and while it doesn’t go into as much detail, I think the content is more meaningful.

So, I’m considering to deprecate this topic, since it’s not read by many yet considerably more time-consuming than focusing on the actual changes in each pushed update. If this would make you sad, let me know!