Building Zavala 4.0
I’ve been working on Zavala 4.0 off and on for the last 6 months. It isn’t a huge release or change in Zavala’s features. I think that is a good thing. I think Zavala is fairly mature as an outliner application. While there are things I would like to add in the future, there aren’t any really big outliner features that I think are currently missing and need to be added ASAP.
That said, there were some significant cosmetic changes and some good size changes under the hood in this release. So much so that Zavala requires the 26 versions of the operating systems to work. Zavala 4.0 is also not backwards compatible with previous versions of Zavala especially when it comes to iCloud syncing. Read on to learn why that is.
Fixing iCloud Syncing
Adding data syncing to any application is hard. iCloud helps with that somewhat, but it is still really hard to get right. Shoehorning a hierarchical data structure like an outline into a flat data structure like iCloud is super hard and I did not get it right the first time. While I did improve the reliability of the syncing code over the course of many Zavala releases, it was never quite right.
Corrupted Outlines and occasional data loss were the unfortunate result of not having syncing code 100% perfect. When dealing with synced data anything less than 100% perfect is unacceptable. This has been resolved in Zavala 4.0.
To do this I had to change how Rows are stored in the internal database as well as how they are stored in the iCloud database. This new solution works really well, but isn’t compatible with the old versions of Zavala. This is because the older versions of Zavala have no idea about the database changes and would corrupt the values if allowed to.
If I could have made this backwards compatible with older versions of Zavala, I would have. The best I could do is not allow Zavala 3.3.9 and 3.3.10 to sync with iCloud if a version of Zavala 4.0 had touched it. I did the best I could to prevent any data loss. Contact me using the Email Feedback option if you have problems. I will do everything I can to help you out if anything goes wrong.
Supporting Liquid Glass
Love it or hate it, Liquid Glass is the new design language from Apple for their latest operating systems. If you are an app developer and don’t support it, your app is going to look dated and out of place on the lates OS’s. Fortunately, I feel like Zavala is one of those kind of apps where Liquid Glass looks good and isn’t the worst at usability.
Unfortunately, it is very difficult to have a Liquid Glass version of your interface along side the legacy look and feel of previous OS versions. This is because you have to update to the latest API’s to correctly use Liquid Glass and some things, like the spacing of elements have been changed. Basically to keep backwards compatibility for OS’s before the version 26 ones, you need to maintain two different versions of the user interface code.
So I made the difficult decision drop support for previous versions of iOS, iPadOS, and macOS. This is particularly painful due to the fact that Zavala 4.0 can’t sync with Zavala 3.x or earlier. Basically you need to have all your devices up to date to use Zavala 4.0. My apologies.
German Localization
Outside English speaking countries, Germany has the most downloads of Zavala. This makes it the most likely candidate for localization.
The ability to do localization was added in Zavala 3.x by Stuart Breckenridge. Many thanks to him. Unfortunately, neither I nor Stuart are German speakers. I put out some feelers for someone to translate Zavala into German, but didn’t have any luck finding someone. So I turned to AI.
I used Claude Code to translate Zavala into German. I checked as much of the translations as I could and they look pretty good to me. Of course there may be mistakes in there that need to be corrected. I think the same would probably be true if I used a human for the translations.
Simplified Chinese Localization
We got a last minute contribution from SteveShi. He used some AI and did verified and corrected it himself. Many thanks to SteveShi for this contribution!
New Create Rows Setting
One way that various outliners differ is how they handle this scenario. You are at the end of a Topic line and hit return to create a new Row, but you have child Rows under the current one. Some outliners create the Row right after the current Row as a new child. This is how Zavala has traditionally done it. Some outliners create the Row at the same level as the current one, after the child Rows.
On the site Outliner Software I saw the user Satis mention that he found Zavala’s default behavior regarding creating new rows with child row confounding. After some discussion I saw things his way. I hesitate to add Settings to Zavala, but I think this one rises to the occasion. You can now specify which behavior Zavala does with the new Create Rows editor setting.
Zavala 4.0 is out now
Go and check it out. I’m pretty happy with this release and I hope you will be too.