When a user runs bulk export (a paid-tier feature) or exports a single conversation
with Include attachments in the ZIP checked, AI Chat Archive produces a single
.zip archive with a deterministic layout.
This document specifies that layout so third-party importers can reliably traverse it.
ai-chat-archive-{YYYY-MM-DD}-{HHMMSS}.zip
├── 2026-03-12_Designing-a-REST-API/
│ ├── Designing-a-REST-API.md
│ └── attachments/
│ ├── design-brief.pdf
│ └── screenshot.png
├── 2026-03-14_Refactoring-the-auth-layer/
│ ├── Refactoring-the-auth-layer.md
│ └── attachments/
│ └── error-log.txt
├── 2026-04-02_Late-night-debug-session/
│ ├── Late-night-debug-session.md
│ └── _SKIPPED.md
└── …
{created_at_date}_{safe_title}..md or .html depending on the
format the user picked — named after the conversation's safe title.attachments/ subfolder sits alongside the transcript._SKIPPED.md listing each one and the reason.{created_at_date}_{safe_title}
created_at_date — the conversation's creation date, formatted YYYY-MM-DD.
Time component is omitted so folders sort naturally.safe_title — the conversation's title, sanitized:-.<>:"/\|?* and control
characters) replaced with -.- trimmed.MAX_PATH.Untitled-Conversation.Example:
"My project: v2 🎉 (final)"2026-03-12_My-project-v2-finalThe transcript's filename matches the folder's safe_title, with an extension matching
the format:
.md — see Markdown format.html — see HTML formatPDF is not supported in ZIP mode because PDF generation uses the browser's print pipeline, which cannot be batched.
attachments/ subfolderPresent only when:
Files inside preserve their original filenames, with the same sanitization rules as
folder names. If two attachments share a name, the second gets a -2 suffix and so on.
The transcript's > 📎 Attachment: {name} references use the sanitized name, so
an importer can join {folder}/attachments/{sanitized-name} reliably.
_SKIPPED.mdIf one or more attachments could not be downloaded during export, AI Chat Archive
writes a _SKIPPED.md file into the conversation folder:
# Files that could not be downloaded
- design-brief.pdf — network error
- old-prototype.fig — attachment expired
The transcript is still produced in full; only the binary attachments are missing.
manifest.json, conversations.json, or any machine
index. Each conversation is self-describing via its transcript..DS_Store, Thumbs.db). The ZIP is written by the
extension directly, never by the OS.DEFLATE naturally produces. No encryption,
no passwords, no AES.^\d{4}-\d{2}-\d{2}_(.+)/ to extract titles.attachments/ subfolder placement is frozen.