[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fOfggkb6i_aWAG3Xlv8gXoweUZOPxh-WNhZIE-LXgQ8M":3},{"slug":4,"display_name":4,"profile_url":5,"plugin_count":6,"total_installs":7,"avg_security_score":8,"avg_patch_time_days":9,"trust_score":10,"computed_at":11,"plugins":12},"tylrfishr","https:\u002F\u002Fprofiles.wordpress.org\u002Ftylrfishr\u002F",1,0,100,30,94,"2026-05-20T03:11:35.407Z",[13],{"slug":14,"name":15,"version":16,"author":4,"author_profile":5,"description":17,"short_description":18,"active_installs":7,"downloaded":19,"rating":7,"num_ratings":7,"last_updated":20,"tested_up_to":21,"requires_at_least":22,"requires_php":23,"tags":24,"homepage":28,"download_link":29,"security_score":8,"vuln_count":7,"unpatched_count":7,"last_vuln_date":30,"fetched_at":31},"wireservice","Wireservice","1.2.0","\u003Cp>Publish your posts and pages to the AT Protocol using the standard.site lexicons.\u003C\u002Fp>\n\u003Ch3>Requirements\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>PHP 8.3+\u003C\u002Fli>\n\u003Cli>WordPress 6.4+\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Setup\u003C\u002Fh3>\n\u003Col>\n\u003Cli>Go to \u003Cstrong>Settings > Wireservice\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003Cli>Connect your AT Protocol account via the OAuth flow.\u003C\u002Fli>\n\u003Cli>Configure your \u003Cstrong>Publication\u003C\u002Fstrong> settings (name, description, icon, theme colors) and sync to AT Protocol.\u003C\u002Fli>\n\u003Cli>Enable \u003Cstrong>Document\u003C\u002Fstrong> syncing and configure how post titles, descriptions, and cover images are sourced.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3>How It Works\u003C\u002Fh3>\n\u003Ch3>Publication\u003C\u002Fh3>\n\u003Cp>Your WordPress site is represented as a \u003Ccode>site.standard.publication\u003C\u002Fcode> record on AT Protocol. The plugin syncs site-level metadata including:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Name\u003C\u002Fstrong> &mdash; from WordPress site title, Yoast SEO, or a custom value\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Description\u003C\u002Fstrong> &mdash; from WordPress tagline, Yoast SEO, or a custom value\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Icon\u003C\u002Fstrong> &mdash; from WordPress site icon or a custom upload\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Theme colors\u003C\u002Fstrong> &mdash; background, foreground, accent, and accent foreground. NOTE: these are used by other ATProto platforms to style your content, not on your WordPress site.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Discoverability\u003C\u002Fstrong> &mdash; opt in or out of discovery feeds. NOTE: these are used by other ATProto platforms to show your publication in algorithmic feeds, not on your WordPress site.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The plugin also serves a \u003Ccode>.well-known\u002Fsite.standard.publication\u003C\u002Fcode> endpoint that returns the AT-URI of your publication record.\u003C\u002Fp>\n\u003Ch3>Documents\u003C\u002Fh3>\n\u003Cp>When document syncing is enabled, published posts and pages are automatically synced as \u003Ccode>site.standard.document\u003C\u002Fcode> records. Each document includes:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Title and description (configurable source)\u003C\u002Fli>\n\u003Cli>Cover image (featured image, Yoast SEO image, or custom)\u003C\u002Fli>\n\u003Cli>Publication date and last-updated date\u003C\u002Fli>\n\u003Cli>Relative path (permalink)\u003C\u002Fli>\n\u003Cli>Tags and categories\u003C\u002Fli>\n\u003Cli>Optionally, full plain-text content\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Documents are created on publish, updated on edit, and deleted when a post is trashed, deleted, or unpublished.\u003C\u002Fp>\n\u003Cp>A \u003Ccode>\u003Clink rel=\"site.standard.document\">\u003C\u002Fcode> tag is added to the \u003Ccode>\u003Chead>\u003C\u002Fcode> of each synced post for verification.\u003C\u002Fp>\n\u003Cp>Note that Wireservice does not have a content lexicon yet. This is in development.\u003C\u002Fp>\n\u003Ch3>Per-Post Overrides\u003C\u002Fh3>\n\u003Cp>A \u003Cstrong>Wireservice\u003C\u002Fstrong> meta box appears on the post editor, allowing per-post overrides for:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Title source\u003C\u002Fli>\n\u003Cli>Description source\u003C\u002Fli>\n\u003Cli>Cover image source\u003C\u002Fli>\n\u003Cli>Whether to include full content\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Yoast SEO Integration\u003C\u002Fh3>\n\u003Cp>When Yoast SEO is active, additional source options become available for both publication and document settings:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Publication\u003C\u002Fstrong>: Yoast organization name, website name, homepage meta description\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Documents\u003C\u002Fstrong>: Yoast SEO title, social title, X title, meta description, social description, X description, social image, X image\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Self-Hosting the OAuth Service\u003C\u002Fh3>\n\u003Cp>Wireservice authenticates with AT Protocol through an external OAuth service. By default it uses \u003Ccode>https:\u002F\u002Faip.wireservice.net\u003C\u002Fcode>, but you can run your own instance using \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgraze-social\u002Faip\" rel=\"nofollow ugc\">AIP\u003C\u002Fa>, a high-performance OAuth 2.1 authorization server with native AT Protocol integration.\u003C\u002Fp>\n\u003Ch3>Running AIP\u003C\u002Fh3>\n\u003Cp>AIP requires Rust 1.87+. To run locally:\u003C\u002Fp>\n\u003Col>\n\u003Cli>\n\u003Cp>Generate an OAuth signing key with \u003Ccode>goat\u003C\u002Fcode>: \u003Ccode>goat key generate -t p256\u003C\u002Fcode>. Save the public and private keys somewhere safe.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Clone AIP: \u003Ccode>git clone https:\u002F\u002Fgithub.com\u002Fgraze-social\u002Faip.git\u003C\u002Fcode>\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Setup environment variables:\u003C\u002Fp>\n\u003Cp>\u003Ccode>EXTERNAL_BASE=https:\u002F\u002Fyour-domain.com\u003Cbr \u002F>\nDPOP_NONCE_SEED=$(openssl rand -hex 32)\u003Cbr \u002F>\nSTORAGE_BACKEND=sqlite\u003Cbr \u002F>\nATPROTO_OAUTH_SIGNING_KEYS=\u003C\u002Fcode>did:key:${YOUR_PRIVATE_KEY}\u003Ccode>OAUTH_SIGNING_KEYS=\u003C\u002Fcode>did:key:${YOUR_PRIVATE_KEY}\u003Ccode>ENABLE_CLIENT_API=true\u003Cbr \u002F>\nOAUTH_SUPPORTED_SCOPES=\"atproto:atproto atproto:repo:site.standard.publication atproto:repo:site.standard.document\u003Cbr \u002F>\natproto:blob:*\u002F*\"\u003C\u002Fcode>\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Run AIP: \u003Ccode>cargo run --bin aip\u003C\u002Fcode>\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Or with Docker:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>`\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>docker build -t aip .\u003Cbr \u002F>\ndocker run -p 8080:8080 \\\u003Cbr \u002F>\n  \u002F\u002F all of the above env vars here\u003Cbr \u002F>\n  aip\u003Cbr \u002F>\n    `\u003C\u002Fp>\n\u003Cp>For production, use the \u003Ccode>postgres\u003C\u002Fcode> storage backend instead of \u003Ccode>sqlite\u003C\u002Fcode>. Depending on your hosting environment, you may need to manually set the \u003Ccode>DNS_NAMESERVERS\u003C\u002Fcode> env var so that your AIP service can resolve handles properly. (Wireservice uses \u003Ccode>8.8.8.8,1.1.1.1\u003C\u002Fcode>).\u003C\u002Fp>\n\u003Ch3>Configuring Wireservice\u003C\u002Fh3>\n\u003Cp>Once your AIP instance is running, update the OAuth Service URL in WordPress:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Go to \u003Cstrong>Settings > Wireservice\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003Cli>Set the \u003Cstrong>OAuth Service URL\u003C\u002Fstrong> to your AIP instance (e.g., \u003Ccode>https:\u002F\u002Fyour-domain.com\u003C\u002Fcode>).\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>This is stored as the \u003Ccode>wireservice_oauth_url\u003C\u002Fcode> option and can also be set programmatically:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>`\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>update_option(‘wireservice_oauth_url’, ‘https:\u002F\u002Fyour-domain.com’);\u003Cbr \u002F>\n    \u003Ccode>\u003Ch3>Filters\u003C\u002Fh3>\u003C\u002Fcode>\u003Cbr \u002F>\n\u002F\u002F Customize which post types are synced (default: post, page)\u003Cbr \u002F>\nadd_filter(‘wireservice_syncable_post_types’, function ($types) {\u003Cbr \u002F>\n    $types[] = ‘custom_post_type’;\u003Cbr \u002F>\n    return $types;\u003Cbr \u002F>\n});\u003C\u002Fp>\n\u003Cp>\u002F\u002F Control whether a specific post should sync\u003Cbr \u002F>\nadd_filter(‘wireservice_should_sync_post’, function ($should_sync, $post) {\u003Cbr \u002F>\n    return $should_sync;\u003Cbr \u002F>\n}, 10, 2);\u003Cbr \u002F>\n    `\u003C\u002Fp>\n\u003Ch3>License\u003C\u002Fh3>\n\u003Cp>\u003Ca href=\"LICENSE.md\" rel=\"nofollow ugc\">AGPL 3.0\u003C\u002Fa>\u003C\u002Fp>\n","Publish your posts and pages to the AT Protocol using the standard.site lexicons.",139,"2026-03-19T21:23:00.000Z","6.9.4","6.4","8.3",[25,26,27],"atproto","bluesky","syndication","https:\u002F\u002Fwordpress.wireservice.net","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwireservice.1.2.0.zip",null,"2026-04-16T10:56:18.058Z"]