Blog ·September 19, 2026 ·Cloudmanic Labs
We built an ENEX converter that can't upload your notes

Search for “ENEX to Markdown” and you’ll find a dozen tools. Nearly all of them start the same way: pick your file, and we’ll upload it.
Think about what’s in that file. If you’ve had Evernote for ten years, it’s bank statements, insurance paperwork, medical letters, passwords you meant to move somewhere better, photos of your kids, and every half-formed idea you had between 2016 and now. All of it, in one XML file, base64 and all.
Uploading that to a site you found forty seconds ago, so an unknown server can run a text transformation your own laptop could do in two seconds, is a bad trade. Nobody frames it that way, because the upload button is just how file converters have always worked.
So we built one that has no server to upload to. It’s free, there’s no account, and there’s no note limit.
The claim is worthless unless you can check it
“Your files never leave your browser” is on a lot of converter pages. Some of them mean it. You can’t tell which from the copy, because the sentence costs nothing to write.
Here’s the test, and it takes five seconds:
Load the page. Turn off your wi-fi. Use the tool.
If it works, nothing is being uploaded — it can’t be. If it stalls or errors, the file was going somewhere. Do this on ours. Do it on any tool that makes the claim, including the next one you find.
The slightly more thorough version: open your browser’s developer tools, switch to the Network tab, and watch it while you convert. You don’t need to read any code to see whether something got sent.
If you do that, you’ll see our analytics fire — we use Feasible for page views. Feasible records the page was viewed. It does not touch your file, it can’t see it, and it runs on every page of this site, not just this one. What you won’t see is your export going anywhere, because there’s nowhere for it to go.
We’d rather you checked than took our word for it. A privacy claim you can verify in five seconds is worth more than one backed by a paragraph about how much we respect you.
What that constraint cost us
Two things we’d normally solve with a library, we had to write ourselves.
A ZIP writer. The converter gives you back a folder of Markdown files plus your attachments, and a ZIP is the only way a browser can hand you a folder. There are good ZIP libraries on npm. Using one means loading somebody else’s code onto a page that’s holding your notes in memory — and a dependency that can be updated after we ship it. So it’s about a hundred lines of our own, writing uncompressed entries. Your attachments are mostly JPEGs and PDFs, which are already compressed, so the saving we gave up is close to nothing.
MD5 hashing. This one’s less obvious. Inside an ENEX file, a note doesn’t name its attachments — it references each one by the MD5 hash of the raw bytes. To know which image belongs where, you have to hash every attachment yourself and match. Same reasoning, same decision: our own implementation, no dependency.
Neither is clever code. That’s sort of the point. The interesting decision wasn’t technical, it was refusing the easy version.
While we were in there
Writing a converter from scratch means meeting every ugly corner of the format, and a few are worth passing on.
ENML — the markup inside an ENEX — has to be parsed as HTML, not XML, even though it looks like XML and says it’s XML. Real exports are full of entities like that a strict XML parser rejects outright, and a rejected note is a lost note.
Evernote writes most bold and italic as a styled <span>, not as <b> or <i>. A converter that only looks at tag names quietly drops your formatting and looks like it worked.
Code blocks are a <div> whose every line is another <div>. Read the text naively and your code arrives as one long run-on line.
Tables with merged cells can’t be expressed in Markdown at all. Not awkwardly — not at all. Ours turns those into plain lines and tells you it did, which we think beats emitting a table that’s silently missing a column.
If you want the format itself rather than our complaints about it, we pulled one apart in what is an ENEX file?.
The part most converters don’t tell you
Some things cannot survive the trip, and no tool can fix them. Ours says so on screen every time it runs, not just in the small print.
Your notebook names aren’t in the file. Evernote records the notebook only as the export’s filename. Nothing inside an .enex says where a note lived. Export notebook by notebook if the structure matters to you.
Note-to-note links break. They point at ids inside your Evernote account. Saved searches and note history aren’t in the file at all.
Encrypted text stays encrypted. Evernote exports those blocks still locked. Unlock them first, then export.
And the big one: the searchable text from your scans doesn’t come across. Evernote reads the words in your photos and PDFs so you can search them. That text is generated on their servers and never written into the export. Your receipt converts perfectly and then it’s just a picture of a receipt.
That last one isn’t a flaw in our tool or in Evernote’s. Markdown has nowhere to put it.
If Markdown isn’t actually what you wanted
Plenty of people converting to Markdown want Markdown — a folder of plain text, in a git repo or an Obsidian vault, readable in 2046 by anything. If that’s you, go and use it, and we hope it saves you an afternoon.
But some people are converting to Markdown because they need out of Evernote and this looked like the only door. If that’s closer to it: we make Harbor, which reads the .enex directly — notebooks, tags, attachments and dates in one step — and runs OCR over your attachments on the way in, so the scanned paper stays findable instead of becoming files you have to remember the names of. We timed a real 1,000-note migration rather than guessing at it.
Either way, get the export done before you cancel anything. An expired account is a much worse problem than a boring afternoon.