diff --git a/Documents/bin/ff-backup b/Documents/bin/ff-backup
new file mode 100755
index 0000000000000000000000000000000000000000..b1ea595bb3378445a2db4a07ac444fa3a3af79b6
--- /dev/null
+++ b/Documents/bin/ff-backup
@@ -0,0 +1,17 @@
+#!/bin/sh
+set -eu
+
+if flatpak ps --columns=application | grep --silent --fixed-strings 'org.mozilla.firefox'
+then
+    echo 'Firefox is running, aborting backup.' >&2
+    exit 1
+fi
+
+ff_home="$HOME/.var/app/org.mozilla.firefox/.mozilla/firefox"
+profile="$(awk -F '=' '$1 == "Path" {print $2}' "$ff_home/profiles.ini" | xargs)"
+
+exec tar --directory "$ff_home" \
+    --create \
+    --zstd \
+    "--file=$HOME/Documents/ff-backup.tar.zstd" \
+    profiles.ini "$profile"
diff --git a/Documents/bin/ff-restore b/Documents/bin/ff-restore
new file mode 100755
index 0000000000000000000000000000000000000000..38fecd02b6a592f37f7f054c5f18e5f6ced559d2
--- /dev/null
+++ b/Documents/bin/ff-restore
@@ -0,0 +1,15 @@
+#!/bin/sh
+set -eu
+
+if flatpak ps --columns=application | grep --silent --fixed-strings 'org.mozilla.firefox'
+then
+    echo 'Firefox is running, aborting restore.' >&2
+    exit 1
+fi
+
+ff_home="$HOME/.var/app/org.mozilla.firefox/.mozilla/firefox"
+
+exec tar --directory "$ff_home" \
+    --extract \
+    --zstd \
+    "--file=$HOME/Documents/ff-backup.tar.zstd"