diff --git a/types/deluge/deluge-tests.ts b/types/deluge/deluge-tests.ts
new file mode 100644
index 0000000000..bed31f4a55
--- /dev/null
+++ b/types/deluge/deluge-tests.ts
@@ -0,0 +1,23 @@
+import * as deluge from ".";
+import * as http from 'http';
+
+const delugeInstance: deluge.Deluge = deluge("deluge-webui-api-url", "password");
+
+delugeInstance.getHosts((error, result : deluge.Host[], response : http.ServerResponse) => {
+})
+
+delugeInstance.connect("id", (error, result : boolean, response : http.ServerResponse) => {
+})
+
+delugeInstance.add("magnet_link", "path", (error, result : boolean, response: http.ServerResponse ) => {
+})
+
+delugeInstance.getTorrentRecord((error, result : deluge.TorrentRecord, response : http.ServerResponse) => {
+})
+
+delugeInstance.isConnected((error, result : boolean, response : http.ServerResponse) => {
+})
+
+delugeInstance.setCookies({ "http://www.some-private-tracker.com/": "my_cookie1=xxx;my_cookie2=yyy;" },
+ (error, result : boolean, response : http.ServerResponse) => {
+})
\ No newline at end of file
diff --git a/types/deluge/index.d.ts b/types/deluge/index.d.ts
new file mode 100644
index 0000000000..ffe6e5bcfe
--- /dev/null
+++ b/types/deluge/index.d.ts
@@ -0,0 +1,126 @@
+// Type definitions for deluge 1.7
+// Project: https://github.com/ginman86/deluge
+// Definitions by: Felix Plymouth
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+///
+
+import * as http from "http";
+
+export = deluge;
+
+declare function deluge(deluge_url: string, password: string): deluge.Deluge
+
+declare namespace deluge{
+
+ export interface Host {
+ id: string,
+ ip: string,
+ port: number,
+ status: string
+ }
+
+ export interface DelugeStats {
+ upload_protocol_rate: number,
+ max_upload: number,
+ download_protocol_rate: number,
+ download_rate: number,
+ has_incoming_connections: boolean,
+ num_connections: number,
+ max_download: number,
+ upload_rate: number,
+ dht_nodes: number,
+ free_space: number,
+ max_num_connections: number
+ }
+
+ export interface Torrent {
+ max_download_speed: number,
+ upload_payload_rate: number,
+ download_payload_rate: number,
+ num_peers: number,
+ ratio: number,
+ total_peers: number,
+ state: string,
+ max_upload_speed: number,
+ eta: number,
+ save_path: string,
+ progress: number,
+ time_added: number,
+ tracker_host: string,
+ total_uploaded: number,
+ total_done: number,
+ total_wanted: number,
+ total_seeds: number,
+ seeds_peers_ratio: number,
+ num_seeds: number,
+ name: string,
+ is_auto_managed: boolean,
+ queue: number,
+ distributed_copies: number
+ }
+
+ export interface TorrentRecord {
+ stats: DelugeStats,
+ connected: boolean,
+ torrents: {
+ [key: string]: Torrent
+ },
+ filters: {
+ state: [string, number][],
+ tracker_host: [string, number][]
+ }
+ }
+
+ export interface DownloadOptions {
+ file_priorities: any[],
+ add_paused: boolean,
+ compact_allocation: boolean,
+ download_location: string,
+ max_connections: number,
+ max_download_speed: number,
+ max_upload_slots: number,
+ max_upload_speed: number,
+ prioritize_first_last_pieces: boolean
+ }
+
+ export interface Deluge {
+ /**
+ * Add the torrent to Deluge
+ * @param magnet
+ * @param dlPath
+ * @param callback
+ */
+ add(magnet: string, dlPath: string | DownloadOptions, callback: (error: string, result: boolean, response: http.ServerResponse) => void): void;
+
+ /**
+ * Connect the WebUI to the wanted daemon
+ * @param hostID
+ * @param callback
+ */
+ connect(hostID: string, callback: (error: string, result: boolean, response: http.ServerResponse) => void): void;
+ /**
+ * Get the list of all the hosts that the WebUI can connect to
+ * @param callback
+ */
+ getHosts(callback: (error: string, result: Host[], response: http.ServerResponse) => void): void;
+ /**
+ * Get the list of all torrents and changing data that represents their status in the WebUI
+ * @param callback
+ */
+ getTorrentRecord(callback: (error: string, result: TorrentRecord, response: http.ServerResponse) => void): void;
+
+ /**
+ * Check if the WebUI is connected to a deamon. Return true or false as result of the callback.
+ * @param callback
+ */
+ isConnected(callback: (error: string, result: boolean, response: http.ServerResponse) => void): void;
+ /**
+ * Set cookies in COOKIE_JAR, cookies is an object with urls as keys, example:
+ * {'http://example.org/': 'uid=1234;pass=xxxx;'}
+ * @object cookies
+ */
+ setCookies(cookies: { [key: string]: string }, callback: (error: string, result: boolean, response: http.ServerResponse) => void): void;
+
+ }
+}
\ No newline at end of file
diff --git a/types/deluge/tsconfig.json b/types/deluge/tsconfig.json
new file mode 100644
index 0000000000..07694931b9
--- /dev/null
+++ b/types/deluge/tsconfig.json
@@ -0,0 +1,22 @@
+{
+ "compilerOptions": {
+ "module": "commonjs",
+ "lib": [
+ "es6"
+ ],
+ "noImplicitAny": true,
+ "noImplicitThis": true,
+ "strictNullChecks": true,
+ "baseUrl": "../",
+ "typeRoots": [
+ "../"
+ ],
+ "types": [],
+ "noEmit": true,
+ "forceConsistentCasingInFileNames": true
+ },
+ "files": [
+ "index.d.ts",
+ "deluge-tests.ts"
+ ]
+}
diff --git a/types/deluge/tslint.json b/types/deluge/tslint.json
new file mode 100644
index 0000000000..3db14f85ea
--- /dev/null
+++ b/types/deluge/tslint.json
@@ -0,0 +1 @@
+{ "extends": "dtslint/dt.json" }