![Showdown][sd-logo] [![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). ## Live DEMO Check a live Demo here http://showdownjs.github.io/demo/ ## Installation ### Download tarball You can download the latest release tarball directly from [releases][releases] ### Bower bower install showdown ### npm (server-side) npm install showdown ### CDN You can also use one of several CDNs available: * github CDN https://cdn.rawgit.com/showdownjs/showdown//dist/showdown.min.js * cdnjs https://cdnjs.cloudflare.com/ajax/libs/showdown//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**][legacy-branch]. ## Changelog You can check the full [changelog][changelog] ## Extended documentation Check our [wiki pages][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

` * **simplifiedAutoLink**: (boolean) [default false] Turning this on will enable GFM autolink style. This means `some text www.google.com` will be parsed as `

some text www.google.com` * **literalMidWordUnderscores**: (boolean) [default false] Turning this on will stop showdown from interpreting underscores in the middle of words as `` and `` and instead treat them as literal underscores. Example: ```md some text with__underscores__in middle ``` will be parsed as ```html

some text with__underscores__in middle

``` * **strikethrough**: (boolean) [default false] Enable support for strikethrough syntax. `~~strikethrough~~` as `strikethrough` * **tables**: (boolean) [default false] Enable support for tables syntax. Example: ```md | *foo* | **bar** | ~~baz~~ | |:------|:-------:|--------:| | 100 | [a][1] | ![b][2] | ``` See the wiki for more info * **tablesHeaderId**: (boolean) [default false] If enabled adds an id property to table headers tags. * **ghCodeBlocks**: (boolean) [default true] Enable support for GFM code block style. * **tasklists**:(boolean) [default false] Enable support for GFM takslists. Example: ```md - [x] This task is done - [ ] This is still pending ``` ## CLI Tool Showdown also comes bundled with a Command Line Interface tool. You can check the [CLI wiki page][cli-wiki] for more info ## 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][definitely-typed] ## 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)][xss-wiki] for more information. ## Extensions Showdown allows additional functionality to be loaded via extensions. (you can find a list of known showdown extensions [here][ext-wiki]) ### Client-side Extension Usage ```js