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
- 2024
- Setting up ANTLR4 on Windows
- My Custom Miniflux CSS Theme
- SQLite DB Migrations with PRAGMA user_version
- Ten Years of Dreaming of San Francisco
Recent Favorite Blog Posts
This is a collection of the last 8 posts that I bookmarked.
- Fedora Magazine: Contribute to Fedora 44 KDE and GNOME Test Days from Fedora People
- Pluralistic: bunnie's piggyback hack (09 Jan 2026) from Pluralistic: Daily links from Cory Doctorow
- Clicks Communicator from Chris Hannah
- A Year Of Vibes from Armin Ronacher's Thoughts and Writings
- Pluralistic: A perfect distillation of the social uselessness of finance (18 Dec 2025) from Pluralistic: Daily links from Cory Doctorow
- Moving from WordPress to Substack from charity.wtf
- Grow, Like a Tree Not a Cancer from Jim Nielsen’s Blog
- Pluralistic: All the books I reviewed in 2025 (02 Dec 2025) from Pluralistic: Daily links from Cory Doctorow
Articles from blogs I follow around the net
Announcing Live AI & Design Systems Jam Sessions!
Ian, TJ, and I are excited to announce live AI & Design Systems Jam Sessions with our AI & Design Systems course community! Our first jam session will be Thursday, February 26 at 10AM ET. In these recurring biweekly Zoom […]
via Blog – Brad Frost February 16, 2026I Sold Out for $20 a Month and All I Got Was This Perfectly Generated Terraform
Until recently the LLM tools I’ve tried have been, to be frank, worthless. Copilot was best at writing extremely verbose comments. Gemini would turn a 200 line script into a 700 line collection of gibberish. It was easy for me to, more or less, ignore LLM…
via matduggan.com February 16, 2026Pluralistic: The online community trilemma (16 Feb 2026)
Today's links The online community trilemma: Reach, community and information, pick two. Hey look at this: Delights to delectate. Object permanence: Bruces x Sony DRM; Eniac tell-all; HBO v PVRs; Fucking damselflies; Gil Scout Cookie wine-pairings; Bi…
via Pluralistic: Daily links from Cory Doctorow February 16, 2026Generated by openring