Play around with this text to make your own version

Put one more space at the start of a line to get an arrow to the line above.


Click one to make your own version.

“Theories of change: great idea, but fiddly to draw and revise.”

“Try Theory Maker, the quick, free web app.”

Theory Maker - sketch out your Theory of Change

Theory Maker is a free web app by Steve Powell for making any kind of causal diagram, i.e. a diagram which uses arrows to say what contributes to what. You make the diagrams just by typing the names of the elements (called variables) in a structured way into a (resizeable) window, and you get a live diagram as output which reflects what you type.

In particular, it is optimised for making theories of change, logframes, etc. - special kinds of pragmatic causal theory which are particularly popular at the moment in the world of monitoring and evaluation (M&E).

Theory Maker is most often used by M&E staff for quickly sketching out project theories and evaluation plans. But scientists, especially social scientists, and policy makers use it too.

About Theory Maker

Theory Maker is a free, open-source project. The license is here. The engine which creates the diagrams (using Graphviz) is here. The whole Shiny application is available here if you want to run your own server. It is under rapid development and run on a shoestring so please don't rely on it being there next week. I plan to keep it running for years, but who knows.

I am working on a new version of Theorymaker which will be based on DiagrammeR and will allow actual calculations down the causal tree.

I also restart the server every day or so as I update the code, so make sure you save a copy of your text or save your diagram as a permanent link, so you don't lose your work.

I don't plan ever to charge for Theory Maker or to make money from it directly. It is a project for airing some ideas I have about Theories of Change to accompany a book I am writing.

Plus, Theory Maker is based on a theory of Theories of Change. So when you diagram your theory using Theory Maker, the examples help you to make a real theory, expressed using variables and rules to link them up, not just a nice picture. I have just started to set out some of this theory in the examples provided here. There is a lot more to come.

Please tweet me me your comments, problems and suggestions.


Theory Maker is built on top of Graphviz using Shiny.

For the icons, and font-awesome.

Many people have helped me in developing the app, not limited to: Anamaria Golemac Powell, Esad Bratovic, Simone Ginsburg, Randall Puljek-Shank, many colleagues on LinkedIn, …

Comments, suggestions, bug reports:

Please tweet me or write here.

Do us a favour and tweet about Theory Maker!

Theory Maker 2!

What is new in Theory Maker 2.a

  • You can use triple spaces (as well as triple ///) to force a line break
  • You can use double // to force a line break but not switch off auto line-breaking for the rest of the Variable.
  • Custom Features like sex=male do not now need a preceding ;
  • Write this line style=full to access some new features for compatibility with Evalian, a dialect for evaluation!.

What is new in Theory Maker 2

Theory Maker 2 is a complete rewrite of Theory Maker.

  • It runs about twice as fast (the code is about a quarter the length of the old code) and should be a lot more stable and easier to maintain.
  • Works with other languages: You can now use a whole range of non-English Unicode characters with accents and symbols.
  • You can apply themes just by adding a line like theme=winter, theme=summer, theme=drama, theme=comic or theme=night. More coming!
  • The syntax is simpler and you can tweak your diagram with almost the entire range of Graphviz attributes from label positioning to URLs.
  • You can set 'engine=circle' to get non-hierarchical, more circular layouts

I am also running it on a more powerful server.

Here are the new, somewhat simpler rules for writing Theory Maker diagrams. Or just click on the link “Help and tips” above the text window.

If you saved a diagram in a previous version of Theory Maker

Some things will work fine, but if your diagram had:

  • arrows between groups (“boxes”) of variables,
  • “sentences in variable names. Like. this.”
  • dots to draw arrows,
  • >> to draw arrows,

it may not look right now. Sorry for any inconvenience. You will need to “redraw” your diagram just using spaces to create arrows. Or just write to me at and I will fix it for you.

So if you had this:


you can rewrite it as

banana; peach

and if you had this:


you should rewrite it as


If you had this:

A variable name. A sentence to appear as a note. Another sentence.

you can rewrite it like this:

A variable name; note=A sentence to appear as a note///Another sentence.///

Look here for more help.

Theory Maker Features (& Known Bugs)

Main features

  • Human-readable syntax.
  • Two different ways to “draw” lines between variables, so you can use whatever is most convenient.
  • Recognises and makes auto links for standard decimal naming conventions beginning with a number.
  • Boxes for putting variables in groups, for example to mark off different phases, places or participants.
  • Format your variables and boxes with colours, fonts etc.
  • Easy to change diagram direction (left-to-right, top-to-bottom, etc.) and diagram proportions (wider, taller etc.).
  • Easy to add cross links even in mainly hierarchical theories, e.g. from one sub-Outcome to more than one Outcome
  • You can create aliases/labels for your variables to save tiresome retyping
  • Add notes, “calendar bars” and many other bells and whistles
  • Lots of live templates and suggestions for your theory of change, ready for you to edit (don't worry, you aren't editing the originals).
  • Each new diagram gets a unique permanent link which you can bookmark to return to later or send to a friend. Anyone can save changes to this link.

The rules for typing diagrams in Theory Maker are here.

What it doesn't do

No beautifying

Theory Maker doesn't give you much control over the actual layout (like whether something appears at the top or bottom). This tool tries to keep the layout simple, but that doesn't necessarily mean things are where you expect them to be. Don't bother trying to get the nodes and boxes to move about: If you want to tweak a diagram further, you can download the .svg version of it and manipulate it further in Inkscape, Libreoffice Draw or Illustrator.

Remember to save your text

There is no registration or log-in. You just type text. You can type a title for your diagram and click to save a version and bookmark the link. If you don't, don't forget to copy and paste (somewhere safe) the text you typed, because it won't be there next time you visit the site.

Comments, suggestions, bug reports:


Below this line are technical details of interest mostly to myself…


Sometimes crashes when call to /www/x.png from Word?

-a x -a x

crashes because newrank=true when two clusters have exactly the same contents. This is just a Graphviz bug, don't know what to do about it.

Missing features to add soonest

Maybe complete rewrite in python using pydot, which supports nested subgraphs? (Rgraphviz doesn't because graph doesn't support them either.)

Really important to ensure that

a;sex=m a;sex=f

resolve to DIFFERENT Variables.

but this doesnt work with aliases. – fixed this. Have a look at line 627.

Move email list button higher up.

  • Arrows to boxes is possible like this:




Easy alias - just take first matching letters. This would work for decimals as well. But it would have to be a separate loop after the main processing.

  • Wrap at node level, not only global?
  • Auto-save if add e.g. “autosave” on URL
  • Conditional formatting and/or fromnow;arrow;width=3 etc
  • add link to live .png
  • !- as shortcut for //!rwedge

Possible features (Roadmap)

Bugs to be fixed

  • Shiny crashes on live embed .png in Word - look at console output
  • when I update tm, check that block comes out ok as pdf and png
  • Ensure makeToC2 chunk label gets transferred to figure, so we can link to it with \@ref(fig:joineddia)
  • delete query string when clicking on gallery etc
  • if name contains “=” it gets interpreted as a global att, so either have to list all atts to check if it exists, or insist that graph-level globals are of form diagram;x=y
  • text-align left is difficult, becaue even if you manage to get
    into the label, it indents the first line as if it is a paragraph.

Posts to write

Flexible theories of change

Simon Hearn on Impact

Frequently asked questions

Q: How can I use the diagram in a document? A: 1) Select the format you want, click the download button, save the diagram and paste into your document. PDF will provide better quality. 2) Right-click on the diagram to copy or save it - but it will be in .svg format, which you can paste into some document types (like Libreoffice) but not others (Microsoft office).

Q: Help, I made a mistake typing something and got lost! A: trying undoing your changes: Press control-z one or more times on Windows or Linux.

Q: How can I split a line? A: Use /// like this: first line blah///second line blah

Q: How can I end one box without starting another? A: Just put a line with the same number of -s as the box you want to end, and no other text.

Q: What if I want to work on different diagrams at the same time? A: Just open Theory Maker in different browser windows.

Q: I want to make my diagram super fancy and fit our corporate template. A: If you want to tweak a diagram further, you can download the .svg version of it and manipulate it further in a program like Inkscape, Libreoffice Draw or Illustrator.