What SkyKeep can read
Every upload is kept twice: the file exactly as you sent it, and a plain-text rendering of it that the vault can search. Both are encrypted under the same key, both belong to the same compartments, and deleting the document deletes both — there is no state in which one survives the other.
The rendering is what makes a document findable. The original is what makes it defensible: if a conversion turns out to have read something badly, the file it read is still there to read again.
You can still find it by name, and you can still download exactly what you uploaded — byte for byte, including the bytes the conversion could not read. Anyone who may read the version may ask for its original; no separate permission exists, and none is needed.
Two things about how it comes back, both deliberate. It always arrives as a download, never rendered in the page, and always as unlabelled bytes rather than under the type the vault detected — the vault reports what it recorded in a header and refuses to serve under it, because a stored web page served under its own type would be someone else's document running inside the vault. And taking the original is recorded as its OWN act in the trail, distinct from reading the rendering: an engagement that asks who took a copy of the file as it arrived deserves an answer that is not mixed in with who read it.
Three answers, not two
Conversion quality is not a yes-or-no question, so the vault records one of three verdicts against every document and shows you which one it got.
| Verdict | What it means for you |
|---|---|
converted | The text the vault searches faithfully represents the document. Nothing of substance was lost. |
partial | Usable text, and named losses — recorded against that document, not hidden in a footnote. The table below says what is lost for each format. |
original_only | No meaningful text can be produced, so the vault keeps the file itself rather than a reading of it: encrypted, listed, and downloadable byte-for-byte, and honestly not searchable by its contents. You can find it by its name, its compartment and when it arrived, and you can get the original back exactly as you sent it; what you cannot do is search inside it. The row below says why for each. Whether a particular format is accepted at all is a separate question, and the table answers it row by row. |
A format the vault converts badly is never presented as converted. A converter that silently mangles a format is worse than one the vault declines: the first produces confident wrong answers out of retrieval, and the second produces a clear message.
The formats
The vault accepts 41 of the 42 formats below today. This table is not written by hand — it is the same table the upload pipeline uses to choose a reader, so it cannot describe a vault other than this one.
| File type | Can we convert it? | What is lost | Notes |
|---|---|---|---|
Plain text.txt | Yesconverted | — | Nothing to convert: a text file already is the searchable rendering, so what the vault indexes is exactly what you uploaded. |
Markdown.md | Yesconverted | — | Nothing to convert: Markdown already is the form the vault searches, headings and lists included. |
CSV.csv | Yesconverted | — | Read as one table, with the first line taken as the column headings; nothing structural is dropped, and a very wide table simply becomes a very wide Markdown table. |
HTML.html .htm | Yesconverted | — | The text, headings, lists and tables survive. Scripts and styling are dropped deliberately — a saved page's contents are what the vault indexes, not its appearance — and complex nested layout flattens into ordinary paragraphs. |
Email message (EML).eml | Yesconverted | — | The headers and the message body both survive. Attachments are listed but not opened — an attachment is its own document, and uploading it separately is what indexes it. |
Mailbox (MBOX).mbox | Yesconverted | — | A mailbox holds many messages; every one of them is converted and searchable, in the order the file lists them. |
Word document (DOCX).docx | Yes, with lossespartial |
| Tracked changes are read: text a reviewer inserted or deleted reaches the searchable rendering, and is scanned like the rest of the document. Worth knowing if you expected a document's edit history to stay private — the original is what carries it, and the vault reads it. |
Excel workbook (XLSX).xlsx | Yes, with lossespartial |
| — |
PowerPoint deck (PPTX).pptx | Yes, with lossespartial |
| Slide text and speaker notes are both read. Speaker notes are worth knowing about: they are searchable here even though a viewer does not show them to an audience. PICTURES ON SLIDES — a chart pasted in as an image, a screenshot, a photograph — are read as well, one slide at a time, when this deployment has a vision engine configured; the reading is stored under the slide it came from and says which engine read it and when. Without one the deck is still converted and still searchable, and the slides whose pictures went unread are named in the converted text rather than passed over in silence. |
OpenDocument Text (ODT).odt | Yes, with lossespartial |
| Headings keep their level, lists stay lists and tables stay tables, so the shape a reader would recognise survives into the searchable text. Three things are worth knowing before you upload one. Footnotes and endnotes are read, and arrive as their own short paragraph after the paragraph that cites them. Text a reviewer deleted under change tracking is read too — the vault reads what the marked-up document holds, so an edit history you expected to stay private does not. Comments are the one thing left out: they are kept in the stored original, which is always exactly the file you sent, and they are not part of the searchable text. The document reports its own title, both of its authors, its dates and the application that wrote it, and those are shown back to you. |
OpenDocument Spreadsheet (ODS).ods | Yes, with lossespartial |
| Each sheet arrives as its own heading followed by its cells as a table, in the order the workbook lists them, so a figure can be quoted with the sheet it came from. One thing is worth knowing before you upload: a hidden sheet, row or column is read like any other, so a sheet you hid is searchable here. The original is kept exactly as you sent it either way. |
OpenDocument Presentation (ODP).odp | Yes, with lossespartial |
| Slide titles arrive as headings and slide order is preserved, so the shape of the deck survives into the searchable text and a quotation can be traced back to a slide. Speaker notes are the one thing left out: they stay in the stored original, which is always exactly the file you sent, and they are not part of the searchable text. |
PDF (text-based).pdf | Yes, with lossespartial |
| A SCANNED PDF — one that is photographs of pages rather than text — carries nothing to extract. Where a vision engine is configured its pages are read one at a time, the way an image is, and what the engine returns is document content: untrusted, screened, and never treated as instruction. Where none is configured the file is stored and listed but cannot be searched by its contents, and the vault says so rather than storing an empty rendering that looks like a successful conversion. A MIXED PDF — some pages text, some photographs — keeps the text it has and names the pages it could not read; it is never sent to an engine, because the pages it could read are already searchable. |
TSV.tsv | Yesconverted | — | Read as one table, with the first line taken as the column headings; nothing structural is dropped, and a very wide table simply becomes a very wide Markdown table. Following the format's own definition, quotation marks are ordinary characters rather than field delimiters — an inches mark in a cell stays an inches mark, and a single unbalanced quote cannot swallow the rest of the file. One honest limit: a tab-separated file carries no signature of its own, so a file whose name does not end in .tsv is read as plain text. |
EPUB.epub | Yes, with lossespartial |
| Each chapter in the book's reading order is converted in turn and its own headings survive, so chapter structure and chapter order arrive intact. Read with the standard library's zip reader over the book's package file, into the same HTML conversion the vault already uses for web pages; nothing in the book is fetched from the network. |
Rich Text Format (RTF).rtf | Yes, with lossespartial |
| The words survive and the shape of the page does not: what comes back is the document's text, in order, as plain lines. That is enough to search and to quote from, and it is not enough to reconstruct the document — which is why the original is kept. The document's own title, author and dates are read from the file and shown back to you. |
JSON data.json | Yesconverted | — | The file is confirmed to be JSON and then kept exactly as you wrote it, in a code block. Nothing is reformatted, reordered or summarised, so what the vault searches is the document itself — which is why nothing is listed as lost. |
TOML configuration.toml | Yesconverted | — | The file is confirmed to be valid TOML and then kept exactly as you wrote it, comments included, in a code block. Nothing is reformatted or reordered. |
YAML document.yaml .yml | Yes, with lossespartial |
| Kept exactly as you wrote it, comments and all, in a code block — which for a format whose whole purpose is being readable is a complete rendering. The vault deliberately does not run a YAML parser over it: the readers available expand repeated sections without limit, so a very small file can be made to expand into a very large one, and confirming the syntax is not worth handing an uploaded file that lever. |
XML document.xml | Yesconverted | — | The file is confirmed to be well-formed XML and then kept exactly as you wrote it, in a code block. A file carrying a document type declaration is refused rather than read: that is the construct which lets a small file expand into a very large one, and an XML document has no need of one here. A saved web page is read as HTML instead, by its own converter. |
Jupyter notebook.ipynb | Yes, with lossespartial |
| Markdown cells arrive as themselves, code cells as code blocks tagged with the notebook language, and the text a cell printed follows the cell that printed it — so a result can be quoted with the code that produced it. Only the plain-text form of an output is read: a notebook can also store the same output as a web page, and the vault does not read that, both because it is a duplicate and because it is markup. |
reStructuredText.rst | Yes, with lossespartial |
| Section titles keep their level, literal blocks stay code blocks and lists stay lists, so the shape a reader would recognise survives. A directive the vault does not recognise is kept as the text it contains rather than dropped — losing a paragraph silently is worse than keeping it plainly. The converter reads only the file you uploaded: the format can ask for the contents of another file on disk, and nothing here will open one. |
Calendar (ICS).ics | Yes, with lossespartial |
| Every appointment in the file arrives as an entry giving its start, its title, where it was and who was invited, in the order the file lists them. Times are shown as the file wrote them, including the time zone it named, rather than converted to yours — a calendar is evidence of what was scheduled, and re-stating it in another zone would be the vault changing the record. Attendee addresses are read: a meeting invitation names people, and it is searchable here. |
Contact card (vCard).vcf | Yes, with lossespartial |
| Each card would arrive as an entry giving the name, organisation, telephone numbers, e-mail and postal addresses the file lists, in the file's own order. Not accepted yet. An upload of this format is refused today; the row states what the vault would do once a converter for it is adopted. |
WebVTT subtitles.vtt | Yes, with lossespartial |
| Every caption arrives as its own line, prefixed with the time it appears, so a quotation can be traced back to a moment in the recording. |
SubRip subtitles (SRT).srt | Yes, with lossespartial |
| Every caption arrives as its own line, prefixed with the time it appears, so a quotation can be traced back to a moment in the recording. One honest limit: a subtitle file carries no signature of its own, so a file whose name does not end in .srt and whose contents do not look like numbered captions is read as plain text. |
Excel workbook, legacy (XLS).xls | Yes, with lossespartial |
| Each sheet arrives as its own heading followed by its cells as a table, in workbook order. Two things are worth knowing before you upload one. A hidden sheet, row or column is read like any other, so content you hid is searchable here. And this is the 1997-2003 binary workbook only: a file saved as XLSX is read by the modern reader instead, and the vault tells the two apart from the bytes rather than the name. |
Word document, legacy (DOC).doc | Nooriginal_only | Reading this format safely needs a converter large enough, and exposed enough to a hostile file, that adopting one is a decision in its own right rather than an import. Until that decision is made and built, the vault will not guess at the contents. Save the document as DOCX, PDF or RTF and the vault reads it fully. | — |
Outlook message (MSG).msg | Nooriginal_only | The available readers carry licence terms this product has not adopted, and adopting one changes what the whole vault may be distributed under — not a choice to make silently. Export the message as EML and the vault reads it fully, including its attachments. | — |
Outlook store (PST).pst | Nooriginal_only | A mailbox rather than a document: one file holding many messages, in a closed format. Unpacking it properly is its own piece of work and is not done yet. Export the messages as EML or MBOX — both are open formats the vault already reads, and both preserve the message boundaries this one hides. | — |
Excel binary workbook (XLSB).xlsb | Nooriginal_only | The binary workbook format has no reader this product can adopt. Save the workbook as XLSX and the vault reads every sheet. | — |
JPEG image.jpg .jpeg | Yes, with lossespartial |
| This vault can read an image — a photographed slide, a page of handwritten notes, a receipt — when it has been given a vision engine. What it reads becomes the document's text, shown beside the picture so you can check it, and you can write your own summary over the top. Without an engine the image is stored, encrypted, listed and retrievable, and its row says it was not read. |
PNG image.png | Yes, with lossespartial |
| This vault can read an image — a photographed slide, a page of handwritten notes, a receipt — when it has been given a vision engine. What it reads becomes the document's text, shown beside the picture so you can check it, and you can write your own summary over the top. Without an engine the image is stored, encrypted, listed and retrievable, and its row says it was not read. |
GIF image.gif | Yes, with lossespartial |
| This vault can read an image — a photographed slide, a page of handwritten notes, a receipt — when it has been given a vision engine. What it reads becomes the document's text, shown beside the picture so you can check it, and you can write your own summary over the top. Without an engine the image is stored, encrypted, listed and retrievable, and its row says it was not read. |
WebP image.webp | Yes, with lossespartial |
| This vault can read an image — a photographed slide, a page of handwritten notes, a receipt — when it has been given a vision engine. What it reads becomes the document's text, shown beside the picture so you can check it, and you can write your own summary over the top. Without an engine the image is stored, encrypted, listed and retrievable, and its row says it was not read. |
HEIC image.heic .heif | Yes, with lossespartial |
| This vault can read an image — a photographed slide, a page of handwritten notes, a receipt — when it has been given a vision engine. What it reads becomes the document's text, shown beside the picture so you can check it, and you can write your own summary over the top. Without an engine the image is stored, encrypted, listed and retrievable, and its row says it was not read. A HEIC photograph additionally needs a decoder this build does not ship, so it is stored and sealed even where a vision engine is configured. Save the photograph as JPEG and the vault reads it. |
MP4 video.mp4 .m4v | Yes, with lossespartial |
| The video is stored as you sent it. Frames are taken where the picture changes, near-identical ones dropped, and the rest assembled into a PDF stored as a second version you can open and page through. Each page is then read, and the soundtrack transcribed, by the engines this deployment is configured with — a phone video of a book's pages becomes searchable text. Without those engines the video is kept and listed, and says so. |
QuickTime video.mov .qt | Yes, with lossespartial |
| Read exactly as MP4 is: frames where the picture changes, assembled into a PDF second version, each page read and the sound transcribed where this deployment has the engines for it. |
WebM video.webm | Yes, with lossespartial |
| Read exactly as MP4 is. WebM and Matroska share a signature byte for byte; this vault tells them apart by the document type recorded inside the file, never by the filename. |
Matroska video.mkv | Yes, with lossespartial |
| Read exactly as MP4 is. Matroska and WebM share a signature byte for byte; this vault tells them apart by the document type recorded inside the file, never by the filename. |
WAV audio.wav | Yes, with lossespartial |
| The audio file is stored as you sent it. It is transcribed by the speech-to-text engine this deployment is configured with, if one is present. Without that engine the file is kept and listed, and says so. |
MP3 audio.mp3 | Yes, with lossespartial |
| MP3 files must start with an ID3 tag to be recognized. The audio file is stored as you sent it and transcribed by the speech-to-text engine this deployment is configured with, if one is present. Without that engine the file is kept and listed, and says so. |
Reading the same file a different way
When the vault converts a file it tells you what it noticed — a spreadsheet whose rows are not the width of its heading row, a deck whose speaker notes are now searchable. Those remarks are not decoration. Each one names a decision the vault made about how to read the file, and for the formats below that decision can be changed.
You do not upload the document again. The vault still holds the file exactly as you sent it, which is what it kept it for: it reads those same bytes a second time, the way you asked, and replaces only the searchable rendering. The original is never altered, the document does not move between compartments, and the vault records which reading it used.
| File type | What you can change | Choices | What changing it does |
|---|---|---|---|
| CSV | Column separator | Comma (,) (default) Semicolon (;) Tab Vertical bar (|) | Which character separates one column from the next. Spreadsheets in much of Europe export with a semicolon, and read with the wrong separator a file arrives as a single very wide column or with rows that do not line up with their headings. If the converted table looks wrong, this is usually why. |
| PowerPoint deck (PPTX) | Speaker notes | Include them in the searchable text (default) Leave them out | Whether the presenter's notes are read along with the slides. They often say things the audience was never shown, and here they are searchable. Leaving them out keeps them in the stored original — which is always kept exactly as you uploaded it — but out of the searchable text. |
Every other format the vault converts reads its files one way only. Where a format's behaviour is fixed by what the format is — tab-separated files have no quoting and so cannot use another separator — that is not offered as a choice, because it is not one.
What happens to a format we cannot convert
It is kept, not refused. A format the vault cannot convert is stored for its own sake — encrypted like everything else, listed where you would expect it, and downloadable byte-for-byte exactly as you sent it. What it is not is searchable by its contents, and the vault says so on the document itself rather than letting you find out from a search that quietly returns nothing.
4 of the 42 formats below are kept this way today — photographs and legacy office documents, mostly, where there is no text to extract in the first place. 1 of the 42 formats below is not accepted at all (Contact card (vCard)); the table says so on its own row.
The alternative costs you something real: a vault that turns away a photograph or a legacy document because it cannot read the words inside it is a vault that quietly loses part of an engagement. Keeping the file, and being plain about what can and cannot be done with it, is the trade this product makes.
The type is decided from the file's content, never from its name. A Word document saved as report.txt is read as a Word document, and a file with no extension at all is identified normally. Where the vault cannot identify something confidently it says unidentified rather than guessing — guessing is how a mis-detected file reaches the wrong reader.
What your documents say about themselves
Office documents, PDFs and email carry metadata inside them: an author, a title, timestamps, the application that produced them, and often a last-modified-by name and a revision count. These routinely survive inside files people believe are clean.
The vault extracts that metadata, keeps it separate from what it worked out for itself, and shows it back to you when you upload. That is deliberate: a vault that silently indexed an author name would have made a disclosure on your behalf that you never agreed to. Seeing it is what lets you decide.
It is also treated as untrusted, exactly like the document's contents. It is displayed as text and never as markup, and it is never passed to a model as an instruction — an author field is a perfectly good place for somebody to hide one.