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 | Pinboard tags with Pinswift, TextTool and Drafts

Pinboard tags with Pinswift, TextTool and Drafts


Warning: Trying to access array offset on value of type null in /home/public/kirby/vendors/parsedownextra.php on line 305

Deprecated: substr(): Passing null to parameter #2 ($offset) of type int is deprecated in /home/public/kirby/vendors/parsedownextra.php on line 305

Warning: Trying to access array offset on value of type null in /home/public/kirby/vendors/parsedownextra.php on line 305

Deprecated: substr(): Passing null to parameter #2 ($offset) of type int is deprecated in /home/public/kirby/vendors/parsedownextra.php on line 305

There are many Pinboard clients in the App Store right now and perhaps the niche is saturated with options, but when it comes to their url schemes, they’re not so alike. Pinner, Pinbook and Dart only support adding bookmarks. Pushpin supports browing feeds and opening urls, but its price never caught on. Pincase and Pinswift are newer apps with diverse options in their url scheme. The latter has a nice addition to global tag filtering in Pinboard and we’re going to explore it here.

Pinswift’s url scheme to browse a list of tags is straightforward, according to its documentation, you can queue up to three tags plus an username, however, in my tests I had no problem using more tags, although you need a touchdown to catch any result this way. For example, the following scheme digs through Brett Terpstra’s public bookmarks and finds a couple of articles with 4 tags, just for the sake of testing.

pinswift:///u:ttscoff/t:exchange/t:currency/t:conversion/t:api

If you have Pinswift installed, tap here to try. As I said, the scheme is easy to understand, anything preceded with t: is a tag, meanwhile u: stands for the target user name. What about a flexible way to filter global tags using Drafts? If we set every line with t:, we’re obliged to always search for 3 tags. That’s not flexible, but then TextTool comes to save the day.

You probably already noticed that I became a huge fan of TextTool, it does wonders to any workflow relying on text and its integration with Drafts is just superb. We’re going to use the join transformation to turn lines into a single string and separate each tag with the t: prefix.

Filter Pinboard tags:

texttool://x-callback-url/transform?text=t:[[line|1..3]]&method=join&delimiter=/t:&x-success={{pinswift:///[[output]]}}

Since we’re nice guys, we’re following Pinswift recommendation and using no more than three tags, that’s why we use [[line|1..3]]1 to select no further than the third line in Drafts. We also manually add a t: that will be attached to the first line and then we let TextTool deal with the rest. It is also easy to set an username for the first line and filter with some tags.

Filter Pinboard user w/ tags:

texttool://x-callback-url/transform?text=u:[[draft]]&method=join&delimeter=/t:&x-success={{pinswift://[[output]]}}

The nicest thing about this last action is that you can query for the username only, tags are optional. However, you can’t search for tags without a username, since leaving the first line blank will return a 404 error because TextTool will send u:/t: to Pinswift.

But, hey, that’s still cool, right? Pinswift seems like a great Pinboard client and I’m cooking another action for it you gonna love, so if you don’t have it yet, get it for $4.99 in the App Store. If you don’t have Pinboard, then who the hell are you?


  1. The coolest thing about using a line selection in Drafts is that you can increase it if you want or use [[draft]], Pinswift may not appreciate it, you may find no results at all, but TextTool will handle the task.