MIRA supports the following document formats for upload and context injection. All parsing runs in a background worker thread — the UI never freezes.
| Extension | MIME type | Notes |
|---|
.pdf | application/pdf | Full text extraction via pdf-parse. Scanned/image-only PDFs are not supported. |
.docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document | Parsed via mammoth — extracts text and table content. |
.txt | text/plain | Read directly as UTF-8 text. |
.md | text/markdown | Markdown syntax preserved in the raw text injected into context. |
.csv | text/csv | Parsed as structured text; headers and rows preserved. |
.json | application/json | Injected as formatted JSON string. |
.py | text/x-python | Python source files. |
.js | text/javascript | JavaScript source files. |
.ts | text/typescript | TypeScript source files. |
.html | text/html | HTML source (not rendered — raw markup injected). |
Size limit
The maximum file size per upload is 50 MB. Files exceeding this limit are rejected at upload with an error message.
Parse status
After upload, each document transitions through these states:
| Status | Meaning |
|---|
| Pending | Document queued, worker not yet started |
| Parsing | Background worker is extracting and chunking text |
| Done | Parsing complete — document is available for context injection |
| Error | Parsing failed (e.g. password-protected PDF, corrupted file) |
When status is Error, hover over the document card to see the error message.
What gets injected into context
When a document is active in a session, its parsed text chunks are concatenated (respecting the engine’s context limit) and injected into the prompt as:
=== Document: filename.pdf ===
[chunked content here]
Multiple documents are concatenated with this separator pattern, in the order they appear in the Document Panel.
Images (PNG, JPEG, GIF, SVG), audio, video, Excel (.xlsx), PowerPoint (.pptx), and compressed archives are not supported. For Excel files, export to CSV first.
For large PDFs, only the most relevant chunks are injected to stay within the context budget. Use
the chunking settings in Settings → Engine to tune chunk size and overlap.