This FEP describes a lightweight general purpose account export container format, with the following properties:
Out of scope:
.tar
file into a
.tar.gz
is well known)manifest.yml
file that describes what’s in the files and directories.tar
file.ubc-version
: Version of the Account Export Container Format speccontents
: A listing of files and directories in this .tar filemeta
: A metadata section describing who this export belongs to, what app
or service created it, and so on.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"
}
$ 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
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.