![Showdown](https://raw.githubusercontent.com/showdownjs/logo/master/dist/logo.readme.png) [![Build Status](https://travis-ci.org/showdownjs/showdown.svg?branch=master)](https://travis-ci.org/showdownjs/showdown) [![npm version](https://badge.fury.io/js/showdown.svg)](http://badge.fury.io/js/showdown) [![Bower version](https://badge.fury.io/bo/showdown.svg)](http://badge.fury.io/bo/showdown) [![Join the chat at https://gitter.im/showdownjs/showdown](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/showdownjs/showdown?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) ------ Showdown is a Javascript Markdown to HTML converter, based on the original works by John Gruber. Showdown can be used client side (in the browser) or server side (with NodeJs). ## Installation ### Download tarball You can download the latest release tarball directly from https://github.com/showdownjs/showdown/releases ### Bower bower install showdown ### npm (server-side) npm install showdown ### CDN You can also use github CDN directly in your html file(s). https://cdn.rawgit.com/showdownjs/showdown//dist/showdown.min.js ## Browser Compatibility Showdown has been tested successfully with: * Firefox 1.5 and 2.0 * Chrome 12.0 * Internet Explorer 6 and 7 * Safari 2.0.4 * Opera 8.54 and 9.10 * Netscape 8.1.2 * Konqueror 3.5.4 In theory, Showdown will work in any browser that supports ECMA 262 3rd Edition (JavaScript 1.5). The converter itself might even work in things that aren't web browsers, like Acrobat. No promises. ## Node compatibility Showdown has been tested with node 0.8 and 0.10. However, it should work with previous versions, such as node 0.6. ## Legacy version If you're looking for showdown v<1.0.0, you can find it in the [**legacy branch**](https://github.com/showdownjs/showdown/tree/legacy). ## Changelog You can check the full changelog at https://github.com/showdownjs/showdown/blob/master/CHANGELOG.md ## Extended documentation Check our [wiki pages](https://github.com/showdownjs/showdown/wiki) for examples and a more in-depth documentation. ## Quick Example ### Node ```js var showdown = require('showdown'), converter = new showdown.Converter(), text = '#hello, markdown!', html = converter.makeHtml(text); ``` ### Browser ```js var converter = new showdown.Converter(), text = '#hello, markdown!', html = converter.makeHtml(text); ``` ### Output Both examples should output...

hello, markdown!

## Options You can change some of showdown's default behavior through options. ### Setting options Options can be set: #### Globally Setting a "global" option affects all instances of showdown ```js showdown.setOption('optionKey', 'value'); ``` #### Locally Setting a "local" option only affects the specified Converter object. Local options can be set: * **through the constructor** ```js var converter = new showdown.Converter({optionKey: 'value'); ``` * **through the setOption() method** ```js var converter = new showdown.Converter(); converter.setOption('optionKey', 'value'); ``` ### Getting an option Showdown provides 2 methods (both local and global) to retrieve previous set options. #### getOption() ```js // Global var myOption = showdown.getOption('optionKey'); //Local var myOption = converter.getOption('optionKey'); ``` #### getOptions() ```js // Global var showdownGlobalOptions = showdown.getOptions(); //Local var thisConverterSpecificOptions = converter.getOptions(); ``` ### Retrieve the default options You can get showdown's default options with: ```js var defaultOptions = showdown.getDefaultOptions(); ``` ### Valid Options * **omitExtraWLInCodeBlocks**: (boolean) [default false] Omit the trailing newline in a code block. Ex: This: ```html
var foo = 'bar';
    
``` Becomes this: ```html
var foo = 'bar';
``` * **noHeaderId**: (boolean) [default false] Disable the automatic generation of header ids. Setting to true overrides **prefixHeaderId** * **prefixHeaderId**: (string/boolean) [default false] Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to `true` will add a generic 'section' prefix. * **parseImgDimensions**: (boolean) [default false] Enable support for setting image dimensions from within markdown syntax. Example: ``` ![my image](foo.jpg =100x80) ``` * **headerLevelStart**: (integer) [default 1] Set the header starting level. For instance, setting this to 3 means that `# foo` will be parsed as `

foo

` ## Integration with AngularJS ShowdownJS project also provides seamlessly integration with AngularJS via a "plugin". Please visit https://github.com/showdownjs/ngShowdown for more information. ## Integration with TypeScript If you're using TypeScript you maybe want to use the types from [DefinitelyTyped](https://github.com/borisyankov/DefinitelyTyped/tree/master/showdown) ## XSS vulnerability Showdown doesn't sanitize the input. This is by design since markdown relies on it to allow certain features to be correctly parsed into HTML. This, however, means XSS injection is quite possible. Please refer to the wiki article [Markdown's XSS Vulnerability (and how to mitigate it)](https://github.com/showdownjs/showdown/wiki/Markdown's-XSS-Vulnerability-(and-how-to-mitigate-it)) for more information. ## Extensions Showdown allows additional functionality to be loaded via extensions. (you can find a list of known showdown extensions [here](https://github.com/showdownjs/showdown/wiki/extensions)) ### Client-side Extension Usage ```js