Important
Proof of Concept — This plugin is under active development and not yet ready for production use. APIs, data formats, and behavior may change without notice.
Publish WordPress posts to AT Protocol (Bluesky + standard.site) via native OAuth.
ATmosphere connects your WordPress site to the AT Protocol network. When you publish a post, it is automatically cross-posted to Bluesky and registered as a standard.site document on your Personal Data Server (PDS).
The plugin uses native AT Protocol OAuth with PKCE and DPoP — no third-party proxy or intermediary service required. Your credentials never leave your site.
- Native OAuth — Authenticate directly with your PDS using OAuth 2.1 with PKCE and DPoP.
- Bluesky cross-posting — Publish
app.bsky.feed.postrecords that appear in your followers' timelines. - standard.site records — Create
site.standard.publicationandsite.standard.documentrecords on your PDS. - Facet detection — Automatically detects links, mentions, and hashtags in post content.
- Per-post control — Enable or disable publishing for individual posts via a meta box.
- Backfill — Sync existing published posts to AT Protocol in bulk.
- Connect your Bluesky / AT Protocol account via OAuth on the settings page.
- Configure your publication metadata (name, description, icon).
- Publish a post — ATmosphere creates both a Bluesky post and a standard.site document record on your PDS.
- PHP 8.2+
- WordPress 6.2+
- Composer
- Clone this repository into your
wp-content/plugins/directory:git clone https://github.com/pfefferle/atmosphere.git wp-content/plugins/atmosphere
- Install dependencies:
cd wp-content/plugins/atmosphere composer install --no-dev - Activate the plugin through the "Plugins" menu in WordPress.
- Go to Settings → ATmosphere and connect your AT Protocol account.
composer install
npm installnpm run env-start # Start WordPress environment
npm run env-stop # Stop environmentcomposer lint # Check PHP coding standards
composer lint:fix # Auto-fix PHP issuescomposer test # Full PHPUnit test suite
npm run env-test # Run tests via wp-env
npm run env-test -- --filter test_name # Run a single testincludes/
├── oauth/ # Full PKCE + DPoP + PAR native OAuth flow
│ ├── class-client.php
│ ├── class-dpop.php
│ ├── class-encryption.php
│ ├── class-nonce-storage.php
│ └── class-resolver.php
├── transformer/ # WP → AT Protocol record conversion
│ ├── class-base.php
│ ├── class-document.php
│ ├── class-facet.php
│ ├── class-post.php
│ ├── class-publication.php
│ └── class-tid.php
├── wp-admin/ # Settings page, meta box, REST endpoint
├── class-api.php # DPoP-authenticated PDS requests with nonce retry
├── class-atmosphere.php
├── class-backfill.php
├── class-publisher.php # Atomic batch applyWrites for both record types
└── functions.php
You need an AT Protocol account. Bluesky (bsky.social) is the most common provider, but any AT Protocol PDS will work.
No. The plugin authenticates directly with your PDS using native AT Protocol OAuth. No tokens are sent to or stored by any intermediary.
Each published post creates:
- An
app.bsky.feed.postrecord (visible on Bluesky). - A
site.standard.documentrecord (structured metadata for the ATmosphere).
Your site itself is represented by a site.standard.publication record.
ATmosphere is licensed under the GPL v2 or later.