diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index ec2eec5d84ab81..ef83ff093cad8e 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -326,6 +326,7 @@ All definitions files include a header with the author and editors, so at some p
* [Sencha Touch](http://www.sencha.com/products/touch/) (by [Brian Kotek](https://github.com/brian428))
* [SharePoint](http://sptypescript.codeplex.com) (by [Stanislav Vyshchepan](http://gandjustas.blogspot.ru) and [Andrey Markeev](http://markeev.com))
* [ShellJS](http://shelljs.org) (by [Niklas Mollenhauer](https://github.com/nikeee))
+* [Showdown](https://github.com/coreyti/showdown) (by [Chris Bowdon](https://github.com/cbowdon))
* [SignalR](http://www.asp.net/signalr) (by [Boris Yankov](https://github.com/borisyankov))
* [simple-cw-node](https://github.com/astronaughts/simple-cw-node) (by [vvakame](https://github.com/vvakame))
* [Sinon](http://sinonjs.org/) (by [William Sears](https://github.com/mrbigdog2u))
diff --git a/showdown/showdown-tests.ts b/showdown/showdown-tests.ts
new file mode 100644
index 00000000000000..bb5adc8507670f
--- /dev/null
+++ b/showdown/showdown-tests.ts
@@ -0,0 +1,20 @@
+///
+
+// compile: tsc showdown/showdown-tests.ts --noImplicitAny --module commonjs
+// run: node showdown/showdown-tests.js
+
+import Showdown = require('showdown');
+
+var exampleMarkdown = '#hello, markdown',
+ converter = new Showdown.converter(),
+ preloadedExtensions = [ 'github', 'twitter', 'prettify', 'table' ],
+ extensionsConverter = new Showdown.converter({ extensions: preloadedExtensions });
+
+console.log(converter.makeHtml(exampleMarkdown));
+// should log '
hello, markdown
'
+
+console.log(extensionsConverter.makeHtml(exampleMarkdown));
+// should log '#hello, markdown
'
+
+Showdown.forEach(preloadedExtensions, console.log);
+// should log each item in the above array
diff --git a/showdown/showdown.d.ts b/showdown/showdown.d.ts
new file mode 100644
index 00000000000000..278137050ed867
--- /dev/null
+++ b/showdown/showdown.d.ts
@@ -0,0 +1,88 @@
+// Type definitions for Showdown 0.3.1
+// Project: https://github.com/coreyti/showdown
+// Definitions by: cbowdon
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare module Showdown {
+
+ /** Defined for information only - used in union type */
+ interface Replace {
+ /**
+ * This is just the replacer function argument to String.prototype.replace, signature from lib.d.ts
+ */
+ replace(substring: string, ...args: any[]): string;
+ }
+
+ interface Extension {
+ /**
+ * Describes what type of extension - language ext or output modifier.
+ * If absent, 'output modifier' type is assumed (contrary to comments in source).
+ */
+ type?: string;
+ }
+
+ interface LangExtension extends Extension {
+ filter? (text: string): string;
+ }
+
+ interface OutputModifier extends Extension {
+ /** Used to build a Regex */
+ regex?: string;
+ /** Similar to arg to String.prototype.replace (which is in fact called under the hood) */
+ replace?: any; // string | Replace
+ }
+
+ /**
+ * Defines a plugin/extension
+ * Each single extension can be one of two types:
+ *
+ * + Language Extension -- Language extensions are ones that that add new markdown syntax to showdown. For example, say you wanted ^^youtube http://www.youtube.com/watch?v=oHg5SJYRHA0 to automatically render as an embedded YouTube video, that would be a language extension.
+ * + Output Modifiers -- After showdown has run, and generated HTML, an output modifier would change that HTML. For example, say you wanted to change