PluginProbe
Friends / 4.3.1
Friends v4.3.1
4.3.2 4.3.1 4.3.0 4.2.2 4.2.1 4.2.0 4.1.0 2.7.4 2.7.5 2.7.6 2.7.7 2.7.8 2.7.9 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.0 2.9.1 All 88 releases
friends / README.md

README.md in Friends 4.3.1, at README.md

681 lines 34.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 # Friends
2
3 - Contributors: akirk
4 - Tags: friends, rss, decentralized, social-network, own-your-data
5 - Requires PHP: 7.2
6 - Tested up to: 7.0
7 - License: GPL-2.0-or-later
8 - Stable tag: 4.3.1
9
10 A self-hosted social reader for WordPress: follow people via RSS and ActivityPub, with multiple themes and a plugin ecosystem.
11
12 [](https://wordpress.org/plugins/friends/![Active Installs](https://img.shields.io/wordpress/plugin/installs/friends?logo=wordpress&logoColor=%23fff&label=Active%20Installs&labelColor=%2323282dA&color=%2323282dA)](https://wordpress.org/plugins/friends/](https://wordpress.org/plugins/friends/) [](https://playground.wordpress.net/?networking=yes&blueprint-url=https://raw.githubusercontent.com/akirk/friends/refs/heads/main/assets/blueprints/blueprint.json![Playground Demo Link](https://img.shields.io/wordpress/plugin/v/friends?logo=wordpress&logoColor=%23fff&label=Playground%20Demo&labelColor=%233858e9&color=%233858e9)](https://playground.wordpress.net/?networking=yes&blueprint-url=https://raw.githubusercontent.com/akirk/friends/refs/heads/main/assets/blueprints/blueprint.json](https://playground.wordpress.net/?networking=yes&blueprint-url=https://raw.githubusercontent.com/akirk/friends/refs/heads/main/assets/blueprints/blueprint.json) [](https://playground.wordpress.net/?networking=yes&blueprint-url=https://raw.githubusercontent.com/akirk/friends/refs/heads/main/assets/blueprints/blueprint-prefilled.json![Configured Playground Demo Link](https://img.shields.io/wordpress/plugin/v/friends?logo=wordpress&logoColor=%23fff&label=Configured%20Playground%20Demo&labelColor=%23089809&color=%23089809)](https://playground.wordpress.net/?networking=yes&blueprint-url=https://raw.githubusercontent.com/akirk/friends/refs/heads/main/assets/blueprints/blueprint-prefilled.json](https://playground.wordpress.net/?networking=yes&blueprint-url=https://raw.githubusercontent.com/akirk/friends/refs/heads/main/assets/blueprints/blueprint-prefilled.json)
13
14 ## Description
15
16 The Friends plugin turns your WordPress into a self-hosted social reader. Follow people via RSS and ActivityPub (Mastodon and other Fediverse platforms) and read their posts through one of several built-in themes — Mastodon-style, Google Reader-style, or the default view — with dark mode support.
17
18 **Combine this plugin with the ActivityPub plugin to participate in the Fediverse from your own site. Use the Enable Mastodon Apps plugin to use mobile and desktop Mastodon apps with your WordPress.**
19
20 The plugin is designed to be extensible: other plugins can add parsers for new feed sources, new themes, and new functionality like saving posts to a collection or sending them to an eReader.
21
22 You can...
23 - Choose from multiple themes: Mastodon-style, Google Reader-style, and a block theme with dark mode.
24 - Organize your subscriptions into folders.
25 - Have multiple feeds per person (blog, social media, etc.).
26 - Categorize incoming content with Post Formats and view all posts of a certain format across your feeds.
27 - Define rules to filter incoming content.
28 - Get full-post email notifications from your favorite blogs.
29 - Save posts to a collection for later reference (via the Post Collection plugin).
30 - Send posts to your eReader (via the Send to E-Reader plugin).
31 - Subscribe to any site with one click using the [](https://chromewebstore.google.com/detail/friends/ledbghpaplkpclndlommpbokndieflhlFriends browser extension](https://chromewebstore.google.com/detail/friends/ledbghpaplkpclndlommpbokndieflhl](https://chromewebstore.google.com/detail/friends/ledbghpaplkpclndlommpbokndieflhl) (also available [](https://addons.mozilla.org/en-US/firefox/addon/wpfriends/for Firefox](https://addons.mozilla.org/en-US/firefox/addon/wpfriends/](https://addons.mozilla.org/en-US/firefox/addon/wpfriends/)).
32
33 [](https://www.youtube.com/watch?v=4bz6GluXnsk![Friends Plugin Demo on Youtube](img/friends-plugin-youtube-thumbnail.png)](https://www.youtube.com/watch?v=4bz6GluXnsk](https://www.youtube.com/watch?v=4bz6GluXnsk)
34
35 ### Philosophy
36
37 The Friends Plugin was built to make use of what WordPress provides:
38
39 - You use the WordPress infrastructure (Gutenberg or Classic Editor, what you prefer) to create your posts.
40 - Followed people are stored as taxonomy terms, their posts are cached as a custom post type — delete the term to unfollow.
41 - No extra tables: The Friends plugin just uses a post type, options, and some taxonomies to store its data. When you delete the plugin, your WordPress will be as slim as before.
42
43 The logo was created by Ramon Dodd, @ramonopoly. Thank you!
44
45 Documentation for the plugin can be found on the [](https://github.com/akirk/friends/wikiGitHub project Wiki](https://github.com/akirk/friends/wiki](https://github.com/akirk/friends/wiki).
46
47 **Development of this plugin is done [](https://github.com/akirk/friendson GitHub](https://github.com/akirk/friends](https://github.com/akirk/friends). Pull requests welcome. Please see [](https://github.com/akirk/friends/issuesissues](https://github.com/akirk/friends/issues](https://github.com/akirk/friends/issues) reported there before going to the [](https://wordpress.org/support/plugin/friendsplugin forum](https://wordpress.org/support/plugin/friends](https://wordpress.org/support/plugin/friends).**
48
49 ## Installation
50
51 1. Upload the `friends` directory to the `/wp-content/plugins/` directory
52 1. Activate the plugin through the 'Plugins' menu in WordPress
53
54 ## Frequently Asked Questions
55
56 ### Does this plugin create custom tables?
57 No, all the functionality is achieved with standard WordPress means. Followed people are stored as taxonomy terms, and their posts are cached in a custom post type.
58
59 ### What's the point? If I want to follow people I can use a social network.
60 That's exactly the point — with WordPress you own your data and decide where to host it. You get all the benefits of open source software without depending on a third party.
61
62 ### What happens if I modify or delete a post?
63 Cached posts are stored as the custom post type `friend_post_cache`. When you unfollow someone, their cached posts are removed with them.
64
65 ### Is there a browser extension?
66 Yes — install it for [](https://chromewebstore.google.com/detail/friends/ledbghpaplkpclndlommpbokndieflhlChrome](https://chromewebstore.google.com/detail/friends/ledbghpaplkpclndlommpbokndieflhl](https://chromewebstore.google.com/detail/friends/ledbghpaplkpclndlommpbokndieflhl) or [](https://addons.mozilla.org/en-US/firefox/addon/wpfriends/Firefox](https://addons.mozilla.org/en-US/firefox/addon/wpfriends/](https://addons.mozilla.org/en-US/firefox/addon/wpfriends/). It adds a toolbar button that lets you subscribe to the site you are currently visiting with one click. Pair it with the API key on the Friends → Browser Extension page to also expose quick actions from other Friends-aware plugins (saving to a collection, sending to your eReader, etc.).
67
68 ## Screenshots
69
70 1. Mastodon-style theme
71 2. Google Reader-style theme
72 3. Default view with compact mode
73 4. Multiple feeds per person, even on social networks
74 5. Categorize incoming content with Post Formats and view all posts of a certain format across your feeds
75 6. Use rules to filter incoming content
76 7. Organize subscriptions into folders
77 8. Followed people are stored as taxonomy terms
78
79 ## Changelog
80
81 ### 4.3.1
82 - Fix direct messages being federated as a Tombstone so they never arrived at the recipient. ([#718])
83 - Fix a fatal error when receiving a direct message from a sender whose feed doesn't resolve to a friend user. ([#719])
84
85 ### 4.3.0
86 - Notify Mastodon apps about received direct messages. ([#711])
87 - Show a link preview card for posts that link to an article, with a setting to turn it off. ([#712])
88 - Fix a fatal error that stopped the friends page from rendering when the ActivityPub plugin is not active. ([#714])
89
90 ### 4.2.2
91 - Fix the mobile direct messages layout and keyboard behavior. ([#693])
92 - Add delivery status indicators for ActivityPub direct messages. ([#694])
93 - Update CI actions to avoid Node module deprecation warnings. ([#695])
94 - Update CI actions to avoid Node module deprecation warnings. ([#696])
95 - Show direct message delivery status in the conversation overview and recover delivery tracking for older ActivityPub outbox items. ([#703])
96 - Quiet public posts created through Mastodon apps are stored as published posts with quiet-public ActivityPub visibility. ([#704])
97 - Document browser extension inline action responses that can update form state after saving. ([#705])
98 - Avoid a duplicate-key database error when the same ActivityPub activity is redelivered. ([#707])
99 - Fix a fatal error when unfollowing an account that isn't a Friends subscription through a Mastodon app. ([#709])
100
101 ### 4.2.1
102 - Render ActivityPub custom emoji in actor display names. ([#681])
103 - Parse direct XML feeds even when they are served with a text/plain content type. ([#683])
104 - Hydrate Enable Mastodon Apps favourite and bookmark state from Friends reactions. ([#684])
105 - Fix local replies on cached ActivityPub posts not entering the outbox. ([#685])
106 - Avoid slow ActivityPub host lookups by caching actor handles for cached posts. ([#686])
107 - Fix ActivityPub re-follow actions for pending subscriptions. ([#687])
108 - Update the Playground workflow to add the test link to the pull request description instead of posting a comment. ([#688])
109 - Clarify ActivityPub feed unfollow and removal actions. ([#689])
110 - Fix default frontend theme colors so the page follows system dark mode. ([#690])
111 - Persist Mastodon API boosts locally so announced boosts also appear in Mastodon account statuses. ([#691])
112
113 ### 4.2.0
114 - Add a direct messages view with a conversation list and chat layout. ([#671])
115 - Show direct messages from ActivityPub users you do not follow and surface follower status on their profile. ([#672])
116 - Link profile message previews to the direct messages view. ([#673])
117 - Send ActivityPub direct messages through the outbox so delivery can use the normal persistence and retry flow. ([#674])
118 - Improve direct message links, drafts, grouping, and live refresh behavior. ([#675])
119 - Support ActivityPub custom emoji in boosted actor names. ([#676])
120 - Run CI checks on PR heads after the changelog workflow adds its generated commit. ([#677])
121 - Fix action icon alignment on follower and following pages. ([#678])
122 - Run normal PR checks after workflow-generated changelog commits. ([#679])
123
124 ### 4.1.0
125 - Add a frontend Add Friend page with feed review and OPML import support. ([#516])
126 - Surface the Friends browser extension in more places so users can discover it: the Browser Extension submenu is now always visible under Friends, the settings page describes what the extension does and links to the Chrome and Firefox stores, and the Tools → Bookmarklets card and README mention it as well. ([#663])
127 - Document that a category can be specified. ([#664])
128 - Prevent the ActivityPub plugin from federating cached friend posts so remote content stored locally is never announced as the site's own activity. ([#665])
129 - Add generic inline browser extension action dispatching so companion plugins can provide authenticated in-popup actions through Friends filters. ([#666])
130 - Show and pad the welcome content in the shipped frontend themes. ([#667])
131 - Add WordPress Abilities for AI Assistant to manage Friends subscriptions, feeds, single-feed refreshes, bulk refreshes, and cached timeline items. ([#668])
132 - Require changelog entries to come from PR body details and add release-prep dry-run validation. ([#669])
133
134 ### 4.0.6
135 - Fix conversation accounts for migrated users by falling back to friends_feed_url meta when post_author is 0. ([#655])
136 - Add a search field to the Followers, Following, and Mutual pages. ([#658])
137 - Add a Twitter/X-inspired frontend theme. ([#653])
138 - Avoid a fatal error in follower notifications when the ActivityPub plugin (7.5.0+) passes a WP_Post instead of a Follower model — the email handlers now resolve the Actor via Remote_Actors so new- and lost-follower emails work again, ending the inbox retry loop that this caused. ([#661])
139 - Mobile fixes: show the Friends icon in the admin bar on mobile and swap the generic group glyph for the Friends logo mark; stack chips and search on separate rows in the Google Reader theme on narrow screens; remove duplicate compose box from the Twitter theme mobile panel. ([#656])
140 - Fix loading indicator in Google Reader, Mastodon, and Twitter themes spinning the host element's text like a propeller; use a rotating pseudo-element instead. ([#659])
141 - Twitter theme: add a second widget area ("Friends Sidebar 2") shown in the right column. ([#657])
142
143 ### 4.0.5
144 - Fix search pagination losing search results on infinite scroll and add search controls (clear search, sort order). ([#636])
145 - Fix comment textarea causing horizontal scrollbar on mobile. ([#637])
146 - Fix TypeError when updating the Friends dashboard widget. ([#638])
147 - Add ActivityPub integration tests to CI and test for comment federation on cached posts. ([#639])
148 - Show ActivityPub comment form for posts whose permalink host is a known ActivityPub instance, with a fallback message linking to the source for non-ActivityPub posts. ([#641])
149 - Add `friends_browser_extension_actions` filter to allow plugins to register actions in the browser extension. ([#642])
150 - Remove the plugin installer page and update the README for 4.0. ([#643])
151 - Fix reblog account handle for WordPress blog-wide ActivityPub actors using ?author=0 URLs. ([#644])
152 - Add compose box to the Mastodon theme with @mention autocomplete and a setting to exclude status posts from the main RSS feed. ([#646])
153 - Use ap_actor post ID as account ID in Mastodon API when ActivityPub plugin is active. ([#647])
154 - Remove extra whitespace inside link tags that caused imprecise hover text in templates. ([#649])
155 - Add collapsible mobile panel for compose and search in Mastodon theme. ([#650])
156 - Fix Mastodon theme search autocomplete styling and prevent User_Query from returning non-subscription WordPress users. ([#651])
157
158 ### 4.0.4
159 - Mastodon theme: compact mode, mobile sidebar, and profile page cosmetics ([#634])
160
161 ### 4.0.3
162 - Fix header image centering in Mastodon theme ([#632])
163 - Fix Mastodon theme design issues ([#630])
164 - Add AJAX feed refresh on the frontend ([#631])
165
166 ### 4.0.2
167 - Clean up edit-friend UI: add username field, remove legacy roles ([#629])
168 - Fix crash in admin_edit_user_link for virtual subscriptions ([#628])
169 - Fix fatal error during feed discovery when content is null ([#627])
170 - Strip style tags and convert iframe embeds during feed sanitization ([#624])
171 - Defer theme name translations to avoid early textdomain loading ([#625])
172 - Google Reader: expand single post view, remove comments border ([#623])
173
174 ### 4.0.1
175 - Restore Add Friend admin page ([#622])
176 - Rename Subscriptions to Following in the frontend ([#616])
177 - Use Friends avatar for non-reblog posts ([#621])
178 - Fix author page performance regression ([#617])
179 - Make Mastodon theme header non-sticky on mobile ([#620])
180 - Fix avatar rendering in Mastodon theme and always show filters ([#615])
181 - Add ActivityPub subscription status check ([#613])
182 - Remove Spectre CSS and Sass, use plain CSS with native nesting ([#614])
183 - Add header image readability styling to all themes ([#612])
184 - Fix fatal error and stuck Pending migrations ([#610])
185 - Add new themes to the Friends plugin documentation
186
187 ### 4.0.0
188 - Remove Friendship functionality ([#515])
189 - Provide a block theme for the Friends page ([#362])
190 - Move post_tag to a friend_tag taxonomy ([#559])
191 - Implement Dark Mode for Friends Page ([#571])
192 - Improve Compatibility with ActivityPub 7.0 ([#574])
193 - Improve ActivityPub integration and migration UI ([#575])
194 - Use the ActivityPub header image if available ([#576])
195 - Fix the external actor display ([#577], [#578])
196 - Improve external mention behavior ([#579])
197 - Fix the links for ActivityPub comments ([#580])
198 - Prevent apostrophes in friend usernames and migrate existing ones ([#581])
199 - Refactor Friend Tag ([#583])
200 - Use preferredUsername instead of display name for ActivityPub suggested-username ([#585])
201 - Don't convert replies to comments without mentions ([#586])
202 - Fix batch pagination bug in migrations and add undo support ([#587])
203 - Optimize Mastodon API performance ([#592])
204 - Don't assume WP_HTML_Tag_Processor is available ([#553])
205 - Add News page with update announcements and migration improvements ([#598])
206 - Add subscription folders ([#599])
207 - Fix followers page and add filtering, sorting, and pagination ([#600])
208 - Add Google Reader theme ([#601])
209 - Add subscriptions page with filtering, sorting, and pagination ([#603])
210 - Fix video controls, reaction scroll loss, and PHP warning ([#604])
211 - Add Mastodon-style theme ([#605])
212 - Fix folder support in friend-list widget and block ([#607])
213
214 ### 3.6.0
215 - Add support for PeerTube ([#546])
216 - Show as who you'll follow ([#545])
217 - Add support for following via textbox on Mastodon ([#544])
218 - Fix broken redirect for non-existing friends ([#539])
219 - Don't use iframes in autogenerated youtube embeds ([#540])
220 - Update function call in ActivityPub ([#543])
221
222 ### 3.5.2
223 - Expose following list via ActivityPub ([#538])
224 - Convert query vars serialization to json ([#537])
225 - Don't replace tags outside of the friends page ([#536])
226 - Use EMA account data for a local user ([#535])
227 - EMA: Fix following number for own user ([#534])
228 - Remove external hover links ([#533])
229 - Plugin Check Fixes ([#532])
230 - Ajaxify Post Count display on the main friends page ([#531])
231 - Always apply replace rules and fix html entity replacing ([#530])
232
233 ### 3.5.1
234 - Fix undefined user_id variable ([#525])
235 - Fix broken rewrite rules ([#524])
236
237 ### 3.5.0
238 - Prevent friends page running wide in compact view ([#522])
239 - Prevent fatal for boosted post ([#521])
240 - Flush Rewrite Rules later ([#520])
241
242 ### 3.4.9
243 - Message fixes ([#518], [#519])
244 - Display only images in compact mode ([#517])
245
246 ### 3.4.8
247 - Enable Mastodon Apps: Fix wrong reblog attribution ([#510])
248
249 ### 3.4.7
250 - Remove profile link from the Activitypub Follower e-mail ([#507])
251 - Add support for Youtube Feeds ([#508])
252 - Enable Mastodon Apps: Fix broken posting experience without ActivityPub plugin ([#506])
253
254 ### 3.4.6
255 - EMA: Fix wrong display of blog author for friends posts in subscriptions ([#505])
256 - Allow CORS request for moz-extensions to the frontpage ([#501])
257 - Fix Fatal when accessing the Activitypub outbox ([#504])
258
259 ### 3.4.5
260 - Enable Mastodon Apps: Fix user query ([#500])
261
262 ### 3.4.4
263 - Friends Page: ensure friends posts can be collapsed / uncollapsed ([#496])
264 - Friends Page: Allow clicking on collapsed links ([#497])
265
266 ### 3.4.3
267 - Rerelease of 3.4.2, which got stuck somewhere on WordPress.org
268
269 ### 3.4.2
270 - Many small UI Updates ([#494]):
271 - Added a keyboard shortcut for edit (press e) when you have the capabilities to edit a post (for example in a post collection)
272 - Don't hide the header overflow in mobile anymore
273 - Fix reply menu item to open comments on the same page
274 - Add a "still loading" text when loading comments takes long
275 - Show reply and boost menu links only for ActivityPub posts
276 - Show the comment form even if you disabled commenting globally on your WordPress
277
278 ### 3.4.1
279 - DMs: Preview lastest message ([#493])
280 - Fix broken DMs when using the blog user in Activitypub ([#492])
281
282 ### 3.4.0
283 - Fix old posts not being deleted for ActivityPub ([#476])
284 - Implement DMs for ActivityPub and EMA ([#489])
285 - Improve Frontend margins ([#490])
286 - Replace string ids for subscriptions with high ints ([#483])
287 - Fix redirect after converting user ([#484])
288 - Fix replying to posts with a different permalink ([#478])
289 - EMA: Implement following endpoint data ([#480])
290 - EMA: Remove old filters ([#482])
291 - Extension: Allow moz-extension as a URL protocol ([#477])
292
293 ### 3.3.5
294 - Use Outbox of the upcoming ActivityPub 5.3.0 and fix announce+like bug with Activitypub 5.2.0 ([#463])
295 - Fix editing widgets in a block theme ([#475])
296 - Augment bookmarks and favourites endpoints in EMA ([#474])
297 - Improve the display of boosted posts ([#473])
298
299 ### 3.3.4
300 - Reduce the size of the Follow link ([#472])
301 - Fix unfollowing in Enable Mastodon Apps ([#471])
302 - Bring back the collapse button for statuses ([#470])
303 - Update plugins.json by @liviacarolgouvea ([#468])
304 - Don't rewrite data URLs ([#467])
305 - Prepare for the next Enable Mastodon Update ([#466])
306 - Don't add domain for mentions ([#465])
307 - Boosting: Show when there is a problem retrieving a URL ([#464])
308 - Fix wrong link in User Notifications ([#462])
309 - Don't double fetch URL for boosting ([#461])
310 - Prevent 404s for static templates ([#452])
311 - ActivityPub parser: avoid PHP warning by @jeherve ([#459])
312 - Dashboard: make widget title translatable by @jeherve ([#457])
313 - At A Glance messaging: ensure numbers are correctly displayed by @jeherve ([#458])
314 - Prevent error when no summary is set ([#453])
315 - Fix reversed Diff for post updates in the log ([#450])
316
317 ### 3.3.3
318 - Remove the setting to change the post formats in the main query loop because it was confusing ([#446])
319 - Protect posts that I have reacted on ([#447])
320 - Fix Typo which prevented unannounces ([#443])
321 - Plugins: Fix the More Details link ([#445])
322 - Check the right user option about the follower e-mail ([#444])
323
324 ### 3.3.2
325 - Fixed sending ActivityPub boosts ([#440])
326 - Fixed deleting by global retention number ([#439])
327
328 ### 3.3.1
329 - Fix some styling issues ([#437])
330 - Fix FediPress installation ([#435])
331
332 ### 3.3.0
333 - Styling Overhaul! ([#431])
334 - Add the FediPress theme ([#433])
335 - Incoming Feed Items: Fix in-article hash links ([#426])
336 - Add more functions for a browser extension ([#427])
337 - Browser Extension: API Key per user ([#429])
338 - Fix parsing Pixelfed's Image attachments ([#430])
339 - Add the friend's avatar to the page header ([#422])
340 - Add inline follow link ([#432])
341 - Log the newly supported ActivityPub events to the Friends Log ([#423])
342 - Augment the ActivityPub New Follower E-Mail ([#434])
343
344 ### 3.2.3
345 - ActivityPub: Support update of posts and people ([#421])
346 - Add support for ActivityPub Move activity ([#420])
347 - Make tagged Friend Posts accessible ([#419])
348 - Uninstall: Delete more taxonomy entries ([#415])
349 - Standardize REST Error messages ([#413])
350 - Use the ActivityPub blog user as an actor if set to blog profile only ([#411])
351 - Add a Duplicate Remover ([#409])
352
353 ### 3.2.2
354 - Move permissions checks into a dedicated permission_callback ([#408])
355 - Add more checks around friendships ([#407])
356
357 Hoping that this hardening will bring back the plugin to the WordPress.org directory after [](https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/friends/friends-321-missing-authorizationthis issue](https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/friends/friends-321-missing-authorization](https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/friends/friends-321-missing-authorization) was reported. While I am unsure it qualified to get the plugin taken down, I've done some hardening and bugfixing in the above pull requests. Unfortunately it was not reported in a way that it could be patched in time. If you have a security issue to report, please follow the instructions on [](https://github.com/akirk/friends/blob/main/SECURITY.mdhttps://github.com/akirk/friends/blob/main/SECURITY.md](https://github.com/akirk/friends/blob/main/SECURITY.md](https://github.com/akirk/friends/blob/main/SECURITY.md) and/or report through [](https://github.com/akirk/friends/securityhttps://github.com/akirk/friends/security](https://github.com/akirk/friends/security](https://github.com/akirk/friends/security).
358
359 ### 3.2.1
360 - OPML Import: Support OPMLs without nesting ([#403])
361
362 ### 3.2.0
363 - Improve Translate Live compatibility ([#401])
364 - Fix blog follower count in sidebar ([#400])
365
366 ### 3.1.9
367 - Fix bug with loading the main theme ([#398])
368
369 ### 3.1.8
370 - Fix missing JavaScript on the frontend ([#396])
371
372 ### 3.1.7
373 - Add a theme selector ([#393])
374 - Followers: Add Support for ActivityPub plugins blog profile ([#394])
375 - Generate the suggested user login from the display name ([#395])
376
377 ### 3.1.6
378 - Site Health: Check if the cron job is enabled ([#391])
379 - Fix starring of a friend ([#392])
380 - Layout improvements props @liviagouvea in ([#384])
381
382 ### 3.1.5
383 - Fix next page articles attached in the wrong place ([#388])
384 - Allow an extra redirect when discovering feeds ([#389])
385
386 ### 3.1.4
387 - Fix Warning: Undefined variable $account ([#385])
388 - Fixes for Friend Messages ([#387])
389 - Add Podcast Support ([#386])
390
391 ### 3.1.3
392 - Add AJAX refreshing of feeds ([#382])
393 - Fix Fatal in the MF2 library ([#381])
394
395 ### 3.1.2
396 - Fix support for threads.net ([#378])
397 - Add a warning if a user has not enabled ActivityPub on their threads.net account ([#377])
398 - Upgrade and improve the MF2 library ([#374])
399
400 ### 3.1.1
401 - Improve Name Detection ([#372])
402 - Add a Button to the Welcome page ([#373])
403
404 ### 3.1.0
405 - Add mark tag CSS to emails to ensure highlighting ([#365])
406 - Only show the dashboard widgets if the user has enough permissions ([#368])
407 - Prevent retrieving the same feed in parallel ([#366])
408 - Add Friend: Use more info from the given URL ([#369])
409 - Log ActivityPub actions and add the publish date to Announcements ([#364])
410 - Improve OPML Support ([#370])
411 - Update blueprints for previewing in WordPress Playground ([#371])
412
413 ### 3.0.0
414 - Show Mutual Followers and allow removing of followers ([#359])
415 - Add an e-mail notification for new and lost followers ([#358])
416 - Add the ability to disable notifications per post format and feed parser ([#357])
417 - Fix 404 on the New private post widget props @liviacarolgouvea ([#361])
418 - Improve ghost.org ActivityPub compatibility ([#356])
419
420 [#356]: https://github.com/akirk/friends/pull/356
421 [#357]: https://github.com/akirk/friends/pull/357
422 [#358]: https://github.com/akirk/friends/pull/358
423 [#359]: https://github.com/akirk/friends/pull/359
424 [#361]: https://github.com/akirk/friends/pull/361
425 [#364]: https://github.com/akirk/friends/pull/364
426 [#365]: https://github.com/akirk/friends/pull/365
427 [#366]: https://github.com/akirk/friends/pull/366
428 [#368]: https://github.com/akirk/friends/pull/368
429 [#369]: https://github.com/akirk/friends/pull/369
430 [#370]: https://github.com/akirk/friends/pull/370
431 [#371]: https://github.com/akirk/friends/pull/371
432 [#372]: https://github.com/akirk/friends/pull/372
433 [#373]: https://github.com/akirk/friends/pull/373
434 [#374]: https://github.com/akirk/friends/pull/374
435 [#377]: https://github.com/akirk/friends/pull/377
436 [#378]: https://github.com/akirk/friends/pull/378
437 [#381]: https://github.com/akirk/friends/pull/381
438 [#382]: https://github.com/akirk/friends/pull/382
439 [#384]: https://github.com/akirk/friends/pull/384
440 [#385]: https://github.com/akirk/friends/pull/385
441 [#386]: https://github.com/akirk/friends/pull/386
442 [#387]: https://github.com/akirk/friends/pull/387
443 [#388]: https://github.com/akirk/friends/pull/388
444 [#389]: https://github.com/akirk/friends/pull/389
445 [#391]: https://github.com/akirk/friends/pull/391
446 [#392]: https://github.com/akirk/friends/pull/392
447 [#393]: https://github.com/akirk/friends/pull/393
448 [#394]: https://github.com/akirk/friends/pull/394
449 [#395]: https://github.com/akirk/friends/pull/395
450 [#396]: https://github.com/akirk/friends/pull/396
451 [#398]: https://github.com/akirk/friends/pull/398
452 [#400]: https://github.com/akirk/friends/pull/400
453 [#401]: https://github.com/akirk/friends/pull/401
454 [#403]: https://github.com/akirk/friends/pull/403
455 [#407]: https://github.com/akirk/friends/pull/407
456 [#408]: https://github.com/akirk/friends/pull/408
457 [#409]: https://github.com/akirk/friends/pull/409
458 [#411]: https://github.com/akirk/friends/pull/411
459 [#413]: https://github.com/akirk/friends/pull/413
460 [#415]: https://github.com/akirk/friends/pull/415
461 [#419]: https://github.com/akirk/friends/pull/419
462 [#420]: https://github.com/akirk/friends/pull/420
463 [#421]: https://github.com/akirk/friends/pull/421
464 [#422]: https://github.com/akirk/friends/pull/422
465 [#423]: https://github.com/akirk/friends/pull/423
466 [#426]: https://github.com/akirk/friends/pull/426
467 [#427]: https://github.com/akirk/friends/pull/427
468 [#429]: https://github.com/akirk/friends/pull/429
469 [#430]: https://github.com/akirk/friends/pull/430
470 [#431]: https://github.com/akirk/friends/pull/431
471 [#432]: https://github.com/akirk/friends/pull/432
472 [#433]: https://github.com/akirk/friends/pull/433
473 [#434]: https://github.com/akirk/friends/pull/434
474 [#435]: https://github.com/akirk/friends/pull/435
475 [#437]: https://github.com/akirk/friends/pull/437
476 [#439]: https://github.com/akirk/friends/pull/439
477 [#440]: https://github.com/akirk/friends/pull/440
478 [#443]: https://github.com/akirk/friends/pull/443
479 [#444]: https://github.com/akirk/friends/pull/444
480 [#445]: https://github.com/akirk/friends/pull/445
481 [#446]: https://github.com/akirk/friends/pull/446
482 [#447]: https://github.com/akirk/friends/pull/447
483 [#450]: https://github.com/akirk/friends/pull/450
484 [#452]: https://github.com/akirk/friends/pull/452
485 [#453]: https://github.com/akirk/friends/pull/453
486 [#457]: https://github.com/akirk/friends/pull/457
487 [#458]: https://github.com/akirk/friends/pull/458
488 [#459]: https://github.com/akirk/friends/pull/459
489 [#461]: https://github.com/akirk/friends/pull/461
490 [#462]: https://github.com/akirk/friends/pull/462
491 [#463]: https://github.com/akirk/friends/pull/463
492 [#464]: https://github.com/akirk/friends/pull/464
493 [#465]: https://github.com/akirk/friends/pull/465
494 [#466]: https://github.com/akirk/friends/pull/466
495 [#467]: https://github.com/akirk/friends/pull/467
496 [#468]: https://github.com/akirk/friends/pull/468
497 [#470]: https://github.com/akirk/friends/pull/470
498 [#471]: https://github.com/akirk/friends/pull/471
499 [#472]: https://github.com/akirk/friends/pull/472
500 [#473]: https://github.com/akirk/friends/pull/473
501 [#474]: https://github.com/akirk/friends/pull/474
502 [#475]: https://github.com/akirk/friends/pull/475
503 [#476]: https://github.com/akirk/friends/pull/476
504 [#477]: https://github.com/akirk/friends/pull/477
505 [#478]: https://github.com/akirk/friends/pull/478
506 [#480]: https://github.com/akirk/friends/pull/480
507 [#482]: https://github.com/akirk/friends/pull/482
508 [#483]: https://github.com/akirk/friends/pull/483
509 [#484]: https://github.com/akirk/friends/pull/484
510 [#489]: https://github.com/akirk/friends/pull/489
511 [#490]: https://github.com/akirk/friends/pull/490
512 [#492]: https://github.com/akirk/friends/pull/492
513 [#493]: https://github.com/akirk/friends/pull/493
514 [#494]: https://github.com/akirk/friends/pull/494
515 [#496]: https://github.com/akirk/friends/pull/496
516 [#497]: https://github.com/akirk/friends/pull/497
517
518 [#500]: https://github.com/akirk/friends/pull/500
519
520 [#501]: https://github.com/akirk/friends/pull/501
521 [#504]: https://github.com/akirk/friends/pull/504
522 [#505]: https://github.com/akirk/friends/pull/505
523
524 [#506]: https://github.com/akirk/friends/pull/506
525 [#507]: https://github.com/akirk/friends/pull/507
526 [#508]: https://github.com/akirk/friends/pull/508
527
528 [#510]: https://github.com/akirk/friends/pull/510
529
530 [#517]: https://github.com/akirk/friends/pull/517
531 [#518]: https://github.com/akirk/friends/pull/518
532 [#519]: https://github.com/akirk/friends/pull/519
533
534 [#520]: https://github.com/akirk/friends/pull/520
535 [#521]: https://github.com/akirk/friends/pull/521
536 [#522]: https://github.com/akirk/friends/pull/522
537
538 [#524]: https://github.com/akirk/friends/pull/524
539 [#525]: https://github.com/akirk/friends/pull/525
540
541 [#530]: https://github.com/akirk/friends/pull/530
542 [#531]: https://github.com/akirk/friends/pull/531
543 [#532]: https://github.com/akirk/friends/pull/532
544 [#533]: https://github.com/akirk/friends/pull/533
545 [#534]: https://github.com/akirk/friends/pull/534
546 [#535]: https://github.com/akirk/friends/pull/535
547 [#536]: https://github.com/akirk/friends/pull/536
548 [#537]: https://github.com/akirk/friends/pull/537
549 [#538]: https://github.com/akirk/friends/pull/538
550
551 [#539]: https://github.com/akirk/friends/pull/539
552 [#540]: https://github.com/akirk/friends/pull/540
553 [#543]: https://github.com/akirk/friends/pull/543
554 [#544]: https://github.com/akirk/friends/pull/544
555 [#545]: https://github.com/akirk/friends/pull/545
556 [#546]: https://github.com/akirk/friends/pull/546
557 [#362]: https://github.com/akirk/friends/pull/362
558 [#515]: https://github.com/akirk/friends/pull/515
559 [#516]: https://github.com/akirk/friends/pull/516
560 [#547]: https://github.com/akirk/friends/pull/547
561 [#551]: https://github.com/akirk/friends/pull/551
562 [#553]: https://github.com/akirk/friends/pull/553
563 [#559]: https://github.com/akirk/friends/pull/559
564 [#562]: https://github.com/akirk/friends/pull/562
565 [#566]: https://github.com/akirk/friends/pull/566
566 [#567]: https://github.com/akirk/friends/pull/567
567 [#571]: https://github.com/akirk/friends/pull/571
568 [#574]: https://github.com/akirk/friends/pull/574
569 [#575]: https://github.com/akirk/friends/pull/575
570 [#576]: https://github.com/akirk/friends/pull/576
571 [#577]: https://github.com/akirk/friends/pull/577
572 [#578]: https://github.com/akirk/friends/pull/578
573 [#579]: https://github.com/akirk/friends/pull/579
574 [#580]: https://github.com/akirk/friends/pull/580
575 [#581]: https://github.com/akirk/friends/pull/581
576 [#583]: https://github.com/akirk/friends/pull/583
577 [#585]: https://github.com/akirk/friends/pull/585
578 [#586]: https://github.com/akirk/friends/pull/586
579 [#587]: https://github.com/akirk/friends/pull/587
580 [#592]: https://github.com/akirk/friends/pull/592
581 [#598]: https://github.com/akirk/friends/pull/598
582 [#599]: https://github.com/akirk/friends/pull/599
583 [#600]: https://github.com/akirk/friends/pull/600
584 [#601]: https://github.com/akirk/friends/pull/601
585 [#603]: https://github.com/akirk/friends/pull/603
586 [#604]: https://github.com/akirk/friends/pull/604
587 [#605]: https://github.com/akirk/friends/pull/605
588 [#607]: https://github.com/akirk/friends/pull/607
589
590 [#610]: https://github.com/akirk/friends/pull/610
591 [#612]: https://github.com/akirk/friends/pull/612
592 [#613]: https://github.com/akirk/friends/pull/613
593 [#614]: https://github.com/akirk/friends/pull/614
594 [#615]: https://github.com/akirk/friends/pull/615
595 [#616]: https://github.com/akirk/friends/pull/616
596 [#617]: https://github.com/akirk/friends/pull/617
597 [#620]: https://github.com/akirk/friends/pull/620
598 [#621]: https://github.com/akirk/friends/pull/621
599 [#622]: https://github.com/akirk/friends/pull/622
600
601 [#623]: https://github.com/akirk/friends/pull/623
602 [#624]: https://github.com/akirk/friends/pull/624
603 [#625]: https://github.com/akirk/friends/pull/625
604 [#627]: https://github.com/akirk/friends/pull/627
605 [#628]: https://github.com/akirk/friends/pull/628
606 [#629]: https://github.com/akirk/friends/pull/629
607
608 [#630]: https://github.com/akirk/friends/pull/630
609 [#631]: https://github.com/akirk/friends/pull/631
610 [#632]: https://github.com/akirk/friends/pull/632
611
612 [#634]: https://github.com/akirk/friends/pull/634
613
614 [#636]: https://github.com/akirk/friends/pull/636
615 [#637]: https://github.com/akirk/friends/pull/637
616 [#638]: https://github.com/akirk/friends/pull/638
617 [#639]: https://github.com/akirk/friends/pull/639
618 [#641]: https://github.com/akirk/friends/pull/641
619 [#642]: https://github.com/akirk/friends/pull/642
620 [#643]: https://github.com/akirk/friends/pull/643
621 [#644]: https://github.com/akirk/friends/pull/644
622 [#646]: https://github.com/akirk/friends/pull/646
623 [#647]: https://github.com/akirk/friends/pull/647
624 [#649]: https://github.com/akirk/friends/pull/649
625 [#650]: https://github.com/akirk/friends/pull/650
626 [#651]: https://github.com/akirk/friends/pull/651
627
628 [#653]: https://github.com/akirk/friends/pull/653
629 [#655]: https://github.com/akirk/friends/pull/655
630 [#656]: https://github.com/akirk/friends/pull/656
631 [#657]: https://github.com/akirk/friends/pull/657
632 [#658]: https://github.com/akirk/friends/pull/658
633 [#659]: https://github.com/akirk/friends/pull/659
634 [#661]: https://github.com/akirk/friends/pull/661
635
636 [#663]: https://github.com/akirk/friends/pull/663
637 [#664]: https://github.com/akirk/friends/pull/664
638 [#665]: https://github.com/akirk/friends/pull/665
639 [#666]: https://github.com/akirk/friends/pull/666
640 [#667]: https://github.com/akirk/friends/pull/667
641 [#668]: https://github.com/akirk/friends/pull/668
642 [#669]: https://github.com/akirk/friends/pull/669
643
644 [#671]: https://github.com/akirk/friends/pull/671
645 [#672]: https://github.com/akirk/friends/pull/672
646 [#673]: https://github.com/akirk/friends/pull/673
647 [#674]: https://github.com/akirk/friends/pull/674
648 [#675]: https://github.com/akirk/friends/pull/675
649 [#676]: https://github.com/akirk/friends/pull/676
650 [#677]: https://github.com/akirk/friends/pull/677
651 [#678]: https://github.com/akirk/friends/pull/678
652 [#679]: https://github.com/akirk/friends/pull/679
653
654 [#681]: https://github.com/akirk/friends/pull/681
655 [#683]: https://github.com/akirk/friends/pull/683
656 [#684]: https://github.com/akirk/friends/pull/684
657 [#685]: https://github.com/akirk/friends/pull/685
658 [#686]: https://github.com/akirk/friends/pull/686
659 [#687]: https://github.com/akirk/friends/pull/687
660 [#688]: https://github.com/akirk/friends/pull/688
661 [#689]: https://github.com/akirk/friends/pull/689
662 [#690]: https://github.com/akirk/friends/pull/690
663 [#691]: https://github.com/akirk/friends/pull/691
664
665 [#693]: https://github.com/akirk/friends/pull/693
666 [#694]: https://github.com/akirk/friends/pull/694
667 [#695]: https://github.com/akirk/friends/pull/695
668 [#696]: https://github.com/akirk/friends/pull/696
669 [#703]: https://github.com/akirk/friends/pull/703
670 [#704]: https://github.com/akirk/friends/pull/704
671 [#705]: https://github.com/akirk/friends/pull/705
672 [#707]: https://github.com/akirk/friends/pull/707
673 [#709]: https://github.com/akirk/friends/pull/709
674
675 [#711]: https://github.com/akirk/friends/pull/711
676 [#712]: https://github.com/akirk/friends/pull/712
677 [#714]: https://github.com/akirk/friends/pull/714
678
679 [#718]: https://github.com/akirk/friends/pull/718
680 [#719]: https://github.com/akirk/friends/pull/719
681