Menu ▾ ▴

#404 feat: export a conversation to HTML or JSON

closed
nobody
None
2026-11-07
2026-11-07
Anonymous
No

Originally created by: kristofferR

There is no way to export a conversation from Carrier, and Facebook's "Download your information" is slow and leaves out encrypted chats.

File → Export Conversation as HTML… or …as JSON… exports the open conversation from Messenger's local database to a file you pick in a native save dialog. Nothing is uploaded.

  • What's included: sender, time, text, replies, reactions (with who reacted), calls ("Missed video call", "Audio call, 2 min 5 s"), and attachments listed by type and name. Media files aren't included.
  • Encrypted chats: Messenger stores their text "vaulted" at rest. The export unlocks it with Messenger's own MAWVault.unvault, the way its views do. Anything that stays vaulted is marked "Encrypted message (couldn't be read)"; ciphertext is never written.
  • History: the export covers what Messenger has loaded. When older messages may be missing, the file says so.
  • The page can't inject anything: it only sends structured rows. src-tauri/src/export.rs validates them strictly: unknown fields are rejected, and every string, list, count, timestamp and offset is bounded while parsing, so nothing is allocated past its limits. Rust then renders the HTML with every value escaped and a CSP that blocks scripts and all network loads, and writes the versioned JSON from the validated model.
  • Saving:
  • only one export runs at a time;
  • executable file types are refused;
  • with Hide Names on, the dialog suggests a generic name instead of the conversation's;
  • "Show in folder" reveals the saved file.

Tested on Linux with an encrypted 1:1 chat (30 messages, all text decrypted, 13 calls labelled correctly) and a group (20 messages, senders, reactions and attachments). The HTML renders offline with no network requests. Not covered live: a reply, and a long conversation with history loaded.

Ref [#371]

Related

Tickets: #371

Discussion

  • Anonymous

    Anonymous - 2026-11-07

    Originally posted by: kristofferR

    ⏸️ crq will not request further automated reviews for this pull request.

    Reason: CodeRabbit reviews these changes once, in combined PR [#394]

    Resume with crq unhold kristofferr/carrier 404.

     

    Related

    Tickets: #394

  • Anonymous

    Anonymous - 2026-11-07

    Originally posted by: kristofferR

    [!NOTE]
    🤖 Claude Opus 5.5 responding on behalf of Kristoffer

    @codex review

     
  • Anonymous

    Anonymous - 2026-11-07

    Originally posted by: chatgpt-codex-connector[bot]

    Codex Review Summary: ✅ Completed This comment shows the latest Codex review activity on this pull request. | Review | Status | Commit | Review trigger | | --- | --- | --- | --- | | 📝 **Code Review** | ✅ **Completed** <relative-time datetime="2026-11-07T20:48:16.033809Z">2026-11-07T20:48:16.033809Z</relative-time> | `c3401d2` | Manual request |
    ℹ️ About Codex in GitHub
    [Your team has set up Codex to review pull requests in this repo](https://chatgpt.com/codex/cloud/settings/general). Reviews are triggered when you - Open a pull request for review - Mark a draft as ready - Comment "@codex review" or "@codex security review". Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.
     
  • Anonymous

    Anonymous - 2026-11-07

    Originally posted by: kristofferR

    [!NOTE]
    🤖 Claude Opus 5.5 responding on behalf of Kristoffer

    @codex review

     
  • Anonymous

    Anonymous - 2026-11-07

    Originally posted by: chatgpt-codex-connector[bot]

    Codex Review: Didn't find any major issues. Can't wait for the next one!

    Reviewed commit: c3401d2a68

    ℹ️ About Codex in GitHub
    [Your team has set up Codex to review pull requests in this repo](https://chatgpt.com/codex/cloud/settings/general). Reviews are triggered when you - Open a pull request for review - Mark a draft as ready - Comment "@codex review". If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
     
  • Anonymous

    Anonymous - 2026-11-07

    Ticket changed by: kristofferR

    • status: open --> closed
     
  • Anonymous

    Anonymous - 2026-11-07

    Originally posted by: kristofferR

    ✅ The administrative hold has been retired because this pull request merged. crq will not request further automated reviews.

     

Log in to post a comment.