Original release notes
Breaking changes:
microformats2:- Remove
author_display_name,img, andmaybe_linked_name. - Only link
httpandhttpsURLs inhrefs andsrcs. Other URLs, egjavascript:andnostr:, are rendered as plain text or omitted. object_to_html,json_to_html,activities_to_html,hcard_to_html: add newsanitizekwarg, default True, for sanitizing HTML values, egcontentandsummary, with nh3.
Non-breaking changes:
Add new micropub.Micropub source class that implements the Micropub API.
Handle list-valued AS1 objectType everywhere, using its first element, including in as1.object_type.
as1:- Add new
snippetfunction that generates a short, human-readable, plain text summary of an object or activity, egreplied to http://x: helloorfollowed http://x(#450). get_rsvps_from_event: handle when actor is compacted string id.quoted_posts: fall back to quoted posts'urlwhen they have noid.- Rename
is_content_htmltois_html, and add a requiredfieldargument so that it can check fields other thancontent, egsummary(bridgy-fed#2675).is_content_htmlis kept for backward compatibility, and deprecated. as2:- Add new
maybe_hydrate_collectionfunction that hydrates a collection field in place inside an object. from_as1: keepcontentMapeven when all of its values are empty, so that objects with no content don't lose their languages.from_as1: add FEP-044f'squotefield to quote posts, along with the existing_misskey_quoteandquoteUrl(bridgy-fed#1956).from_as1: convert places' ISO 6709positiontolatitudeandlongitude.from_as1,to_as1: preserve multiply-valued AS1objectTypeto/from AS2type. Unknown types are dropped.verbis still singly valued.from_as1,to_as1: handle list-valuedlocation.to_as1:- Improve
featuredcollection (ie pinned post) fetching (bridgy-fed#2302). - Fix bug where
Audio/Videoobjects with a tag-based media link lost their top-levelduration,size, andurlfields. - Handle FEP-044f's
quoteand Fedibird'squoteUriquoted post fields, along with the existing_misskey_quoteandquoteUrl. - Set quoted posts'
id, not justurl, so thatas1.quoted_postsfinds them. - Handle object-valued quote post fields.
- Convert
Hashtagtype tohashtagobjectType. - Convert schema.org
PostalAddressaddresses, eg from Mobilizon, to AS1addressfields. - For quote posts, remove inline
RE: ...fallback links fromcontentbased on thequote-inlineclass, including Mastodon's leading `
, instead of just trailing RE: [URL]` text.
from_as1,render_content: render HTML with Jinja templates in profile linkPropertyValues and quoted postRE: ...links. Only linkhttpandhttpsquoted post URLs (#586).atom:to_as1: read'shref, not text value.to_as1: convertelements to hashtag tags, usinglabelif it's provided, otherwiseterm.from_as1: fix XSS: escape]]>in content so that it can't end theCDATA section early and inject XML elements, eg.bluesky:from_as1,to_as1:- Convert AS1
places to/fromcommunity.lexicon.location.*. - Convert AS1
events to/fromcommunity.lexicon.calendar.event, including locations. Withmultiple=True, also generates anapp.bsky.feed.postwith the event's name, time, and location, and a link preview card to its web page. - Convert AS1
rsvp-*activities to/fromcommunity.lexicon.calendar.rsvp. - Convert AS1
questions (ie polls) to/from Blacksky'scommunity.blacksky.assembly.conversation/statement(#174). - Convert AS1 objects to/from Spark
so.sprk.*records (bridgy-fed#2736). - Convert AS1 objects to/from Grain
social.grain.*records (bridgy-fed#2739). web_url_to_at_uri,at_uri_to_web_url: add support forgrain.socialandsprk.soprofile and post URLs.from_as1:- Add
validatekwarg to allow generating invalid records, eg replies to, likes of, and reposts of non-Bluesky objects. - Populate image and video
aspectRatiofrom AS1widthandheightif they're not inaspects. - Fix bug where converting a post with more than four images to
app.bsky.embed.galleryfailed validation due to missingaspectRatiofield. - Fix bug with quote posts with attached media and
postView/feedViewPostoutput. - Handle blank
published/updatedvalues, eg whitespace. to_as1:- Handle invalid replies, likes, and reposts of non-Bluesky objects, ie with non-
at://URIs in their strong refs. - For videos, add
image, falling back to the Bluesky video CDN's thumbnail URL. - Keep language keys in
contentMapeven if their value is empty. - For profiles, convert newlines and line-leading spaces in
descriptionto HTML insummary(bridgy-fed#2675). url_to_did_web:- Strip trailing dots from fully qualified hostnames. They previously produced
did:web:s thatdid_web_to_urlrejected as invalid. - Don't log a spurious "contained a port" warning for URLs with upper case hostnames.
Bluesky:create/preview_create: add support for blocks.create/preview_create: allow posts with videos but no text.create,upload_media: addblobskwarg for images and videos that have already been uploaded.create: upload images inarticle,link, andnoteattachments as thumbnails in their external embeds (link previews). (#1195)upload_media: addmax_sizekwarg.create,update: addvalidatekwarg. If False, allows replies to, likes of, reposts of, follows of, and blocks of non-Bluesky objects and users, and passesvalidate: falsetocreateRecord/putRecord.- Add
update/preview_update. farcaster:from_as1/to_as1: update timestamps to use Farcaster's custom epoch, 2026-01-01.from_as1:- Add
usernamekwarg to override the username in the input AS1 actor. - For actors, set
USER_DATA_ADDmessage timestamps to now, notpublished, since these represent the current profile state, not when the actor was originally created. - Strip @-mention text out of output cast text.
to_as1:- More heuristics for detecting image and video embeds, eg Cloudflare Images CDN URLs and HLS/DASH streaming manifests (
.m3u8,.mpd). - Add mentions to
contentas plain text@-mentions. - Add
clientkwarg, aFarcasterinstance, used to resolve mentioned users' usernames. If it's not provided, mentions use their numeric FIDs. Farcasterconstructor: addlog_requests_responseskwarg.mastodon:- Add
from_as1, which converts an AS1 actor or post to a Mastodon APIAccountorStatus. microformats2:- Convert location addresses between AS1
addressand mf2street-address,locality,region,postal-code, andcountry-name. - Normalize
start/startTimeandend/endTimeto ISO 8601, likepublishedandupdated. from_as1:- Bug fix for precedence of attachments'
streams. - If
summaryis HTML, convert it to{'html': ..., 'value': ...}, and render it ase-summary. hfeed_to_as1,html_hfeed_to_as1: addimpliedkwarg, default True. If False, don't treat top-level items as an implied h-feed when there's noh-feed.to_as1:- Convert plain text and
h-adrlocations. Previously they were dropped. - Convert
p-rsvpinterestedtorsvp-maybe, since AS1 doesn't haversvp-interested. - Normalize
p-rsvpvalues to lower case. h-event:- If
endis missing, populateendTimebased onstartandduration. - If
contentis missing, fall back todescription. object_to_html,json_to_html: linkdt-publishedto the post's URL. If the post has no name, this link is now itsu-url, instead of a separate link with the URL as text.- Render HTML with Jinja templates instead of Python strings. Only mf2
{'html': ...}values and AS1contentare rendered as raw HTML. (#586) - Whitespace in rendered HTML has changed.
nostr:bech32_decode: return the input unchanged, as documented, instead of raisingAssertionErrororValueError, when the input has a valid checksum but malformed TLV contents.from_as1:- Handle converting repost/share when inner object has more fields than just
id. - Support repost of object without author.
Nostr.create: fix bug where the final signed event'sidandsigdidn't match its finalcontent.rss:from_as1: don't read image enclosure length from object'slengthfield.source:- Add new
whitespace_to_htmlfunction that HTML-escapes plain text, converts newlines to `
, and converts line-leading spaces to ` (bridgy-fed#2675).
Source: addupdate/preview_updatemethods, for updating existing objects.Source.create,Source.update: addvalidatekwarg. If False, subclasses may create objects that aren't valid in their native protocol.


