What's inside an OPML file
OPML (Outline Processor Markup Language) is a small XML format Dave Winer created at UserLand in the early 2000s for exchanging outlines. Its structure is minimal: a `<head>` with a title, and a `<body>` holding nested `<outline>` elements. Each outline element carries its text in a `text` attribute, and nesting one outline inside another is how a child topic is recorded.
Outliners add their own details through extra attributes. The common convention is `_note` for the note under a bullet, which is what Workflowy, Dynalist and OmniOutliner use. Workflowy also writes `_complete="true"` for completed items, and this viewer shows those struck through. Because the format is so plain, OPML is the most dependable way to get an outline out of one app and into another.
If you have ever exported your podcast or RSS subscriptions, that was OPML too: feed readers use the same `<outline>` elements with a `title` and an `xmlUrl`. Those files open here as a map of your subscriptions, and each feed's link appears when you click it.
Opening FreeMind and Freeplane .mm files
FreeMind is an open-source Java mind-mapping app that was widely used in the 2000s. Freeplane forked from it and still reads and writes the same `.mm` format. A `.mm` file is also XML: a `<map>` element containing one root `<node>`, with each topic's text in a `TEXT` attribute and child topics nested inside. Some other mind-map services also offer a FreeMind `.mm` download, so the format is useful for moving a map between tools.
Formatted text is stored differently. When a topic has styled text, or has a note, FreeMind writes it as a `<richcontent>` block of HTML: `TYPE="NODE"` for the topic text itself and `TYPE="NOTE"` for the note (Freeplane adds `TYPE="DETAILS"`). This viewer reads that HTML as plain text and never renders it, so a file can't run script or load images in your browser. The saved fold state (`FOLDED="true"`) and each main branch's side (`POSITION="left"` or `"right"`) are kept, so the map opens looking the way it did when it was saved.
Markdown and indented text work too
Plenty of outlines never get exported as OPML. They live in a Markdown note or a plain text file. Paste one in and the structure comes from the text itself. Markdown headings make the upper levels (`#` becomes the centre, `##` the main branches), bullets and numbered items nest by their indentation, and a line of prose under a bullet becomes that topic's note. An outline with no bullets at all nests by indentation, with tabs or any number of spaces.
Checkboxes (`- [x]`) are shown as done, and Markdown links keep their URL, which you can open by clicking the topic. YAML front matter from Obsidian or Logseq pages is skipped rather than drawn as topics.
Getting your map back out
Choose the export that fits where the map is going next. PNG and SVG save the map as you see it, with the same layout and folded branches, which works for slides, documents or printing. SVG stays sharp at any size and can be edited in Figma, Illustrator or Inkscape. Markdown saves the whole tree as a nested bullet list with notes indented under their topics. OPML saves the whole tree with notes in `_note`, so it can go back into an outliner or into any mind-map app that imports OPML.
That also makes this a converter. Open a FreeMind `.mm` file and download the OPML to move a years-old map into a modern outliner, or open an OPML export and download the Markdown to paste it into a notes app. Save to canvas sends the map to OmniCanvas as editable boxes and connectors laid out the same way, so you can keep rearranging it, draw on it and link it to other notes.
Large files and privacy
Everything happens on your device. The file is read by your browser, parsed with the browser's own XML parser, and drawn as an SVG. It isn't sent to a server and isn't stored after you close the tab. The only step that sends anything is Save to canvas, which exists to put the map in your OmniCanvas account.
To keep the page responsive, files up to 5 MB and up to 3,000 topics are accepted. Maps with more than about 150 topics open with only the first two levels expanded, and you can expand any branch or use Expand all. Files that declare XML entities are refused outright. Real outline and mind-map exports never use them, and they are a well-known way to make an XML parser misbehave.