diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index 42cdffabe..63eff9011 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -190,6 +190,7 @@ All definitions files include a header with the author and editors, so at some p
* [jsTree](http://www.jstree.com/) (by [Adam PluciĆski](https://github.com/adaskothebeast))
* [JWPlayer](http://developer.longtailvideo.com/trac/) (by [Martin Duparc](https://github.com/martinduparc/))
* [KeyboardJS](https://github.com/RobertWHurst/KeyboardJS) (by [Vincent Bortone](https://github.com/vbortone/))
+* [keymaster.js](https://github.com/madrobby/keymaster) (by [Marting W. Kirst](https://github.com/nitram509/))
* [KineticJS](http://kineticjs.com/) (by [Basarat Ali Syed](https://github.com/basarat))
* [Knockback](http://kmalakoff.github.com/knockback/) (by [Marcel Binot](https://github.com/docgit))
* [Knockout.js](http://knockoutjs.com/) (by [Boris Yankov](https://github.com/borisyankov))
diff --git a/keymaster/keymaster-tests.ts b/keymaster/keymaster-tests.ts
new file mode 100644
index 000000000..4c7cf3c5b
--- /dev/null
+++ b/keymaster/keymaster-tests.ts
@@ -0,0 +1,14 @@
+///
+
+// simple key binding without scope
+key('shift+a', function (keyboardEvent: KeyboardEvent, keymasterEvent: KeymasterEvent) {
+});
+
+// simple key binding with scope
+key('shift+b', 'aScope', (keyboardEvent, keymasterEvent) => {
+});
+
+// possible combinations of filtering
+key.filter({target: { tagName: 'propertytest'}});
+key.filter({srcElement: { tagName: 'propertytest'}});
+
diff --git a/keymaster/keymaster.d.ts b/keymaster/keymaster.d.ts
new file mode 100644
index 000000000..d749f76d1
--- /dev/null
+++ b/keymaster/keymaster.d.ts
@@ -0,0 +1,60 @@
+// Type definitions for keymaster v1.6.2
+// Project: https://github.com/madrobby/keymaster
+// Definitions by: Martin W. Kirst
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+// A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies.
+
+interface KeymasterEvent {
+ key: string;
+ method: KeyHandler;
+ mods: number[];
+ scope: string;
+ shortcut: string;
+}
+
+interface KeyHandler {
+ (keyboardEvent: KeyboardEvent, keymasterEvent: KeymasterEvent) : void;
+}
+
+interface FilterEvent {
+ target?: {
+ tagName?: string;
+ }
+ srcElement?: {
+ tagName?: string;
+ }
+}
+
+interface Keymaster {
+
+ (key: string, callback: KeyHandler): void;
+ (key: string, scope: string, callback: KeyHandler): void;
+
+ shift: boolean;
+ alt: boolean;
+ option: boolean;
+ ctrl: boolean;
+ control: boolean;
+ command: boolean;
+
+ setScope(scopeName: string): void;
+ getScope():string;
+ deleteScope(scopeName: string): void;
+
+ noConflict(): void;
+
+ unbind(key: string): void;
+ unbind(key: string, scopeName: string): void;
+
+ isPressed(keyCode: number): boolean;
+ getPressedKeyCodes(): number[];
+
+ filter(event: FilterEvent): void;
+}
+
+declare var key: Keymaster;
+
+declare module "keymaster" {
+export = key;
+}