md2hd

Markdown in · map out

You already wrote the map.

md2hd reads the frontmatter you are already writing and draws the graph hiding inside it. Point it at a folder of notes and the topology you have been holding in your head becomes something you can look at.

Free, and there is no account. Your notes are parsed in the browser and never uploaded.

partnerships.mdwhat you wrote
---
type: map
title: Partnerships
inverse: { works_at: employs }
---

---
id: riverside-council
type: org
weight: lead
title: Riverside City Council
rel:
  employs: [dana-whitfield, marcus-oyelaran]
---

---
id: dana-whitfield
type: person
title: Dana Whitfield
subtitle: City Clerk
works_at: "[[riverside-council]]"
rel:
  owns: open-records-portal
---
Partnershipswhat md2hd drew
ORGANIZATIONRiverside City CouncilMunicipal · 9 membersPERSONDana WhitfieldCity ClerkPERSONMarcus OyelaranDistrict 3PROGRAMOpen Records PortalLegacy system, no APIPROGRAMNewsletter Pilot8 weeks · Septemberemploysemploysownsadvocates fordepends on

Hover a block on the left to find it on the right. Colour is the node's type, and the stroke's strength is its weight.

Nothing new to learn

Three parts of a note, three parts of a map.

md2hd does not ask you to adopt a format. It reads the one you are almost certainly already using, and every file stays a plain markdown file you can open anywhere else.

Frontmatter

Every block becomes a node

A YAML block opens a card. type gives it a colour,weight gives it a volume, and any key md2hd does not recognise becomes a labelled row in the panel.

Links

Four ways to draw an edge

rel: maps, wikilinks in any field,[[bare links]] in the prose, andowns:: [[inline fields]]. Use whichever fits how you already write.

Prose

The rest is the note

Everything under the frontmatter renders in the detail panel — headings, tables, emphasis, and bare URLs, phone numbers and addresses that become clickable on their own.

One fact, one line

An organisation employs a person. That personworks at the organisation.

It is the same fact, and you will write it from both ends. Drawn naively that is two lines between the same pair, which reads as two different relationships. md2hd turns every link to face one way before drawing it, then lets each node state it in its own voice.

Reading from the Council

ORGANIZATIONRiverside City CouncilMunicipal · 9 membersPERSONDana WhitfieldCity Clerkemploys
The chevron points at Dana, because she is the node on the other end.

Reading from Dana

ORGANIZATIONRiverside City CouncilMunicipal · 9 membersPERSONDana WhitfieldCity Clerkworks at
Same relationship, same single line on the canvas. The wording turns around.

Passive voice flips on its own — anything ending in _by is stored the other way round. For pairs that use different words, declare them once underinverse:. How relationships resolve.

Reading

Focus reframes. It does not just highlight.

Highlighting a neighbourhood inside a tangle still leaves a tangle. Click a node and the map lays out its ego network instead — what points at it on the left, what it points at on the right, itself in the middle, and no crossings by construction. Click the background and the full map comes back exactly as you arranged it.

md2hd — PartnershipsRiverside City Council selected
The md2hd canvas with the Riverside City Council node selected: what points at it on the left, what it points at on the right, and the detail panel open alongside.
Hover lights up everything within two links, and search does the same for the whole map.

Three surfaces

A map raises three questions. maptypenode answers all of them.

What is this? What else is like it? What is in here? The panel is one hierarchy rather than a detail view with lists bolted on, and the breadcrumb is the lift between the levels. Every surface renders its own ancestors, so there is no back stack to get wrong.

md2hd — PartnershipsPartnerships / Programs
The md2hd type surface: the toolbar breadcrumb reads Partnerships then a chip per type, the canvas has every program standing forward with the rest receded, and the panel itemises the two programs above a config dock.
Focusing a type stands its nodes forward and lets the rest recede — the same treatment a search match gets, because “show me the programs” and “find portal” are one gesture.
The strip is the map's breadcrumb
The chips along the top of the canvas select rather than hide. A type hidden from the canvas still appears there, struck through — the control that hid something must not also remove the way back to it.
Each type carries a config dock
What a card draws beyond its title — type, link count, subtitle, tags — is set per type, so terse people can sit beside verbose programs on one canvas.
Off anywhere means off
The map surface can silence an artifact everywhere; a type can only turn its own off, never override the map back on. An overruled chip stays visible and disabled, so the reason it is not applying stays legible.

Weight

Not every node deserves the same attention.

weight is a tier, not a score: five steps, named or numbered, independent of type. A lead node holds its colour at full strength and picks up a halo; a faint one recedes to a hairline.

The tier is the whole control
Write weight: lead or weight: 5. Also accepted: critical, primary,key — and their equivalents at every other step.
Geometry never changes
Cards are the same size at every tier, because the layout depends on it. A map whose card sizes shift is a map that reflows every time you edit a sentence.
It says nothing about the graph
Weight changes how hard a card pushes back at you, not what connects to what. Use it to separate the handful that matter from the supporting cast.
ORGANIZATIONLeadThe handful that matterORGANIZATIONMajorDoing real workORGANIZATIONNormalThe defaultORGANIZATIONMinorSupporting castORGANIZATIONFaintBarely there

Where your notes live

On your machine. That is the entire architecture.

The material people map is usually private and half-formed — deals, sources, people, systems that are not supposed to be public yet. The cost of a backend is not the infrastructure, it is the question of where the notes now live. So there isn't one.

No upload
Files are read by the browser and parsed there. Nothing is sent anywhere, because there is nowhere to send it.
No account
Open the app and start. There is no sign-up, no email, and no session to expire.
Your files stay yours
Plain markdown in a folder you already own. md2hd reads it; your editor, your git repo and your backups keep working exactly as before.
Maps persist locally
Arrangements and edits are kept in this browser's local storage, so a reload picks up where you left off. Clearing site data clears them.

The honest limits are written down too — see what md2hd does with dataand what it deliberately does not do.

What people map

Node types are yours to invent.

md2hd knows nothing about organisations, services or characters. It draws whatever types your notes declare, which is why the same canvas reads as an org chart, a service map or a plot outline without being told which one it is.

Partnerships

Who actually decides

Organisations, the people inside them, and the one relationship every other one routes through.

Systems

What depends on what

Services, queues and the legacy box nobody wants to touch, drawn from the notes you took while learning them.

Research

How the evidence connects

Sources, claims and the threads between them, with the argument itself in the panel.

Writing

Who knows what, and when

Characters, places and the plot beats that tie them together — a canvas that never asks you to leave your drafts.

Two sample maps are already loaded.

Open the app and read one before you import anything of your own. Or drop a folder straight onto the canvas — whichever tells you faster whether this is useful.