One of the pretty neat innovations from #Mastodon has been actual, functional, and fairly reliable (from all accounts I’ve seen) distributed system account migration, with the notable exception of post migration, which has additional challenges worth exploring.
To be clear, as far as I know, no other blogging (or chat) software, system, or even protocol comes close to achieving the level of functionality described in Mastodon’s documentation:
https://docs.joinmastodon.org/user/moving/#migration
In short, moving:
* all your profile information
* moving all your followers & followings, transparently
* redirecting your old account to your new one
More at that link. From the docs, it’s clear that quite a bit of thought & consideration went into the design & implementation.
Once I had setup #BridgyFed to #federate posts from my own site¹, I myself made use of the this Mastodon feature to migrate from my try-it-out @t@xoxo.zone account to my #IndieWeb @tantek.com (move destination handled by BridgyFed).
For me the migration experience was 100%, because I had not posted anything @t@xoxo.zone.
The challenge of post migration is not unique to Mastodon, though I believe it goes beyond “simple” export & import support, which is still a good place to start.
Mastodon has two forms of posts “export” currently:
* RSS feeds, which will get you some number of recent posts, by adding ".rss" to the end of any Mastodon profile URL, e.g. https://indieweb.social/@tchambers.rss
* Activity Streams 2.0 JSON, per https://docs.joinmastodon.org/user/moving/#export (note: it currently says “ActivityPub JSON format”, but there is no such thing, #ActivityPub uses the #ActivityStreams 2.0 JSON format and I’ve filed a PR² to fix this in the docs)
Lots of software & services import RSS, e.g. #WordPress.
As far as I know, nothing (not even Mastodon itself) actually supports importing Activity Streams 2.0.
There is a more complete format (with specification!) for exporting & importing blog content:
Blog Archive Format (.bar), first specified here with example file:
* https://www.manton.org/2017/11/24/blog-archive-format.html
More details and another example file:
* https://www.manton.org/2021/12/27/importing-blog-archive.html
Blog Archive Format has the very nice features of:
* portable HTML feed (h-feed) and JSON Feed
* photos and other media
* locally browsable post archive
Naturally, https://micro.blog/ supports both exporting & importing Blog Archive Format.
There’s an interesting opportunity here for an open source converter
* from Activity Streams 2.0
* to Blog Archive Format
Such a library would make an excellent drop-in addition to any #ActivityPub implementation, allowing both export of posts, and also a browsable archive format, so you could visually double check when importing to another service that these were the old posts you were looking for.
This would be a good first step, using an open standard, towards Mastodon itself supporting post migration³.
Ideally, similar to account migration, the old posts server should also at least:
* redirect old permalinks to the new permalinks
* redirect any replies being delivered by ActivityPub to the new location
* provide #Webmention discovery forwarding from the old URLs to the new URLs (e.g. using HTTP LINK headers)
for some amount of time.
Want to add support for Blog Archive Format or got questions or feedback?
Join in the development conversations: https://chat.indieweb.org/dev
This is day 39 of #100DaysOfIndieWeb. #100Days
← Day 38: https://tantek.com/2023/110/t2/beyond-mastodon-indieweb-own-domain
→ Day 40: https://tantek.com/2023/114/t1/venues-reviews-personal-pages
Glossary
account migration
https://indieweb.org/account_migration
blog archive format
https://indieweb.org/blog_archive_format
h-feed
https://microformats.org/wiki/h-feed
JSON Feed
https://www.jsonfeed.org/
post migration
https://indieweb.org/post_migration
Webmention
https://indieweb.org/Webmention
References
¹ https://tantek.com/2022/301/t1/twittermigration-bridgyfed-mastodon-indieweb
² https://github.com/mastodon/documentation/pull/1202
³ https://github.com/mastodon/mastodon/issues/12423