Showdown
A bidirectional Markdown to HTML to Markdown converter written in Javascript
Install / Use
/learn @showdownjs/ShowdownREADME
![Showdown][sd-logo]
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 Node.js).
Live DEMO
As you know, ShowdownJS is a free library and it will remain free forever. However, maintaining and improving the library costs time and money.
If you like our work and find our library useful, please donate through PayPal! Your contribution will be greatly appreciated and help me continue to develop this awesome library.
License
ShowdownJS v 2.0 is released under the MIT license. Previous versions are released under BSD.
Who uses Showdown (or a fork)
- GoogleCloudPlatform
- Meteor
- Stackexchange - forked as PageDown
- docular
- md-page
- QCObjects
- and some others...
Installation
Download tarball
You can download the latest release tarball directly from [releases][releases].
Bower
bower install showdown
npm (server-side)
npm install showdown
NuGet package
PM> Install-Package showdownjs
The NuGet Packages can be found here.
CDN
You can also use one of several CDNs available:
-
jsDelivr
https://cdn.jsdelivr.net/npm/showdown@<version tag>/dist/showdown.min.js -
cdnjs
https://cdnjs.cloudflare.com/ajax/libs/showdown/<version tag>/showdown.min.js -
unpkg
https://unpkg.com/showdown/dist/showdown.min.js
Note: replace <version tag> with an actual full length version you're interested in e.g. 1.9.0
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 is intended to work on any supported Node.js version (see the Node.js releases schedule. The code may work with previous versions of Node.js, but no accomidations are made to ensure it does.
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
var showdown = require('showdown'),
converter = new showdown.Converter(),
text = '# hello, markdown!',
html = converter.makeHtml(text);
Browser
var converter = new showdown.Converter(),
text = '# hello, markdown!',
html = converter.makeHtml(text);
Output
Both examples should output...
<h1 id="hellomarkdown">hello, markdown!</h1>
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
showdown.setOption('optionKey', 'value');
Locally
Setting a "local" option only affects the specified Converter object. Local options can be set:
-
through the constructor
var converter = new showdown.Converter({optionKey: 'value'}); -
through the setOption() method
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()
// Global
var myOption = showdown.getOption('optionKey');
//Local
var myOption = converter.getOption('optionKey');
getOptions()
// Global
var showdownGlobalOptions = showdown.getOptions();
//Local
var thisConverterSpecificOptions = converter.getOptions();
Retrieve the default options
You can get showdown's default options with:
var defaultOptions = showdown.getDefaultOptions();
Valid Options
-
omitExtraWLInCodeBlocks: (boolean) [default false] Omit the trailing newline in a code block. Ex:
This:
<code><pre>var foo = 'bar'; </pre></code>Becomes this:
<code><pre>var foo = 'bar';</pre></code> -
noHeaderId: (boolean) [default false] Disable the automatic generation of header ids. Setting to true overrides prefixHeaderId
-
customizedHeaderId: (boolean) [default false] Use text in curly braces as header id. (since v1.7.0) Example:
## Sample header {real-id} will use real-id as id -
ghCompatibleHeaderId: (boolean) [default false] Generate header ids compatible with github style (spaces are replaced with dashes and a bunch of non alphanumeric chars are removed) (since v1.5.5)
-
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
truewill add a generic 'section' prefix. -
rawPrefixHeaderId: (boolean) [default false] Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix). Has no effect if prefixHeaderId is set to false. (since v 1.7.3)
-
rawHeaderId: (boolean) [default false] Remove only spaces, ' and " from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids (since v1.7.3)
-
headerLevelStart: (integer) [default 1] Set the header starting level. For instance, setting this to 3 means that
# foowill be parsed as
<h3>foo</h3> -
parseImgDimensions: (boolean) [default false] Enable support for setting image dimensions from within markdown syntax. Examples:
 simple, assumes units are in px  sets the height to "auto"  Image with width of 80% and height of 5em -
simplifiedAutoLink: (boolean) [default false] Turning this option on will enable automatic linking to urls. This means that:
some text www.google.comwill be parsed as
<p>some text <a href="www.google.com">www.google.com</a> -
~~excludeTrailingPunctuationFromURLs: (boolean) [default false] This option excludes trailing punctuation from autolinking urls. Punctuation excluded:
. ! ? ( ). Only applies if simplifiedAutoLink option is set totrue.~~ -
literalMidWordUnderscores: (boolean) [default false] Turning this on will stop showdown from interpreting underscores in the middle of words as
<em>and<strong>and instead treat them as literal underscores.Example:
some text with__underscores__in middlewill be parsed as
<p>some text with__underscores__in middle</p> -
~~literalMidWordAsterisks: (boolean) [default false] Turning this on will stop showdown from interpreting asterisks in the middle of words as
<em>and<strong>and instead treat them as literal asterisks.~~ -
strikethrough: (boolean) [default false] Enable support for strikethrough syntax.
~~strikethrough~~as<del>strikethrough</del> -
tables: (boolean) [default false] Enable support for tables syntax. Example:
| h1 | h2 | h3 | |:------|:-------:|--------:| | 100 | [a][1] | ![b][2] | | *foo* | **bar** | ~~baz~~ |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 tasklists. Example:
- [x] This task is done - [ ] This is still pending -
smoothLivePreview: (boolean) [default false] Prevents weird effects in live previews due to incomplete input
-
smartIndentationFix: (boolean) [default false] Tries to smartly fix indentation problems related to es6 template strings in the midst of indented code.
-
disableForced4SpacesIndentedSublists: (boolean) [default false] Disables the requirement of indenting sublists by 4 spaces for them to be nested, effectively reverting to the old behavior where 2 or 3 spaces were enough.
Related Skills
node-connect
335.2kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
82.5kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
335.2kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
82.5kCommit, push, and open a PR
