Hello everyone,
I'm glad to announce the new
release of TiddlyWiki, 2.10.0.
As you can note, this is the first time I'm updating the "minor" part of the version (9 → 10), and although there's not much instant impact for end users, this is in fact an important milestone. The reason is the implementation of fully async saving while keeping backward compatibility. I'll explain why it's a big deal below, but for now let's jump to the updates:
- Behavior improvements:
- Upgrading wizard is now more instructive and prevents losing content (which happened earlier in some cases). The trick is, after saving a backup it now tries to verify that it's indeed saved and can be loaded. If it fails, it explains what to do instead (see the screenshot among UI changes). Note that this will help with updating from 2.10.0; to update to 2.10.0, I still recommend to create a backup and then use either SimplifiedUpgradingPlugin or import.
- <<version>> now also shows the number of a "nightly" build.
- UI updates (see visual summary below the changelog):
- Tabs now use common background (instead of gray), don't "sink" into the content and are not broken into 2 lines;
- Remove an excessive link in GettingStarted;
- Search button now looks the same as other buttons in the sidebar;
- Nice toggle backstage button's padding;
- Wizard status now supports html (links) and looks nicely when multiline;
- Added bottom padding to tiddlers.
- Fixes:
- Make Array.prototype.find fall back to the native implementation if a predicate is provided;
- Story.prototype.setTiddlerField failed for tags (affected IntelliTaggerPlugin);
- Checkboxes in the Disabled column of <<plugins>> should show correct state;
- Don't overwrite Array.prototype.indexOf if it's defined.
- Hackability:
- Introduces fully async saving (disabled by default: unset chkPreventAsyncSaving to enable):
- new general method tw.io.saveFile (use it over the global saveFile), similar to tw.io.loadFile;
- saveMain now supports callback (tries async saving if it is passed and chkPreventAsyncSaving is unset);
- new method tw.io.saveMainAndReport separates the whole "load original, update, and save" thing, so may be a better target of decorating/overriding than saveChanges in some plugins/savers.
- Icons (the close icon) are now stored in tw.assets.icons and are reusable.
- Deprecated: Array's .setItem, Java IO (only javaSaveFile and javaLoadFile are left, returning null).
- Infrastructure:
- updates of some autotests, removed legacy reporter;
-
fix: freeze TW5 version used for building (versions 5.2.2 and above break things) in package.json.
- Lingo updates (for translations)
- Various docs and dev docs updates, including several new articles about using git and GitHub and contributing (for more details, see the release)
I'd like to thank Okido and Mark for contributions to this release and all others who helped on this road.
MainTiddlyServer 1.7.4 is also
out there supporting TW 2.10.0. It also supports .htm and .hta files treating them the same as .html.
While working on this release, I've also
updated TiddlersBarPlugin, which now is simpler to install (changing PageTemplate is not necessary, although doesn't hurt either). While current (core) tabs UI is still not final, there are some visual improvements.
What's not updated yet: see
the
Release PR
(things like default version on Tiddlyhost, etc).
Why async saving is a big deal?
Well, the lack of async saving support was one of the major obstacles for TWC ecosystem. For instance, Timimi tries to save things and optimistically reports they are saved, which may result in data loss during upgrading or just not knowing that things went wrong.
Likewise, it prevented introducing better ways to save things. For instance, I've found a nice native way to save in most desktop browsers (much more convenient than download saving), but it requires async saving (stay tuned!).
Also, it's probably feasible now to implement conflict detection properly, but that's a whole different story, I'll let you know when I get SavedNotHerePlugin working.
Releasing infrastructure is getting better. This time, it took 9 days from the start of the PR to this announcement (which included implementing the upgrading safeguard and more), in contrast to more than 2 weeks for 2.9.4. After this release, I'll improve this further by fixing the continuous delivery script, explaining things in the
Releasing and updating the site section, which in turn will help to add more automation (and, theoretically, help others to prepare a release, if somebody wants to). The simpler this gets, the easier it will be for me to release more frequently. Compare also:
2.9.1 – 05.2018
2.9.2 – 02.2019
2.9.3 – 07.2022 (ok, there were personal issues, and then war and immigration)
2.9.4 – 05.2023
2.10.0 – 12.2023
As always, any feedback is welcome.
Best regards,
Yakov.