Skip to content

The .3md format

3md.

Markdown, but with a third axis you name yourself.

A plain-text format for documents with depth: time, layers, frames, space. Open, MIT, with conformance-verified parsers in Swift, TypeScript, and Rust. Write one below and share it with a link.


One free axis

You decide what Z means.

Markdown is flat. Real things have depth. In 3md the third axis is yours to name, so the same plain-text file becomes a week, a stack of overlays, an animation, or a stage, just by what you call the axis.

  • axis = time
    days, a week, a timeline
  • axis = layers
    source · plain-English · review
  • axis = frames
    animation, step by step
  • axis = space
    x / y / z stage positions
  • axis = slides
    a deck you step through
  • axis = floors
    a building, by elevator

Write one now

The editor is the demo.

Edit the source on the left; the live viewer on the right is the real <three-md> component people embed. Switch the layout (split · editor · viewer), then copy a share link or an embed snippet (both carry the whole document).

source.3md
live viewer<three-md>

The whole spec, on a napkin

Know Markdown? You know 3md.

A version line is the magic marker. An axis names what depth means. @plane directives slice the document along Z, and everything between them is ordinary Markdown. That's the format.

The viewer above is the canonical component, backed by a parser kept identical across three languages by one shared conformance suite, so what you write renders the same everywhere.

1
free axis
you name what depth means
3
parsers in lockstep
Swift · TypeScript · Rust
43
conformance vectors
one contract, green in all three
1.0
frozen grammar
additive-only from here · MIT

Agent profiles

agent.3md builds on the format.

Put an agent in a single .3md file: plane 0 is the agent, every other plane is a skill. That project has its own page because the agent layer adds routing, CLI bindings, loaders, and MCP on top of the base 3md format.

  • progressive disclosure
    The agent loads only the skill it needs, not all of them.
  • flat at scale
    Keep the skill index out of the prompt and query it as a tool, and per turn context stays roughly flat as the agent grows.
  • portable
    The same file loads in TypeScript, Rust, and Swift.
  • mcp-ready
    Run it as an MCP server and any agent can call its skills as tools.

Markdown, with depth.

One free axis, three conformant parsers, a frozen 1.0 grammar, and a component you can drop into any JavaScript or TypeScript front end.