Open an RSMF file in your browser
You have a file ending in .rsmf. Windows does not know what it is, your mail
program thinks it is a message with an attachment that will not open, and the person who sent
it assumed you had somewhere to load it. RSMF is the Relativity Short Message
Format: the container eDiscovery platforms use to take in text messages as records,
each with its sender, its time and its attachments, rather than as a PDF somebody has to read.
Outside one of those platforms, nothing opens it.
Inside, it is simpler than it looks. An .rsmf is an ordinary mail message whose
last part is a ZIP archive called rsmf.zip, and that archive holds one file called
rsmf_manifest.json, with every message in it, plus the attachments the messages
refer to. The viewer below takes it apart and shows the conversation. So can you, by hand, and
that comes first.
Looking inside it by hand
The archive is base64 text between the line Content-Transfer-Encoding: base64 and
the closing boundary line. On Windows, in PowerShell, in the folder that holds the file:
$text = Get-Content .\conversation.rsmf -Raw
$start = $text.IndexOf("base64") + 6
$end = $text.LastIndexOf("--RSMFEML--")
[IO.File]::WriteAllBytes("$PWD\rsmf.zip", [Convert]::FromBase64String($text.Substring($start, $end - $start)))
Expand-Archive .\rsmf.zip -DestinationPath .\rsmf On a Mac, in Terminal:
awk '/Content-Transfer-Encoding: base64/{f=1;next} /^--RSMFEML--/{f=0} f' conversation.rsmf | tr -d '\r' | base64 -d > rsmf.zip
unzip rsmf.zip -d rsmf RSMFEML is the boundary name Relativity's own generator and ChatExport both use; a
file from another tool names its boundary in the Content-Type header near the top,
and the same commands work with that name in place of it. What comes out is a folder with
rsmf_manifest.json, which any text editor opens, and the attachments under the
names the manifest gives them. That is the whole file. Nothing in it is encrypted or hidden,
and nothing above needs software you do not already have.
Open it here
Your browser can do the same unpacking. Drop the file below: it is read and taken apart by the
browser on your own computer, and it is not sent anywhere. A bare rsmf.zip works
too, if somebody has already extracted one.
Reading the file…
This is not an RSMF file. An .rsmf begins with mail headers
(From, Subject, X-RSMF-Version), and a bare rsmf.zip begins with a ZIP signature.
This file starts with neither. If it is a PDF or an HTML export with a checksum,
the checksum page is the one for it.
The mail headers are there, the archive is not. There is no base64 part
holding rsmf.zip. A mail program that forwarded the message as text can do this;
ask for the original file rather than the forwarded one.
The archive inside is cut off before its end. The usual cause is a download or a copy that did not finish. Compare the file size with what the sender has; if they differ, the copy is incomplete and no reader will open it.
The base64 part decoded, but what came out is not a ZIP archive. The part may have been re-encoded on the way, or the file was assembled by hand. The instructions above for extracting the archive by hand will show what it actually holds.
This archive uses zip64, the extension for archives past 4 GB or 65,535
entries, which this page does not read. Extract rsmf.zip by hand as described
above; any desktop unzipper opens it.
The archive opened, but holds no rsmf_manifest.json. The
manifest is the file that carries the messages, so without it there is nothing to show. It
may be an ordinary ZIP that was renamed, or an export that failed halfway.
rsmf_manifest.json is there but is not valid JSON. Nothing can
be read from it as it stands. Extract the archive by hand and open the manifest in a text
editor: the first broken line is usually near the end, where a write was interrupted.
The manifest parsed, but is missing . The schema
requires three arrays at the root, participants, conversations and
events, and a manifest without them has no messages to show.
The manifest is compressed and this browser cannot inflate it. Chrome 103, Firefox 113, Safari 16.4 and anything newer can. Or extract the archive by hand as described above and open the manifest in any text editor.
The browser could not load the file into memory. A file of several hundred megabytes can be past what one tab will hold. The by-hand route above has no such limit.
- Generator
- RSMF version
- Events
- Participants
- Attachments
- SHA-256 of this file
What the file says about itself
X-RSMF-Version header. Relativity's reader looks for it in the first lines
of the file.
X-RSMF-EventCount header says , and the
manifest holds events.
What the report says, and what it does not
Above the conversation the viewer prints what the file says about itself: the generator and version named in its headers, how many events the manifest holds and whether the header agrees, and the places where the manifest and the archive disagree with each other. Each line is a fact you could check by hand with the commands above:
- Attachments named but absent. The manifest lists a file the archive does not contain. The message shows, its photo does not, and an import will notice the same thing.
- Participants that are not declared. A message, an edit or a reaction names a participant id the manifest never introduces, so there is no name to put on it.
- Timestamps that do not read as dates. The format asks for ISO 8601. Anything else is shown as written, at the end of the thread, rather than guessed at.
- More than 10,000 events. Not a fault. Relativity recommends splitting a longer conversation across files, and a reader about to import one will want to know.
That is the whole of it. This page does not run Relativity's own checking tool, and it cannot tell you whether Relativity, Reveal or any other platform will accept the file. It reads the file as written and reports what is in it. When every line comes back clean, that means the file is consistent with itself, which is worth knowing and is all it means.
It also says nothing about who wrote the messages. A file that opens perfectly, with every attachment in place, is a well-formed file. Whether the conversation in it happened is a different question, and it is not one a viewer can answer.
The file's fingerprint
The viewer also prints the SHA-256 of the file you dropped, the same 64-character value
certutil or shasum would give. If the file came with a checksum, in a
.sha256 file beside it or in the message that carried it, compare the two. A match
means the file has not changed by a byte since that checksum was recorded; a difference anywhere
means it is not the same file. What a match proves, and what it does not, is set out on
the checksum page, which is written for exactly that situation.
A file to try
Download a sample .rsmf and drop it above. It is the same invented conversation as the other sample exports on this site, a separated parent collecting what was said about money and weekends; every name, number and message in it is fictional. Things to look for: a message that was edited, with its earlier wording under the bubble; a message that was deleted and is still in the record; three photos, shown in place; and a report with nothing in it.
What this page does not read
- zip64 archives, the extension for archives past 4 GB or 65,535 files. The page says so rather than misreading them; the commands above extract them without trouble.
- Compression other than stored or deflate. Both RSMF generators we have seen use one of the two. An entry in another method is named in the report and left closed.
- Older browsers. Inflating a compressed archive uses a browser feature that arrived in Chrome 103, Firefox 113 and Safari 16.4. On anything older the drop field stays hidden and this page is the by-hand instructions, which is what it is first anyway.
- Very large files. The whole file is held in the browser's memory while it is open. A few hundred megabytes is fine on an ordinary laptop; past that, use the commands.
Where these files come from
Any platform that exports short messages for review can write RSMF, and so can ChatExport, on a Windows PC, from an iPhone backup: it is one of the five formats the program writes, alongside the PDF most people file, and it is in the ordinary licence rather than a business tier. The pricing page says what that licence covers.
Still unsure
Write to support@getchatexport.com with what the report says. A file that will not open is usually something dull, a copy that did not finish or a mail system that rewrapped an attachment, and it is worth knowing which before anyone argues about it.