diff --git a/dragula/dragula-amd-tests.ts b/dragula/dragula-amd-tests.ts
new file mode 100644
index 0000000000..99cb5e043f
--- /dev/null
+++ b/dragula/dragula-amd-tests.ts
@@ -0,0 +1,37 @@
+import dragula = require("dragula");
+
+// containers
+var d1 = dragula([document.querySelector('#left'), document.querySelector('#right')]);
+
+// all options
+var d2 = dragula({
+ isContainer: function (el) {
+ return false;
+ },
+ moves: function (el, container, handle) {
+ return true;
+ },
+ accepts: function (el, target, source, sibling) {
+ return true;
+ },
+ invalid: function (el, target) {
+ return el.tagName === 'A' || el.tagName === 'BUTTON';
+ },
+ direction: 'vertical',
+ copy: false,
+ revertOnSpill: false,
+ removeOnSpill: false,
+ delay: false,
+ mirrorContainer: document.body
+});
+
+// empty call
+var d3 = dragula();
+
+
+// drake API
+var drake = dragula({
+ copy: true
+});
+
+drake.containers.push(document.querySelector('#container'));
diff --git a/dragula/dragula-amd-tests.ts.tscparams b/dragula/dragula-amd-tests.ts.tscparams
new file mode 100644
index 0000000000..7c5a0c2f95
--- /dev/null
+++ b/dragula/dragula-amd-tests.ts.tscparams
@@ -0,0 +1 @@
+--experimentalDecorators --target ES5 --module amd
diff --git a/dragula/dragula-tests.ts b/dragula/dragula-tests.ts
new file mode 100644
index 0000000000..f5481f1d89
--- /dev/null
+++ b/dragula/dragula-tests.ts
@@ -0,0 +1,31 @@
+///
+
+var d1 = dragula([document.querySelector('#left'), document.querySelector('#right')]);
+
+var d2 = dragula({
+ isContainer: function (el) {
+ return false;
+ },
+ moves: function (el, container, handle) {
+ return true;
+ },
+ accepts: function (el, target, source, sibling) {
+ return true;
+ },
+ invalid: function (el, target) {
+ return el.tagName === 'A' || el.tagName === 'BUTTON';
+ },
+ direction: 'vertical',
+ copy: false,
+ revertOnSpill: false,
+ removeOnSpill: false,
+ delay: false,
+ mirrorContainer: document.body
+});
+
+var d3 = dragula();
+
+var drake = dragula({
+ copy: true
+});
+drake.containers.push(document.querySelector('#container'));
diff --git a/dragula/dragula-tests.ts.tscparams b/dragula/dragula-tests.ts.tscparams
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/dragula/dragula-tests.ts.tscparams
@@ -0,0 +1 @@
+
diff --git a/dragula/dragula.d.ts b/dragula/dragula.d.ts
new file mode 100644
index 0000000000..8a707ef6fc
--- /dev/null
+++ b/dragula/dragula.d.ts
@@ -0,0 +1,46 @@
+// Type definitions for dragula v2.1.2
+// Project: http://bevacqua.github.io/dragula/
+// Definitions by: Paul Welter
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare module dragula {
+ interface DragulaOptions {
+ containers?: Element[];
+ isContainer?: (el?: Element) => boolean;
+ moves?: (el?: Element, container?: Element, handle?: Element) => boolean;
+ accepts?: (el?: Element, target?: Element, source?: Element, sibling?: Element) => boolean;
+ invalid?: (el?: Element, target?: Element) => boolean;
+ direction?: string;
+ copy?: boolean;
+ revertOnSpill?: boolean;
+ removeOnSpill?: boolean;
+ delay?: boolean | number;
+ mirrorContainer?: Element;
+ }
+
+ interface Drake {
+ containers: Element[];
+ dragging: boolean;
+ start(item:Element): void;
+ end(): void;
+ cancel(revert:boolean): void;
+ cancel(): void;
+ remove(): void;
+ on(events: string, callback: Function): void;
+ destroy(): void;
+ }
+
+ interface Dragula {
+ (containers: Element[], options: DragulaOptions): Drake;
+ (containers: Element, options: DragulaOptions): Drake;
+ (containers: Element[]): Drake;
+ (options: DragulaOptions): Drake;
+ (): Drake;
+ }
+}
+
+declare var dragula: dragula.Dragula;
+
+declare module "dragula" {
+ export = dragula;
+}