made-with-Markdown Generic badge

Interactive Markdown

Engage your users, downrun your Markdown. Make it live with our low-code, document based approach!

  1. Active html and javascript code sections (see example below).

  2. Interactive JavaScript console right in the browser (see example below).

  3. Math for big numbers, complex numbers, fractions, units, strings, arrays, and matrices (see example below).

  4. Full image and link styling support.

  5. embedded basic charts, graphs, and tables or organization charts or gantt charts.

  6. Questions to support interactive training

  7. LaTeX Math rendering and computation (soon).

  8. Coming Soon: Ability to include another file.

  9. Coming Soon: Questionnaires and forms to support interactive training, running surveys or reporting survey results.

  10. and more … but this list is getting a little long. Vote for what you want by liking enhancements at Downrunner Support.

See what is NEW this week.

FREE access to open BETA. See the latest news.

What if this:

var message = "Hello World!";

target.innerText = message;

Actually did this:

var message = 'Hello World!'
target.innerText = message;

Try editing the message and see what happens to both the page and the console output >

Try typing a math expression into the console, e.g. 1 + 1 or sqrt(10) or even sqrt(-10) and String(sqrt(-10)).

See MathJS for the full range of functions. You do not need to prefix them with math.

How To

How hard is it to make your Markdown live? It’s not. Below are the simple downrunner enhancements.

Downrunner commands are just placed in special HTML comments after backtick fenced items or Markdown elements, e.g. links, they control. They will be safely ignored until your file is served after conversion to an HTML file and processed by Downrunner.

The values of editor, target are HTML element ids or markdown anchors that take the form [](value). If the elements do not exist, they will be created sequentially after the backticked element that references them. If they do exist, they will serve as containers for placing output.

The value of for points to a primary downrunner element. It exists so that segments can be split for easier reading or management. Sections with this tag are all assembled at once for rendering to the target of the primary tage. If you do not provide a target id, then the results of the code block are hidden.

The target id can only exist on the primary downrunner element. Each downrunner element can have its own editor.

The property expose tells the engine to display the source of the downrunner enclosed items including the downrunner tags if exposesdownrunner is true. See how for the second source, the tags are not shown.

You can add closure to tell the Downrunner engine to wrap the code in a closure to avoid scope pollution. If code is not wrapped in a closure, then scripts further down in the document will haver access to newly declared variables (which may be what you want!). You will also need to use a closure if your sample code includes a try/catch block outside of a function call. Alternatively, you can provide async:true if you need to use await in your code example.

Note that for console, we have also required math. This adds advanced math capabilities beyond those normally provided by JavaScript. It is based on MathJS.


Whenever it is possible for end users to enter code, e.g. HTML, CSS, JavaScript, into a website that my impact the display of the site, there is a potential for nefarious people to attempt to hijack the site and present it to users as something it is not or use it for harvesting credentials.

Although it is unlikely that most downrunnable Markdown sites will be subject to attack or useful to a hijacker, Downrunner takes this threat serioulsy. We attempt to sandbox user entered code execution in special iframes, the shadow DOM and Web Workers. While in BETA we know there are gaps in our protection and we are working to close them.

Warranty License Terms and Conditions

Copyright AnyWhichWay, LLC 2020.