January 2016 development updates

The first two weeks of this year are already over so it’s about time I wrote about what’s been happening!

Week 1

Late in my Christmas holiday, I’ve started dreaming about updating the Tiled website to make it more modern, but also to simplify its navigation. The first will take time and it’s a project I’ve actually yet to start, but in the meantime I already did some long due improvement to the navigation.

So since 2nd January the Tiled forum finally has a navigation bar that allows you to visit the main website, documentation, donation page, etc. And on 3rd of January I got the same navigation bar to work on the documentation pages. All this took me many hours since I’m really rusty on web development (and I hate it). but I think it had to be done.

Tiled Monday

This day was of course about getting Tiled 0.15 out. I started with updating the Dutch translation, since I hadn’t gotten around to that earlier.

Next I wanted to improve the hosting of the Windows daily builds. They had been hosted on a minimum Rackspace VPS, which was slow, didn’t have much disk space and it was somewhat unreliable. I already had a DigitalOcean droplet hosting a few other things in Docker containers and wanted to move them there. What followed was unfortunately quite a nightmare. I updated the system, which pulled in a new version of Docker that broke the Nginx proxy configuration I was using. Being quite an amateur with these things, I went through several attempts to find a new approach, but eventually found a nice auto-configuring nginx-proxy container. Then, I wanted a secure way to upload daily builds from AppVeyor and tried to set up a Docker container for this as well, but eventually I aborted this and just set up a direct SCP to the host. The end result, at least, is more reliable and much faster access to daily builds for Windows. Yay!

The above took way longer than I had wanted to, so not much time was left. I made sure the TMX Map Format documentation got some needed updates and mentioned relevant changes in Tiled 0.15.

That evening, I tagged Tiled 0.15.0 after pulling in updated German and Japanese translations. Then I made the release builds and put them up on GitHub. Unfortunately, I had no time anymore to update the website or to write a release post about it.


The next day while at work, I got an e-mail notification from itch.io notifying me that somebody had bought Tiled for $5. It had been my first sale through that site, which I had almost forgotten about after putting up a Tiled page there many months ago. I checked it out again as well as its options to integrate with external websites, and decided to give it another try. After updating the Tiled page, my payment info (mainly letting itch take care of EU tax rules) and integrating their widget on Tiled’s download page, I announced Tiled’s itch.io launch.

I think it became my most seen tweet ever since many have reshared it and the feedback has been very positive. In the first week, Tiled 0.15 was downloaded over 3000 times through itch.io, and sold 8 copies for an average of about $5.

Maybe interesting to note, but one person bought Tiled for $0.50. From this, Stripe collects a $0.31 fee and $0.05 goes to itch (I set up their default 10% share), leaving me with $0.14. While I appreciate every donation, this is of course a bit sad. I wondered whether the Bitcoin payment method had lower fees, but since nobody used Bitcoin yet I decided to buy Tiled myself for $0.50 in Bitcoin. And you know what? There was no fee at all, leaving me with $0.45! Maybe it’s worth pointing this out somewhere. The no fee was because Stripe charges only a 0.5% fee on Bitcoin transactions, and rounded down the would-be $0.0025 fee.

Any extra income generated through itch.io obviously adds up to the support I receive from patrons and will allow me to spend more time on Tiled in the future.

Closed Issues

Two bug reports came in that I have fixed immediately, to be included in Tiled 0.15.1.

Week 2

Tiled Monday

This time I was eager to start moving on towards Tiled 1.0 and decided to look into solutions for an auto-update mechanism. This also plays a role in making sure Tiled users are aware of the pace of development.

I decided to try Sparkle first. It’s a very complete solution that not only checks for updates in the background, but can also automatically download, install and start a new version. It only works for OS X, but it shares part of the mechanism, the appcast feed, with WinSparkle, so I won’t need to set that up twice once I get to that.

I spent some time finding a good way of setting up the appcast feed. In the end, I decided to rely on the GitHub pages API to automatically generate the feed from the releases. Later on I found out that the disadvantage of this is that you can’t easily add a DSA signature to the releases, but I will instead try to codesign the Tiled.app.

Actually integrating Sparkle and getting it to work was not too hard, though it took a long time since I was struggling with build system issues (Sparkle framework headers not found, linker couldn’t find Sparkle, Info.plist file not copied over when changed, etc.) and all this on my really slow Mac Mini (2009).

I also would like to use this update mechanism to get an idea about how many people are using Tiled, and which version on which OS. For this I tried settling up Sparkler, but I had to give up in the end because I was hitting problems that I do not have the expertise to solve myself.

In the end, I almost finished this but it wasn’t until two days later that I pushed initial auto-update support for OS X and enabled it in the daily bulds.


Downloads through itch.io are quite stable at around 400/day. It’s quite nice to have this statistic back, since it’s one of the things I had to give up when moving the files from SourceForge to GitHub (which I did because of the aggressive advertising on SourceForge, which included malware).

In the second week, Tiled sold 24 copies! This was a nice increase over the first week, and I think it may be from people who returned to pay after having clicked through to try Tiled for free the first time. The most common payment remains at about $5, but it’s really nice to see several people increasing it to $10. If this level of support remains, itch.io will be a very good companion to Patreon and I can really look forward to spending more time on Tiled in the future.

Closed Issues

  • #1174 Consider the RPATH variable while building the terraingenerator - Merged

A Look Ahead

First off I want to finish the auto-update mechanism. I think it’s urgent that I also add an option to turn it off in the Preferences, and I’d like to have the daily builds check for a new daily build rather than a new release. Next I will look into getting it to work on Windows as well.


Week 3

Tiled Monday

I started the day trying to find out how to code-sign the OS X packages, but unfortunately didn’t manage. I thought I had it working at first, but it turned out that this approach would not work. I’m not sure if --deep is doing the right thing, and another problem was that codesign refused to sign when running as a cron-job. It’s something I’ll have to get back to later. I did get the OS X daily builds to auto-update by using a DSA signature, which is placed into this template file before uploading it to the server after each build.

With auto-updating based on Sparkle being enabled in the Tiled daily builds, there of course needs to be a way to turn it off for those who don’t want it. So I added an Updates tab in the preferences:

Currently, these options appear as disabled except for Sparkle-enabled builds on OS X, but soon they should be also enabled on Windows.

Pull Requests

Somebody seems to be making a point of updating copyright years to 2016 in hundreds of projects. Unfortunately for Tiled he only updated the header template.

  • #1177 fix tmx doc to no longer say width/height are ignored - Merged
  • #1178 Update license year to 2016 - Merged
  • #1184 Updated Czech translation - Merged

Week 4

Live Streaming

After being urged several times by my biggest patron of all time, I decided to try out live streaming my desktop while doing Tiled development. After looking at Twitch and shortly trying YouTube Gaming, my eye fell on livecoding.tv which seems to specialize in exactly this kind of audience. I did a short pilot on Sunday while fixing two small bugs and I thought it was quite interesting. I will aim to live-stream at least each full Tiled development day from now on, so follow me at https://www.livecoding.tv/bjorn/ if you’re interested!

Tiled Monday

Before looking into how to integrate WinSparkle, I first wanted to improve the Windows installer situation. The NSIS based installer never really got any love, people sometimes reported crashes and for updating it would first run the uninstaller of the previous version. For a hopefully better experience, I decided to look into building an MSI installer instead, based on the WiX toolset.

I had really expected this to take only half a day, but I ran into a lot of issues and unknowns. For good or bad, my struggles are viewable at livecoding.tv, though it will be incredibly boring since I have no microphone set up and unfortunately the live chat that happened during the day is for whatever reason not recorded alongside.

By the end of the day I had the installer working mostly like it should, and I had integrated it into the Qbs build system. Then I had to make adjustments to AppVeyor to have it set the right version. Late in the evening the build failed because I had tried to use the year as the major version, but the major version in an MSI installer can’t be higher than 255…

Rest of the Week

As usual it is incredibly hard for me to get around to anything Tiled-related during the week while working full days and caring for my family. By Friday evening, I found some time to brand the installer with the Tiled logo and to fix the issues with the version number. For now, the daily builds will simply have their build number as micro version. Here’s the new installer’s start page:

And today (Saturday) I found some time to bump the version to 0.15.1 and publish this release. It fixes a few smaller bugs and adds the updated Czech translation.

Closed Issues

  • #612 Lua export in Linux not working - Fixed (in 0.15)
  • #1171 Deleting an object leaves label on screen - Fixed
  • #1180 Comodo antivirus picks up tmxviewer as malware on windows. - False positive reported
  • #1183 Wont stop crashing. (Locking up) - Possible duplicate
  • #1185 Issues with Image Layer in 0.15 - Fixed


In January Tiled sold 60 copies for about $250 total after fees, so it looks like offering Tiled for free on itch.io was a good move. This extra income will certainly make it easier for me to reach my next goal of spending two days/week on Tiled. In the meantime, patrons and sponsors still provide most of the needed support, for which I am very grateful!

Looking Ahead

Starting in February, I’ll shift my entire week schedule by one day, so that I will work each full Sunday on Tiled. Also, I’ll keep live-streaming Tiled development for those who are interested.

The first goal is of course to get auto-updates working for the daily builds for Windows. After that, I will be working on other features for Tiled 1.0, until it is done!