Dagger Feels Like Magic
I’ve been working on a Dagger module for interacting with the Bluesky API.
I wrote the first version in Python, using the atproto library. It worked well and was easy to use, but I noticed that none of my links, mentions, or hashtags were showing up. I ignored this for a while, but today decided to investigate this some more since the whole world seems to be showing up on Bluesky this week.
It turns out that there is a separate rich text API that you need to use in order to paste links, mentions, hashtags, and images. Mastodon, Twitter, and LinkedIn seem to figure it all out automatically but Bluesky is special.
I read the python docs on how to do this, and it made sense but in order to get this to work in the real world I would need to first write some sort of parser to identify the different types of elements and then pass them into this TextBuilder class to create the Bluesky post.
This felt like a lot of work and I am lazy. The good news is that the official Typescript SDK from the Bluesky team has a helper method called detectFacets that does all of this for you.
I’ve put a lot of work into this module and it includes some examples along with a test suite that runs all of my examples. The test suite was written in Python just like the original module was.
I was able to port the module over from Python to Typescript with a little effort. I started to port the test suite over to Typescript as well but then thought to myself “wait a minute, I don’t need to port this over”.
You see, the test module is just another Dagger module that calls my Bluesky module. Dagger modules can be written in any language and they can call modules written in any other language. Since the API for my Bluesky function did not change in my Python to Typescript port everything just worked.
Sometimes Dagger feels like magic.
Thank you for reading! Share your thoughts with me on bluesky, mastodon, or via email.
Check out some more stuff to read down below.
Most popular posts this month
- SQLite DB Migrations with PRAGMA user_version
- Lev Lazinskiy
- Edge Detection with Inkscape
- Org Mode To Google Docs and Beyond
- Spring Security, Webjars, and MIME type error
Recent Favorite Blog Posts
This is a collection of the last 8 posts that I bookmarked.
- Deeper dive: Were Touch Bar’s problems software rather than hardware? from Unsung
- Joining Cursor from Fatih Arslan
- Pluralistic: Digital sewer socialism (08 Aug 2026) from Pluralistic: Daily links from Cory Doctorow
- Pluralistic: Enshittification and Reverse Centaurs go global (29 Jul 2026) from Pluralistic: Daily links from Cory Doctorow
- AI Mania Is Eviscerating Global Decision-Making from Ludicity
- The default person from https://popagandhi.com/
- No-One Escapes the Permanent Underclass from Fernando Borretti
- Is it ethical to use AI? from charity.wtf
Articles from blogs I follow around the net
“An absolute bare minimum of interactivity”
I mentioned Atari’s Pong recently, a game often considered to be the first videogame ever. It wasn’t, and as a matter of fact, it was a clone of one of the games from the first home console Magnavox Odyssey, released earlier in 1972: This is a 34-minute vi...
via Unsung August 28, 2026You Know GDPR Is Good Based on Who Hates It
FDR has always been one of my favorite presidents, second maybe to Lincoln. Both were men the establishment assumed were one of them until, to their horror, they governed like they weren't. Both could trash the opposition in one breath and take the moral h...
via matduggan.com August 28, 2026The growing divide between AI hype and software engineering reality
It is widely accepted that there is an AI bubble in the financial markets at the moment. The moderate opinion is however that LLMs are constantly improving and will eventually take over more and more tasks from humans and increase productivity. But are LLM...
via Optimized by Otto August 28, 2026Generated by openring