Deprecated: Return type of I::current() should either be compatible with Iterator::current(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 62

Deprecated: Return type of I::next() should either be compatible with Iterator::next(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 91

Deprecated: Return type of I::key() should either be compatible with Iterator::key(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 71

Deprecated: Return type of I::valid() should either be compatible with Iterator::valid(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 101

Deprecated: Return type of I::rewind() should either be compatible with Iterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 53

Deprecated: Return type of Collection::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/collection.php on line 80

Deprecated: parse_str(): Passing null to parameter #1 ($string) of type string is deprecated in /home/public/kirby/toolkit/lib/url.php on line 135
One Tap Less | New Updates to Fantastical & Drafts

New Updates to Fantastical & Drafts

This is a quick update to talk about the two most important updates of the week. The first one of them is Fantastical 2, which is a paid upgrade of the famous calendar app with x-callback-url. The other one is Drafts, which got an important bug fix.

Fantastical’s url scheme changed a little bit1, so if you haven’t bought it yet, do it and update your actions with the fantastical2:// handler instead of fantastical://. There were no further addition to the url scheme, but the feature list looks great.

The other update I want to talk about is Drafts, which got an important quick fix for users using encoded actions within actions2. In the 3.5.3 update, Greg added a new tag to stop actions when they meet an empty field in Drafts, which is definitely important when you use recursive actions as I described in a previous article. A bug affected the url encoding using {{}} and we were unable to exploit this new feature until the recent update. Now the new tag, allowEmpty, works graciously and you should include it to your recursive actions with a NO value3. This is the updated example I used in the aforementioned article using Pinner.

Pin Them All:

pinner://x-callback-url/bookmark?href=[[title]]&tags=[[line|2]]&x-source=Drafts&x-success={{drafts://x-callback-url/create?text=[[line|3..]]&action=Pin%20Them%20All&afterSuccess=Delete&allowEmpty=NO}}&x-cancel={{drafts://x-callback-url/create?text=[[line|3..]]&action=Pin%20Them%20All&afterSuccess=Delete&allowEmpty=NO}}

But what if we grab the best from both updates and overhaul Eric Pramono’s first approach to recursive actions using Fantastical? This is the outcome:

Add Events to Fantastical:

fantastical2://x-callback-url/parse?sentence=[[title]]&x-success={{drafts://x-callback-url/create?text=[[body]]&action=Add%20Events%20to%20Fantastical&afterSuccess=Delete&allowEmpty=NO}}&x-cancel={{drafts://x-callback-url/create?text=[[body]]&action=Add%20Events%20to%20Fantastical&afterSuccess=Delete&allowEmpty=NO}}

Works like a charm.


  1. The link is still the same, so no change on the library

  2. You probably fit that category if you're reading this blog. 

  3. The default value is YES, therefore it is only useful with recursive actions.