12 September 2026
Converting Evernote ENEX Notebooks to Markdown: Free Your Notes from Proprietary XML
For over a decade, Evernote was the undisputed king of personal knowledge management (PKM). Millions of professionals, researchers, and students entrusted it with their lecture notes, travel itineraries, journal entries, code snippets, and corporate documentation.
As modern, local-first note-taking platforms like Obsidian, Logseq, and Foam gained dominance, thousands of users sought to migrate their archives. However, Evernote exports notes not as standard Markdown or open text, but as Evernote XML Export (.enex) archives. Inside these XML containers lies ENML (Evernote Markup Language)—a specialized XHTML subset packed with custom XML entities, embedded media hashes, and proprietary attributes that desktop text editors cannot parse.
This engineering guide examines the forensic XML structure of .enex files, explains how ENML tags and metadata are unpacked, and demonstrates how convrtr's Evernote to Markdown engine transforms legacy ENEX archives into clean, structured GitHub Flavored Markdown (GFM) directly inside your browser.
The ENEX Container Architecture
An .enex export is a structured XML document enveloped by an <en-export> root tag declaring the export date and application version:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE en-export SYSTEM "http://xml.evernote.com/pub/evernote-export4.dtd">
<en-export export-date="20260912T140000Z" application="Evernote" version="10.85.1">
<note>
<title>Q3 Architecture Strategy</title>
<content>
<![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">
<en-note>
<div>Summary of high-priority architectural objectives:</div>
<div><en-todo checked="true"/> Complete client-side S3M audio synthesizer</div>
<div><en-todo checked="false"/> Author ISO 8632 CGM vector converter</div>
</en-note>]]>
</content>
<created>20260901T091530Z</created>
<updated>20260910T164500Z</updated>
<tag>engineering</tag>
<tag>architecture</tag>
<note-attributes>
<source-url>https://internal.wiki/arch-review</source-url>
<author>Lead Systems Architect</author>
</note-attributes>
</note>
</en-export>
Forensic Note Elements
Within each <note> tag, the key fields include:
<title>: Plain-text string containing the note title.<created>/<updated>: ISO 8601-like timestamps formatted asYYYYMMDDTHHMMSSZ(e.g.,20260901T091530Z).<tag>: Zero or more user-defined classification tags.<note-attributes>: Optional metadata blocks detailing geolocation (<latitude>,<longitude>,<altitude>), source URL, author, and reminder deadlines.<content>: ACDATAblock containing the full ENML document.
Demystifying ENML: Evernote Markup Language
The inner content is serialized as an XML document constrained by the enml2.dtd specification. While ENML borrows heavily from standard XHTML (<div>, <p>, <span>, <h1>–<h6>, <ul>, <ol>, <li>, <table>), it introduces specialized tags and strict validation rules:
1. The <en-note> Root Container
All note content is wrapped inside <en-note>. It forbids script tags, style sheets, iframes, and arbitrary HTML forms.
2. Checklists and Action Items: <en-todo>
Evernote encodes interactive task checkboxes as self-closing <en-todo> elements:
<en-todo checked="false"/> Draft specification<en-todo checked="true"/> Verify zero-server export
In Markdown, these map directly to GitHub Flavored Markdown task list syntax:
- [ ] Draft specification- [x] Verify zero-server export
3. Media and Attachments: <en-media>
Instead of standard <img> tags pointing to remote URLs, ENML represents embedded images, audio clips, and PDF attachments via <en-media>:
<en-media type="image/png" hash="d41d8cd98f00b204e9800998ecf8427e"/>
The hash attribute contains the MD5 hex digest of the binary payload, which is stored in a sibling <resource> block under the <note> element encoded as base64 data.
Transforming ENEX into Modern Markdown
To produce notes that render seamlessly in Obsidian, Logseq, Notion, or GitHub, the converter executes a multi-stage transformation pipeline:
Stage 1: YAML Frontmatter Extraction
Metadata from the XML envelope is parsed and formatted as YAML frontmatter at the top of the file:
---
title: "Q3 Architecture Strategy"
created: 2026-09-01T09:15:30Z
updated: 2026-09-10T16:45:00Z
tags:
- engineering
- architecture
source: "https://internal.wiki/arch-review"
author: "Lead Systems Architect"
---
Stage 2: HTML Table to GFM Pipe Table Conversion
Evernote tables (<table>, <tr>, <th>, <td>) are converted into standard GFM pipe tables:
- Table headers are extracted to create the column definition row (
| Col 1 | Col 2 |). - A separator row (
| :--- | :--- |) is dynamically generated. - Multi-line cell text is trimmed and whitespace-normalized to preserve table formatting.
Stage 3: Formatting and Code Block Preservation
- Bold (
<b>,<strong>) maps to**text**. - Italics (
<i>,<em>) maps to*text*. - Strikethrough (
<s>,<strike>,<del>) maps to~~text~~. - Preformatted code blocks (
<pre><code>) preserve syntax indentation within Markdown triple-backtick fences. - HTML character entities (
&,<,>,",',') are decoded into standard UTF-8 characters.
Local-First Privacy for Personal Knowledge
Personal notes contain some of the most sensitive data an individual or enterprise owns: passwords, medical histories, confidential meeting minutes, and proprietary project roadmaps.
Uploading gigabytes of personal note archives to unknown web servers is a massive security and privacy risk. Because convrtr's ENEX converter executes entirely client-side using native browser streaming and XML parsing, your private notes are never transmitted across the network, logged, or retained.
Related reading
Converting Emacs Org Mode to Markdown: Outlines, Tables, and Checklists
Explore the syntax and semantics of Emacs Org Mode (.org). Learn how asterisk headings, TODO states, priority tags, Org Calc tables, and code blocks translate to GitHub Flavored Markdown.
Converting OPML Outlines and Subscriptions to Markdown: Tables and Hierarchies
Dissect the Outline Processor Markup Language (.opml) architecture. Learn how RSS subscription directories, podcast feeds, and hierarchical task outlines are converted into clean GitHub Flavored Markdown.
Converting FictionBook 2.0 (FB2) E-Books to Markdown: XML Structure and Semantics
Explore the FictionBook 2.0 (.fb2) architecture. Learn how semantic XML e-book structures, epigraphs, poems, footnotes, and metadata are converted into clean GitHub Flavored Markdown.
Converting PalmDoc (PDB) to Markdown: Vintage Handheld E-Book Architecture
Explore the Palm OS PalmDoc (.pdb / .prc) architecture. Discover 78-byte database headers, record indices, 4KB LZ77 compressed blocks, and browser-based Markdown extraction.
Converting AbiWord (.abw, .zabw) to Markdown: Open-Source Word Processing Recovery
Examine AbiWord's native AWML XML document architecture. Learn how Dublin Core metadata, 2D table grids, styled character spans, GZIP compression, and base64 illustrations convert into clean Markdown.
Converting Hangul Word Processor (HWP) to Markdown: OLE CFB & Deflate Forensics
Unpack Hancom Hangul HWP 5.x compound documents. Discover how OLE 2.0 CFB directory tables, Deflate stream decompression, and HWPTAG_PARA_TEXT record parsers extract clean Markdown in browser memory.
Converting ClarisWorks and AppleWorks CWK to Markdown: Recovering Vintage Mac Documents
Learn how to extract text, paragraphs, and headings from vintage ClarisWorks and AppleWorks (.cwk) MacBinary files into clean GitHub Flavored Markdown with 100% private in-browser decoding.
Converting Wolfram Mathematica Notebooks (.nb) to Markdown: Hierarchical Expression Tree Extraction
Learn how Wolfram Mathematica (.nb) computational notebooks store hierarchical expression trees and 2D box formulas, and how convrtr translates them to clean GitHub Flavored Markdown.
Converting LyX Documents to Markdown: Preserving Academic Math and Outlines
Learn how LyX WYSIWYM documents are structured. Explore how layout trees, mathematical formula insets, and tabular matrices convert into GitHub Flavored Markdown.
Converting GNU Texinfo to Markdown: Modernizing Free Software Manuals
Discover GNU Texinfo, the documentation language behind GCC and Emacs. Learn how single-source @-directives convert cleanly into GitHub Flavored Markdown.
Converting Unix Man Pages to Markdown: Modernizing Terminal Documentation
Transform vintage and modern Unix roff and BSD mdoc manual pages into clean GitHub Flavored Markdown. Learn how macro packages convert to web-ready documentation.
Converting AT&T Troff Documents to Markdown: Classical Unix Typesetting
Discover classical AT&T troff (.tr / .troff) typesetting documents from Bell Labs. Learn how dot requests, string registers, and macros translate to GFM Markdown.