diff --git a/speakingurl/index.d.ts b/speakingurl/index.d.ts
new file mode 100644
index 0000000000..289c1eb033
--- /dev/null
+++ b/speakingurl/index.d.ts
@@ -0,0 +1,29 @@
+// Type definitions for speakingurl 10.0
+// Project: http://pid.github.io/speakingurl/
+// Definitions by: Zlatko Andonovski
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+interface Dictionary {
+ [x: string]: T;
+}
+
+interface Options {
+ separator?: string;
+ lang?: string|boolean;
+ symbols?: boolean;
+ maintainCase?: boolean;
+ titleCase?: string[]|boolean;
+ truncate?: number;
+ uric?: boolean;
+ uricNoSlash?: boolean;
+ mark?: boolean;
+ custom?: string[]|Dictionary;
+}
+
+declare function getSlug(input: string, options?: Options|string): string;
+
+declare namespace getSlug {
+ export function createSlug(options: Options): (input: string) => string;
+}
+
+export = getSlug;
\ No newline at end of file
diff --git a/speakingurl/speakingurl-tests.ts b/speakingurl/speakingurl-tests.ts
new file mode 100644
index 0000000000..76dd9f1a8d
--- /dev/null
+++ b/speakingurl/speakingurl-tests.ts
@@ -0,0 +1,94 @@
+import getSlug = require("speakingurl");
+
+let slug: string;
+
+// Examples from https://github.com/pid/speakingurl#usage
+
+slug = getSlug("Schöner Titel läßt grüßen!? Bel été !");
+slug = getSlug("Schöner Titel läßt grüßen!? Bel été !", '*');
+slug = getSlug("Schöner Titel läßt grüßen!? Bel été !", {
+ separator: '_'
+});
+slug = getSlug("Schöner Titel läßt grüßen!? Bel été !", {
+ uric: true
+});
+slug = getSlug("Schöner Titel läßt grüßen!? Bel été !", {
+ uricNoSlash: true
+});
+slug = getSlug("Schöner Titel läßt grüßen!? Bel été !", {
+ mark: true
+});
+slug = getSlug("Schöner Titel läßt grüßen!? Bel été !", {
+ truncate: 20
+});
+slug = getSlug("Schöner Titel läßt grüßen!? Bel été !", {
+ maintainCase: true
+});
+slug = getSlug("Äpfel & Birnen!", {
+ lang: 'de'
+});
+slug = getSlug("မြန်မာ သာဓက", {
+ lang: 'my'
+});
+slug = getSlug('މިއަދަކީ ހދ ރީތި ދވހކވ', {
+ lang: 'dv'
+});
+slug = getSlug("Apple & Pear!", {
+ lang: 'en' // lang: "en" is default, just to clarify
+});
+slug = getSlug('Foo & Bar * Baz', {
+ custom: {
+ '&': ' doo '
+ },
+ uric: true
+});
+slug = getSlug('Foo ♥ Bar');
+slug = getSlug('Foo & Bar | (Baz) * Doo', {
+ custom: {
+ '*': 'Boo'
+ },
+ mark: true
+});
+slug = getSlug('Foo and Bar or Baz', {
+ custom: {
+ and: 'und',
+ or: ''
+ }
+});
+slug = getSlug('[Knöpfe]', {
+ custom: [
+ '[',
+ ']'
+ ]
+});
+slug = getSlug('NEXUS4 only $299');
+slug = getSlug('NEXUS4 only €299', {
+ maintainCase: true
+});
+slug = getSlug('Don\'t drink and drive', {
+ titleCase: true
+});
+slug = getSlug('Don\'t drink and drive', {
+ titleCase: ['and']
+});
+slug = getSlug('Foo & Bar ♥ Foo < Bar', {
+ lang: false
+});
+slug = getSlug('Foo & Bar ♥ Foo < Bar', {
+ symbols: false
+});
+slug = getSlug('ä♥ä', {
+ lang: 'tr',
+ symbols: false
+});
+
+const options = {
+ titleCase: [
+ "a", "an", "and", "as", "at", "but",
+ "by", "en", "for", "if", "in", "nor",
+ "of", "on", "or", "per", "the", "to", "vs"
+ ]
+};
+
+const mySlug = getSlug.createSlug(options);
+slug = mySlug('welcome to the jungle');
\ No newline at end of file
diff --git a/speakingurl/tsconfig.json b/speakingurl/tsconfig.json
new file mode 100644
index 0000000000..25f6a4e79f
--- /dev/null
+++ b/speakingurl/tsconfig.json
@@ -0,0 +1,19 @@
+{
+ "compilerOptions": {
+ "module": "commonjs",
+ "target": "es6",
+ "noImplicitAny": true,
+ "strictNullChecks": true,
+ "baseUrl": "../",
+ "typeRoots": [
+ "../"
+ ],
+ "types": [],
+ "noEmit": true,
+ "forceConsistentCasingInFileNames": true
+ },
+ "files": [
+ "index.d.ts",
+ "speakingurl-tests.ts"
+ ]
+}
diff --git a/speakingurl/tslint.json b/speakingurl/tslint.json
new file mode 100644
index 0000000000..377cc837d4
--- /dev/null
+++ b/speakingurl/tslint.json
@@ -0,0 +1 @@
+{ "extends": "../tslint.json" }