This document describes data portability in ActivityPub. It lists what data exists for an actor. It then describes two modes of data portability for an actor: using a domain, and Mastodon-style Move.

This is a draft for a future SocialCG report.

Introduction

Data portability is the ability of a user to move their data from one system to another system. This includes moving between ActivityPub implementations, moving to different installations of the same software, or changing domains.

Data elements

This is a list of data objects that are part of an actor's data.

On own server

Other servers

Domain portability

This is a process for moving an actor from one ActivityPub server to another. It requires the user to run a server on a domain they control.

Process

  1. The user backs up all data for the account at username@old.example.
  2. The user shuts down the old implementation running at old.example.
  3. The user installs the new implementation at old.example.
  4. The user restores all data to the account at username@old.example.

Results

  1. All user data is available.
  2. All links from others' servers are still valid.

Limitations

  1. No standard format for backup files exists; see https://github.com/w3c/activitypub/issues/370.
  2. The user has to register and maintain their own domain name.
  3. The user has to run their own server, or use a hosting service that allows mapping their own domain name.
  4. Different implementations may use different URI patterns for activities or content.

Move action

Mastodon and compatible server software use a Move activity to move an actor from one server to another.

Process

The user will typically execute these steps using a Web interface or an API client, rather than executing them directly.

  1. The user creates a new actor at username@new.example
  2. The user marks the new actor as accepting a move with the alsoKnownAs property.
  3. The user marks the old actor as having moved with the movedTo property.
  4. The user sends a Move activity from the old actor to all followers.
    {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Move",
      "actor": "https://old.example/users/username",
      "object": "https://old.example/users/username",
      "target": "https://new.example/users/username"
    }
    
  5. Each follower checks the alsoKnownAs property of the new account and movedTo property of the old account.
  6. Each follower sends a Follow activity to the new account.
  7. Each follower sends an Undo Follow activity to the old account.
  8. The old account's profile URI redirects to the new account's profile URI.
  9. (Optional) The user exports the old account's following list as a CSV file.
  10. (Optional) The user imports the CSV file into the new account.
  11. (Optional) The new account sends a Follow activity to each account in the imported CSV file.

Results

Limitations

Changelog

This is required for specifications that contain normative material.