fep

FEP-6fcd: Account Export Container Format

Summary

This FEP describes a lightweight general purpose account export container format, with the following properties:

Out of scope:

Inspirations and Prior Art

Overall Concept

  1. Serialize export data into files and directories
  2. Add a lightweight manifest.yml file that describes what’s in the files and directories
  3. Wrap everything into a .tar file.

Manifest File

Reserved Properties

ActivityPub Export Example

Example result of exporting an ActivityPub account:

$ tar -vtf ap-account-export-2024-06-11.tar

-rw-rw-r-- 0 0   1K Jun 11 15:38 manifest.yml
drwxrwxr-x 0 0 4.0K Jun 11 15:38 activitypub/
drwxrwxr-x 0 0 4.0K Jun 11 15:38 key/

Example corresponding manifest.yml file:

# (Required) Universal Backup Container spec version
ubc-version: 0.1

# (Optional) Metadata section
meta:
  created: 2024-01-01
  createdBy:
    # (Optional) URL to a Controller document, such as an ActivityPub profile using FEP-521a
    # @see https://codeberg.org/fediverse/fep/src/branch/main/fep/521a/fep-521a.md
    controller: https://alice-personal-site.example/actor
    # (Optional) The app or service that created this export
    client:
      name: "Example Exporter App"
      url: https://codeberg.example.com/example-export-app

# (Required, but can be empty) Contents section, listing the other files and directories
contents:
  # This file
  manifest.yml:
    url: https://codeberg.org/fediverse/fep/src/branch/main/fep/6fcd/fep-6fcd.md#manifest-file
  # Directory with ActivityPub-relevant exports
  activitypub:
    contents:
      # Serialized ActivityPub Actor profile
      actor.json:
        url: https://www.w3.org/TR/activitypub/#actor-objects
      # ActivityStreams OrderedCollection representing the contents of the actor's Outbox
      outbox.json:
        url: https://www.w3.org/TR/activitystreams-core/#collections
      following_accounts.csv:
        url: https://docs.joinmastodon.org/user/moving/#export
      followers.csv:
        url: https://docs.joinmastodon.org/user/moving/#export
      lists.csv:
        url: https://docs.joinmastodon.org/user/moving/#export
      bookmarks.csv:
        url: https://docs.joinmastodon.org/user/moving/#export
      blocks.csv:
        url: https://docs.joinmastodon.org/user/moving/#export
      mutes.csv:
        url: https://docs.joinmastodon.org/user/moving/#export
      # Directory of object attachments (post images, etc)
      attachments:
        url: https://www.w3.org/TR/activitystreams-vocabulary/#dfn-attachment
        contents:
          # Actor profile avatar
          avatar.jpg:
            url: https://www.w3.org/TR/activitystreams-vocabulary/#dfn-icon
  # 'key' dir, serialized private/public key pairs,
  # such as those declared in a FEP-521a Actor profile
  key:
    url: https://codeberg.org/fediverse/fep/src/branch/main/fep/521a/fep-521a.md
    contents:
      key-1234.json:
        url: https://www.w3.org/TR/vc-di-eddsa/#representation-eddsa-rdfc-2022

Example exported key file:

$ cat key/key-1234.json
{
  "@context": ["https://w3id.org/security/multikey/v1"],
  "type": "Multikey",
  "id": "https://alice-personal-site.example/actor#key1234",
  "controller": "https://alice-personal-site.example/actor",
  "publicKeyMultibase": "z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2",
  "privateKeyMultibase": "z3u2en7t5LR2WtQH5PfFqMqwVHBeXouLzo6haApm8XHqvjxq"
}

Example Blog Archive Format Export

$ tar -vtf bar-account-export-2024-06-11.tar

-rw-rw-r-- 0 0   1K Jun 11 15:38 manifest.yml
-rw-rw-r-- 0 0 100K Jun 11 15:38 index.html
-rw-rw-r-- 0 0  50K Jun 11 15:38 feed.json
drwxrwxr-x 0 0 4.0K Jun 11 15:38 uploads/

Example corresponding manifest.yml file:

ubc-version: 0.1

meta:
  created: 2024-01-01

contents:
  # This file
  manifest.yml:
    url: https://codeberg.org/fediverse/fep/src/branch/main/fep/6fcd/fep-6fcd.md#manifest-file
  index.html:
    url: https://indieweb.org/blog_archive_format
  feed.json:
    url: https://indieweb.org/blog_archive_format
  uploads:
    url: https://indieweb.org/blog_archive_format

References

CC0 1.0 Universal (CC0 1.0) Public Domain Dedication

To the extent possible under law, the authors of this Fediverse Enhancement Proposal have waived all copyright and related or neighboring rights to this work.