Markdown waveform diagram maker

Draw digital timing diagrams and register layouts. WaveDrom turns a small JSON description into clean waveforms for hardware and protocol docs.

WaveDrom waveform syntax

A WaveDrom diagram is a JSON object with a signal list. Each signal has a name and a wave string, where every character is one clock step. Here is each piece you can write.

Signals and waves

Give each signal a name and a wave string. Each letter is one step and a dot holds the previous value.

You write
{ "signal": [
  { "name": "clk", "wave": "p......" },
  { "name": "req", "wave": "0.1..0." },
  { "name": "ack", "wave": "0...1.0" }
]}
You get

Data buses

Use digits 2 to 9 for bus values and label them with a data list.

You write
{ "signal": [
  { "name": "clk",  "wave": "p......" },
  { "name": "data", "wave": "x.345.x", "data": ["a", "b", "c"] }
]}
You get

Spacers and gaps

Add a blank object for a gap between groups of signals.

You write
{ "signal": [
  { "name": "clk", "wave": "p..." },
  {},
  { "name": "en",  "wave": "0.1." }
]}
You get

Cheat sheet

Write this You get
Structure
{ "signal": [ ... ] }The whole diagram
{ "name": "x", "wave": "..." }One signal row
{}A gap between rows
"data": ["a", "b"]Labels for bus values
Wave characters
pA clock pulse
0Low level
1High level
.Hold the previous value
xDon't care
2 to 9A data or bus value
|A gap in time