ATmosphere 1.0.0 — Liftoff

This post isn’t about the ActivityPub plugin. ATmosphere is a separate plugin from the same small team, for the other half of the open social web: the AT Protocol, the open network behind Bluesky. We’re posting about it here because the audience overlaps and the mission is the same. If there’s enough interest, we’ll spin up a dedicated blog for it. Until then, this is the closest venue.

A banner that says: WordPress, part of the open social web.

Today is the public 1.0.0 release on WordPress.org. After months of design notes, internal experiments, and a stretch of focused work alongside the ActivityPub plugin, ATmosphere has cleared the troposphere.

What ATmosphere is

When you publish a post, ATmosphere shares it on Bluesky and stores the full article on your AT Protocol account as a structured record. Bluesky replies, likes, and reposts come back as comments on your WordPress post. Approved comments from logged-in readers go the other way and appear as replies under your original Bluesky post. The same conversation lives in both places without you having to copy anything by hand.

The bet underneath is bigger than cross-posting. ATmosphere publishes site.standard.* lexicon records, so your blog itself becomes AT Protocol data, not just a link shared on Bluesky. Any compatible app can read the full article from your AT Protocol account, the same way it reads a Bluesky post. WordPress becomes a first-class participant in the network, not a visitor.

How this differs from a cross-poster

The first question you may have is: how is this different from Jetpack Social’s Bluesky integration, or from any of the other plugins that share to Bluesky?

The answer is that they’re solving a different problem. A cross-poster gets your content in front of Bluesky users, which is a real and useful thing. But it’s still a broadcast model. Your WordPress site talks at Bluesky, it doesn’t participate in the protocol.

In practice that shakes out two ways. First, a cross-posted update creates a copy, not a connection. The post on Bluesky and the post on WordPress are separate records, and nothing in the protocol ties them together. Second, your blog itself has no identity in the network. The cross-poster authenticates as you, the person, and posts on your behalf. Your blog as an entity, with its archive and structure, is invisible to the protocol.

ATmosphere is built around making your blog itself a participant. Every publish writes two records: an app.bsky.feed.post so the update shows up in Bluesky timelines, and a site.standard.document from the standard.site lexicons that stores the full canonical article on your AT Protocol account. A bskyPostRef link ties the two together. Your blog appears in the network as a publication that other apps and aggregators can discover and read in full, not as a stream of truncated link cards.

If you want a poster, Jetpack Social is the right tool. If you want your WordPress site to be a place on the AT Protocol, that’s what ATmosphere is for.

Why a third-party PDS, for now

There’s a natural follow-up once the model clicks: if my WordPress site is acting as a Bluesky identity, why does Bluesky (or another provider) still need to be in the picture at all? Why not host the data on the site itself?

We tried that route first. About 90% of a Personal Data Server (the AT Protocol service that holds your signed records and streams them to the network) maps cleanly to PHP and a WordPress database. The remaining 10% is the firehose: a WebSocket stream that pushes every change to the network’s relays in real time. PHP’s request-response model is fundamentally incompatible with persistent connections like that, and typical WordPress hosting environments aren’t designed for always-on background processes either.

The cleaner mental model turned out to be email. Even when you self-host your mail, you don’t build the mail server as a WordPress plugin. The mail server is its own piece of infrastructure that runs alongside your site. AT Protocol is the same shape. The PDS is infrastructure, not application logic. ActivityPub was designed to be implementable by any HTTP server, which is why it works as a plain WordPress plugin. AT Protocol was designed around always-on data servers, so the natural fit is a hosted PDS running next to WordPress, not inside it.

For 1.0.0, that means using whichever PDS the user already has. Most people connecting ATmosphere come in with a Bluesky account, so they already have a PDS and a DID, and borrowing that lets us focus on the parts that live on the WordPress side: the publishing pipeline, the long-form rendering, the comment round trip, the domain-as-handle handshake.

We are still pulling on a thread, though. There’s a version of this where a PDS sits comfortably alongside WordPress, ready to host your records for you, so the AT Protocol side feels just as native to WordPress as the ActivityPub side already does. Nothing to announce yet. We’ll let you know when there’s something to show 😉

Your domain, your handle

One of the headline features: your WordPress domain becomes your Bluesky handle. Instead of @you.bsky.social, your handle reads @yourblog.com.

A screenshot of the handle settings.

ATmosphere handles the verification side. It serves the right file at /.well-known/atproto-did so Bluesky can confirm the domain really belongs to you. From the settings page, it’s one click. You then open Bluesky, pick Change Handle, choose I have my own domain, enter your site, and you’re done. Same identity model Bluesky uses for its own custom domains, but the technical bit takes care of itself.

Long posts, done right

The hardest problem in WordPress-to-Bluesky publishing is what to do with a long article on a 300-character network. ATmosphere gives you three options from the settings page:

  • A link card, the default. A clean preview pointing back to your full post.
  • A single post combining the body text and the permalink, for when the post fits.
  • A two-post teaser thread: a hook, a body chunk, and a “continue reading” reply with the link card. The teaser surfaces reliably on bsky.app profiles, and the terminal post always offers a clear path back to the full article on your site.

When you edit a threaded post, ATmosphere updates the existing Bluesky posts in place when it can, so links and replies stay connected. If you change the publishing format, ATmosphere replaces the old posts with new ones. And the full article, every paragraph of it, lives on your AT Protocol account regardless of which format you pick, so other AT Protocol-aware apps and readers can render the long version too.

Two-way conversations

When someone replies, likes, or reposts your post on Bluesky, ATmosphere checks periodically and turns those reactions into WordPress comments on the matching post. Likes and reposts get their own comment types, so they show up as engagement counts rather than duplicating as text comments.

Going the other way: when a logged-in reader leaves an approved comment on a cross-posted article, it’s published to Bluesky as a reply under your original post. Edits sync. Unapprove or delete, and the corresponding Bluesky reply comes down too. Anonymous comments, trackbacks, and pingbacks are skipped. Only logged-in readers participate in the round trip.

A few more things worth knowing

  • Backfill. A built-in tool publishes older posts to AT Protocol on demand, batched to ten at a time so it doesn’t overwhelm your server.
  • Post types. Choose which post types publish to AT Protocol from the settings page. Plugins and themes can opt their own custom post types in with add_post_type_support( 'your_type', 'atmosphere' ).
  • Extensible. New atmosphere_publish_post_result and atmosphere_publish_comment_result actions let other code react to publish success or failure. An atmosphere_should_sync_reply filter lets you suppress specific incoming replies before they become comments.

Get It

Download from WordPress.org or grab the source on GitHub.

A dedicated blog?

This blog has always been about the ActivityPub plugin, and ATmosphere is a different plugin for a different protocol, so this post is something of a guest appearance. If readers tell us they want ongoing release posts, deep dives, and roadmap notes about ATmosphere too, we’ll spin up a dedicated home for it. For now, follow along here and let us know.

A huge thank-you to everyone who shaped 1.0.0, especially Brandon Kraft (@kraft) and Ryan Cowles, who carried huge pieces of the onboarding, settings, and publishing work over the last few months. Thanks also to the AT Protocol and Bluesky folks who’ve been generous with their time on the lexicon questions.

Try it out, point your domain at Bluesky, publish a post, and tell us what you think. What should ATmosphere do next?


Share this:

Comments

27 responses to “ATmosphere 1.0.0 — Liftoff”

  1. william.maggos Avatar

    @activitypub.blog @kraft

    seems to confirm my suspicion that AT is fundamentally less "web focused" (and therefore forever less supportive of independent publishing) than AP.

    Like

  2. George Hotelling Avatar

    @activitypub.blog @kraft years ago I pitched that Jetpack should offer a websocket server for streaming events to/from WP. It sounds like that would have made a WP-native PDS possible.

    Like

  3. Ralf Wiechers | Drivingralle Avatar

    Great news!
    Looking forward to the future development

    Like

  4. Roscoe Rubin-Rottenberg Avatar

    Amazing! And yes, I would love a dedicated blog about the Atmosphere plugin.

    Like

  5. Alex Avatar
    Alex

    This is great for people who haven’t connected their Bluesky to their WordPress account already, but what if I already have my custom domain as my handle on Bluesky using an _atproto DNS record?

    Will installing this replace, override, or potentially break my existing Bluesky account link?

    Like

  6. The Emu Café Social - A tranquil cafe with coffee and tea Avatar

    I use the ActivityPub for WordPress plugin here on ECS (follow me from Masotdon or similar at @naferrell@social.emucafe.org). Because ActivityPub for WordPress is a key part of this project, I subscribe to the ActivityPub for WordPress blog with my feed reader. Thanks to my subscription, I was able to read ATmosphere 1.0.0 — Liftoff. ATmosphere is a new WordPress plugin which integrates a Bluesky account with a WordPress website, such that “[w]hen you publish a post, ATmosphere shares it on Bluesky and stores the full article on your AT Protocol account as a structured record.” Moreover, “Bluesky replies, likes, and reposts come back as comments on your WordPress post.” I set up something similar by using Bridgy Fed to bridge my ECS ActivityPub account to Bluesky, but why not create a whole Bluesky account? I installed ATmosphere, set up a new Bluesky account (I have a “personal” account for sharing links but it goes mostly unused), and connected it with ATmosphere. Set-up went well. The only issue I had was that I had to manually create a .well-known directory to set up social.emucafe.org as the Bluesky account handle, but it is done — so you can follow this site from Bluesky at social.emucafe.org. (I would offer some sort of guide, but the blog post and WordPress plugin page guides are the ones to follow.)

    Like

  7. […] to ATmosphere 1.0.0 — Liftoff by Matthias Pfefferle (ActivityPub for WordPress) When you publish a post, ATmosphere shares it on […]

    Like

  8. Ring2 🐸 Avatar

    @activitypub.blog
    This plugin has a feature I heavily demand for the Fediverse plugin too: to post as an existing handle.

    cc @pfefferle

    #wordpress

    Like

    1. Matthias Pfefferle Avatar

      @ring2 @activitypub.blog this is funny, because for me, the ATmosphere plugin in its actual version is only a first step!

      when you need something similar for Mastodon, there are a lot of cross-posting plugins out there: https://wordpress.org/plugins/search/mastodon/

      these allow you to re-use an existing account.

      Like

      1. Ring2 🐸 Avatar

        @pfefferle

        I know, thx. But why not learning e.g. from Friendica and establish a "distant self" function to make my WordPress Blog the hub of my Fediverse activities?

        @activitypub.blog

        Like

        1. Matthias Pfefferle Avatar

          @ring2 @activitypub.blog I am not saying that it is a bad idea, it is simply not what the ActivityPub plugin is about! It is built with an alternative to Mastodon or Frindi.ca in mind, to use your blog as the instance for all activities.

          Maybe the friends plugin of @alex might be what you are searching for!?

          Like

        2. Matthias Pfefferle Avatar
          1. Ring2 🐸 Avatar

            @pfefferle
            Danke. Das kannte ich noch nicht. (Will ja auch nicht undankbar wirken, aber auch das löst mein Problem nicht ;))

            @activitypub.blog

            Like

  9. ATmosphere 1.0.0 — Liftoff Avatar

    […] Read Full Article […]

    Like

  10. Robert Finch Avatar

    Don’t know what I am doing wrong (or what I’m not doing) but I don’t see comments or likes on the actual WordPress blog post. The post has been pushed through to Bluesky, though.

    Like

    1. Jeremy Herve Avatar

      Comments and Likes seem to appear right now; I do see your comment :)

      Would you mind telling us more about your setup? Are you trying to access the post on desktop, on mobile, in the mobile app, or from somewhere else?

      Like

      1. Robert Finch Avatar

        Hi Jeremy. Yes, they are both appearing now. I’m not sure if I just needed to be more patient (hehe) or if it was because I logged out of my WordPress and logged back in. I’m using desktop. But everything seems to be working as intended. Love how this looks!

        Liked by 1 person

    2. Matthias Pfefferle Avatar

      Comments do not come in in real time. Bluesky works a bit different than ActivitiyPub, comments will not be pushed to your blog, the plugin has to pull them regularly and depending on your cron setup, this can take a bit of time.

      Like

  11. ATmosphere för Wordpress - Fedi-Nyheterna Avatar

    […] har de som skapat ActivityPub-tillägget också skapat ett tillägg för ATmosphere, dvs AT-protokollet som Bluesky använder. Ett inlägg på bloggen blir automatiskt ett inlägg i […]

    Like

  12. […] expansion into long-form content came shortly after the creation of WordPress advertisement Earlier this month, it launched its own plugin that allows any WordPress site to publish to […]

    Like

  13. […] expansión al contenido de formato largo se produjo poco después de WordPress. anuncio A principios de este mes lanzó su propio complemento que permite que cualquier sitio de WordPress […]

    Like

  14. Bluesky embraces long-form content material to counter X Articles - Wer links Avatar

    […] enlargement to long-form content material follows shortly after WordPress’s announcement earlier this month of its personal plugin that permits any WordPress web site to publish to the […]

    Like

  15. My site: On The Atmosphere – TheBull.App Avatar

    […] ATmosphere 1.0.0 — Liftoff […]

    Like

  16. ActivityPub and ATmosphere Avatar

    […] ATmosphere plugin launch and detail […]

    Like

  17. Deniz Ege Tunçay Avatar

    @kraft @https://activitypub.blog/?author=0

    This is a fantastic plugin. I thank everyone who developed it; as someone who loves archiving all my content on my blog, I will definitely use this plugin.

    I assume that if you also add “Status” as a Post type in the ATmosphere settings, when I write social media posts for Fediverse (not blog posts) through the Friends plugin, it will be counted as if I’m writing them in Bluesky as well. Am I assuming this correctly?

    Like

  18. Find Me in the Atmosphere - Pixelflips Avatar

    […] piece that makes this work is the ATmosphere plugin. I installed it here on pixelflips.com, pointed my Bluesky handle at my own domain, and now posts […]

    Like

Leave a comment