{"id":291880,"date":"2026-03-30T16:16:37","date_gmt":"2026-03-30T16:16:37","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/bluefeed\/"},"modified":"2026-03-31T15:46:29","modified_gmt":"2026-03-31T15:46:29","slug":"bluefeed","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/bluefeed\/","author":20815504,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.5","stable_tag":"1.0.5","tested":"6.9.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"BlueFeed","header_author":"Alex Hedstrom","header_description":"Display Bluesky feeds on your WordPress site using shortcodes. Supports multiple layouts including a classic feed, cards, and an Instagram-style image grid.","assets_banners_color":"91bfeb","last_updated":"2026-03-31 15:46:29","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/bluefeed.social","header_author_uri":"https:\/\/alexhedstrom.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":110,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.3":{"tag":"1.0.3","author":"alexhedstrom","date":"2026-03-30 16:14:52"},"1.0.4":{"tag":"1.0.4","author":"alexhedstrom","date":"2026-03-30 19:38:19"},"1.0.5":{"tag":"1.0.5","author":"alexhedstrom","date":"2026-03-31 15:46:29"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3494896,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3494896,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3494896,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3494896,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.3","1.0.4","1.0.5"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Classic layout \u2013 familiar timeline view","2":"Cards layout \u2013 responsive grid","3":"Images layout \u2013 Instagram-style image grid with hover stats","4":"Compact layout \u2013 minimal list view","5":"Admin settings page with color customization"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[223781,252,36857,80,154],"plugin_category":[43],"plugin_contributors":[259029],"plugin_business_model":[],"class_list":["post-291880","plugin","type-plugin","status-publish","hentry","plugin_tags-bluesky","plugin_tags-feed","plugin_tags-instagram-grid","plugin_tags-shortcode","plugin_tags-social-media","plugin_category-customization","plugin_contributors-alexhedstrom","plugin_committers-alexhedstrom"],"banners":{"banner":"https:\/\/ps.w.org\/bluefeed\/assets\/banner-772x250.png?rev=3494896","banner_2x":"https:\/\/ps.w.org\/bluefeed\/assets\/banner-1544x500.png?rev=3494896","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/bluefeed\/assets\/icon-128x128.png?rev=3494896","icon_2x":"https:\/\/ps.w.org\/bluefeed\/assets\/icon-256x256.png?rev=3494896","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>BlueFeed<\/strong> lets you embed your Bluesky (AT Protocol) feed anywhere on your WordPress site using the <code>[bluefeed]<\/code> shortcode. Choose from four beautiful layouts:<\/p>\n\n<ul>\n<li><strong>Classic<\/strong> \u2013 A familiar social-media timeline look<\/li>\n<li><strong>Cards<\/strong> \u2013 A responsive card grid, great for visual content<\/li>\n<li><strong>Compact<\/strong> \u2013 A minimal, space-efficient list view<\/li>\n<li><strong>Images<\/strong> \u2013 An Instagram-style square image grid showing only posts with images, with hover overlays for likes and comments<\/li>\n<\/ul>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>4 layout styles (classic, cards, compact, images)<\/li>\n<li>Configurable column count for grid layouts<\/li>\n<li>Profile header with avatar, banner, bio, and stats<\/li>\n<li>Follow button linking to the Bluesky profile<\/li>\n<li>Automatic caching with configurable duration for fast page loads<\/li>\n<li>Stale-cache fallback \u2014 serves cached content if the API is temporarily unreachable<\/li>\n<li>Clickable links and @mentions auto-linked<\/li>\n<li>Repost indicators on classic layout<\/li>\n<li>Color customization via admin settings or per-shortcode attributes<\/li>\n<li>Test Connection button in admin to diagnose API connectivity<\/li>\n<li>Compatible with page builders (Breakdance, Elementor, Beaver Builder, etc.)<\/li>\n<li>Responsive design for all screen sizes<\/li>\n<li>Works with the public Bluesky API \u2014 no authentication required<\/li>\n<\/ul>\n\n<h4>Shortcode Examples<\/h4>\n\n<pre><code>[bluefeed]\n[bluefeed layout=\"images\" columns=\"4\" count=\"12\"]\n[bluefeed layout=\"compact\" count=\"5\" show_header=\"false\"]\n[bluefeed handle=\"other.bsky.social\" layout=\"classic\"]\n<\/code><\/pre>\n\n<h4>Shortcode Parameters<\/h4>\n\n<p><strong>Layout &amp; Display:<\/strong><\/p>\n\n<ul>\n<li><code>layout<\/code> \u2013 classic, cards, compact, or images (default: classic)<\/li>\n<li><code>count<\/code> \u2013 Number of posts (default: 9, max 100)<\/li>\n<li><code>handle<\/code> \u2013 Override the Bluesky handle from settings<\/li>\n<li><code>columns<\/code> \u2013 Grid columns for images\/cards (default: 3)<\/li>\n<li><code>gap<\/code> \u2013 Space between posts\/cards in pixels (default: auto per layout)<\/li>\n<li><code>border_radius<\/code> \u2013 Corner rounding in pixels (default: 12, use 0 for square)<\/li>\n<li><code>border_width<\/code> \u2013 Border thickness in pixels (default: 1, images layout defaults to 0)<\/li>\n<li><code>show_header<\/code> \u2013 Show profile header: true\/false (default: true)<\/li>\n<li><code>show_replies<\/code> \u2013 Include replies in the feed: true\/false (default: false)<\/li>\n<li><code>show_images<\/code> \u2013 Show images in classic\/cards layouts: true\/false (default: false)<\/li>\n<li><code>show_follow<\/code> \u2013 Show follow button: true\/false (default: true)<\/li>\n<li><code>show_caption<\/code> \u2013 Show post caption on hover in images layout: true\/false (default: false)<\/li>\n<\/ul>\n\n<p><strong>Color Overrides (hex values, e.g. #ffffff):<\/strong><\/p>\n\n<ul>\n<li><code>card_bg<\/code>, <code>placeholder_bg<\/code>, <code>post_text<\/code>, <code>meta_text<\/code>, <code>card_border<\/code><\/li>\n<li><code>link_color<\/code>, <code>link_hover<\/code>, <code>row_hover_bg<\/code>, <code>header_name<\/code><\/li>\n<li><code>follow_text<\/code>, <code>follow_bg<\/code>, <code>follow_border<\/code>, <code>follow_hover_text<\/code>, <code>follow_hover_bg<\/code><\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the <strong>Bluesky public API<\/strong> to retrieve and display Bluesky social media content on your WordPress site. It is required for all plugin functionality \u2014 without it, no feed or profile data can be displayed.<\/p>\n\n<h4>What data is sent and when<\/h4>\n\n<ul>\n<li><strong>Profile requests<\/strong> \u2013 When a page containing the <code>[bluefeed]<\/code> shortcode is loaded, the plugin sends the configured Bluesky handle to the endpoint <code>https:\/\/public.api.bsky.app\/xrpc\/app.bsky.actor.getProfile<\/code> to retrieve the user's profile information (display name, avatar, banner, bio, and follower\/following\/post counts).<\/li>\n<li><strong>Feed requests<\/strong> \u2013 On the same page load, the plugin sends the Bluesky handle along with display parameters (post count, filter type) to the endpoint <code>https:\/\/public.api.bsky.app\/xrpc\/app.bsky.feed.getAuthorFeed<\/code> to retrieve the user's posts.<\/li>\n<\/ul>\n\n<p>No visitor personal data, cookies, or tracking information is sent to the API. Responses are cached locally on your server (default 15 minutes, configurable) to reduce the number of external requests.<\/p>\n\n<h4>Service provider<\/h4>\n\n<p>This service is provided by <strong>Bluesky PBC<\/strong> (<a href=\"https:\/\/bsky.app\">bsky.app<\/a>).<\/p>\n\n<ul>\n<li><a href=\"https:\/\/bsky.social\/about\/support\/tos\">Terms of Service<\/a><\/li>\n<li><a href=\"https:\/\/bsky.social\/about\/support\/privacy-policy\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>bluefeed<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress<\/li>\n<li>Go to <strong>Settings \u2192 BlueFeed<\/strong> and enter your Bluesky handle<\/li>\n<li>Add the <code>[bluefeed]<\/code> shortcode to any page or post<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20bluesky%20account%3F\"><h3>Do I need a Bluesky account?<\/h3><\/dt>\n<dd><p>You need a Bluesky handle to display a feed. The plugin uses the public API to fetch posts \u2014 no App Password or authentication is required.<\/p><\/dd>\n<dt id=\"can%20i%20show%20multiple%20feeds%20on%20one%20page%3F\"><h3>Can I show multiple feeds on one page?<\/h3><\/dt>\n<dd><p>Yes! Use the <code>handle<\/code> parameter to show different accounts:<\/p>\n\n<pre><code>[bluefeed handle=\"user1.bsky.social\"]\n[bluefeed handle=\"user2.bsky.social\"]\n<\/code><\/pre><\/dd>\n<dt id=\"how%20does%20the%20images%20layout%20work%3F\"><h3>How does the Images layout work?<\/h3><\/dt>\n<dd><p>The Images layout automatically filters to only show posts that contain images, displaying them in an Instagram-style square grid. When visitors hover over an image, they see the reply, repost, and like counts.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20colors%3F\"><h3>Can I customize the colors?<\/h3><\/dt>\n<dd><p>Yes. You can set global default colors in <strong>Settings \u2192 BlueFeed \u2192 Color Customization<\/strong>, or override colors per-shortcode using color attributes like <code>card_bg=\"#1a1a2e\"<\/code>.<\/p><\/dd>\n<dt id=\"the%20feed%20shows%20a%20connection%20error.%20what%20should%20i%20do%3F\"><h3>The feed shows a connection error. What should I do?<\/h3><\/dt>\n<dd><p>Go to <strong>Settings \u2192 BlueFeed<\/strong> and click <strong>Test Connection<\/strong>. This will tell you whether your server can reach the Bluesky API. If it times out, your hosting provider may be blocking outbound HTTPS requests \u2014 contact them to whitelist <code>public.api.bsky.app<\/code>.<\/p><\/dd>\n<dt id=\"how%20does%20caching%20work%3F\"><h3>How does caching work?<\/h3><\/dt>\n<dd><p>Feed data is cached for 15 minutes by default (configurable in settings). If the API is temporarily unreachable, the plugin serves the last cached data instead of showing an error.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Added configurable gap\/spacing between posts in classic, cards, and images layouts<\/li>\n<li>New \"Card Gap\" setting in admin (Settings \u2192 BlueFeed \u2192 Layout &amp; Spacing)<\/li>\n<li>New <code>gap<\/code> shortcode parameter to override spacing per-shortcode (e.g. <code>[bluefeed layout=\"cards\" gap=\"24\"]<\/code>)<\/li>\n<li>Each layout retains its own default spacing when no gap is set (Classic: 12px, Cards: 16px, Images: 4px)<\/li>\n<li>Added configurable border radius for all card\/post elements<\/li>\n<li>New \"Border Radius\" setting in admin (Settings \u2192 BlueFeed \u2192 Layout &amp; Spacing)<\/li>\n<li>New <code>border_radius<\/code> shortcode parameter (e.g. <code>[bluefeed border_radius=\"0\"]<\/code> for square corners)<\/li>\n<li>Added configurable border width for all card\/post\/divider borders<\/li>\n<li>New \"Border Width\" setting in admin (Settings \u2192 BlueFeed \u2192 Layout &amp; Spacing)<\/li>\n<li>New <code>border_width<\/code> shortcode parameter (default: 1px, images layout defaults to 0)<\/li>\n<li>URLs, @mentions, and #hashtags are now clickable in the profile bio<\/li>\n<li>Added #hashtag linking in post text \u2014 links to Bluesky hashtag search<\/li>\n<li>URLs in posts and bio now display without the http\/https prefix for cleaner appearance<\/li>\n<li>Layout &amp; Spacing settings moved to their own admin section with a dedicated reset button<\/li>\n<li>Fixed compact layout hover background bleeding outside rounded corners on first and last rows<\/li>\n<li>Fixed card image radius gap when using larger border widths<\/li>\n<li>Fixed double line-break spacing in profile bio when URLs or domains are present<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Added \"View Details\" link on the Plugins page that opens the WordPress.org plugin information modal<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Added External services section to readme for third-party API disclosure compliance<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Moved admin settings page CSS and JS from inline to separate enqueued files for better performance and browser caching<\/li>\n<li>Fixed copy-to-clipboard button showing both icons at the same time before being clicked<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Improved compact layout \u2013 tighter spacing, smaller avatars, and single-line flow for name and time on both desktop and mobile<\/li>\n<li>Fixed copy-to-clipboard icons missing on the admin settings page (SVGs were stripped by wp_kses_post)<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Four layout styles: classic, cards, compact, images<\/li>\n<li>Profile header with stats<\/li>\n<li>Caching system<\/li>\n<li>Public API integration<\/li>\n<\/ul>","raw_excerpt":"Display your Bluesky feed on any WordPress page or post with a simple shortcode. Multiple layouts including an Instagram-style image grid.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/291880","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=291880"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/alexhedstrom"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=291880"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=291880"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=291880"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=291880"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=291880"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=291880"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}