Account @if (user(); as currentUser) { person
{{ currentUser.userName }}
Username
@if (currentUser.email) { mail
{{ currentUser.email }}
Email
} @if (currentUser.firstName || currentUser.lastName) { badge
{{ currentUser.firstName }} {{ currentUser.lastName }}
Name
}
}
Back to library
Export your library Download everything as a file you keep

JSON round-trips exactly and is the right choice for a backup. CSV opens in a spreadsheet. Box art images are not included in either — they live in the server's upload volume.

@if (importing()) { } Import Restore a backup, or bring a library in from elsewhere

Accepts JSON or CSV. Rows are matched on title and system, so the same game on two consoles stays two entries.

{{ selectedFile()?.name ?? 'No file chosen' }}
Mode Merge — add and update, delete nothing Replace — wipe the library first Preview only
@if (mode() === 'Replace' && !dryRun()) { } @if (result(); as r) {

{{ r.dryRun ? 'Preview — nothing was changed' : 'Import complete' }}

  • {{ r.parsed }} rows read
  • {{ r.created }} added
  • {{ r.updated }} updated
  • @if (r.deleted) {
  • {{ r.deleted }} deleted
  • } @if (r.skipped) {
  • {{ r.skipped }} skipped
  • }
@if (r.errors.length) {

Rows that could not be read

    @for (e of r.errors; track e.row) {
  • Row {{ e.row }}: {{ e.reason }}
  • }
}
}