diff --git a/electron-window-state/electron-window-state-tests.ts b/electron-window-state/electron-window-state-tests.ts
new file mode 100644
index 0000000000..2d1dfbfe72
--- /dev/null
+++ b/electron-window-state/electron-window-state-tests.ts
@@ -0,0 +1,35 @@
+///
+
+import {app, BrowserWindow} from 'electron';
+import windowStateKeeper = require('electron-window-state');
+
+let win: Electron.BrowserWindow = null;
+
+app.on('ready', function () {
+ const mainWindowState = windowStateKeeper({
+ defaultWidth: 1000,
+ defaultHeight: 800
+ });
+
+ win = new BrowserWindow({
+ 'x': mainWindowState.x,
+ 'y': mainWindowState.y,
+ 'width': mainWindowState.width,
+ 'height': mainWindowState.height,
+ });
+
+ mainWindowState.manage(win);
+});
+
+const s2 = windowStateKeeper({
+ defaultWidth: 1000,
+ defaultHeight: 800,
+ file: __dirname + '/foo.json',
+ path: __dirname,
+ maximize: true,
+ fullScreen: false,
+});
+
+console.log(s2.isMaximized, s2.isFullScreen);
+
+s2.saveState(win);
diff --git a/electron-window-state/electron-window-state.d.ts b/electron-window-state/electron-window-state.d.ts
new file mode 100644
index 0000000000..dfcb297e4f
--- /dev/null
+++ b/electron-window-state/electron-window-state.d.ts
@@ -0,0 +1,90 @@
+// Type definitions for electron-window-state 2.0.0
+// Project: https://github.com/mawie81/electron-window-state
+// Definitions by: rhysd
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+///
+
+declare namespace ElectronWindowState {
+ interface WindowState {
+ /*
+ * The saved x coordinate of the loaded state.
+ * undefined if the state has not been saved yet.
+ */
+ x: number;
+ /*
+ * The saved y coordinate of the loaded state.
+ * undefined if the state has not been saved yet.
+ */
+ y: number;
+ /*
+ * The saved width of loaded state.
+ * defaultWidth if the state has not been saved yet.
+ */
+ width: number;
+ /*
+ * The saved heigth of loaded state.
+ * defaultHeight if the state has not been saved yet.
+ */
+ height: number;
+ /*
+ * true if the window state was saved while the the window was maximized.
+ * undefined if the state has not been saved yet.
+ */
+ isMaximized: boolean;
+ /*
+ * true if the window state was saved while the the window was in full screen
+ * mode. undefined if the state has not been saved yet.
+ */
+ isFullScreen: boolean;
+ /*
+ * Register listeners on the given BrowserWindow for events that are related
+ * to size or position changes (resize, move).
+ * It will also restore the window's maximized or full screen state.
+ * When the window is closed we automatically remove the listeners and save the state.
+ */
+ manage(win: Electron.BrowserWindow): void;
+ /*
+ * Saves the current state of the given BrowserWindow.
+ * This exists mostly for legacy purposes, and in most cases it's better to just use manage.
+ */
+ saveState(win: Electron.BrowserWindow): void;
+ }
+ interface WindowStateKeeperOptions {
+ /*
+ * The width that should be returned if no file exists yet. Defaults to 800.
+ */
+ defaultWidth?: number;
+ /*
+ * The height that should be returned if no file exists yet. Defaults to 600.
+ */
+ defaultHeight?: number;
+ /*
+ * The path where the state file should be written to.
+ * Defaults to app.getPath('userData')
+ */
+ path?: string;
+ /*
+ * The name of file. Defaults to window-state.json
+ */
+ file?: string;
+ /*
+ * Should we automatically maximize the window,
+ * if it was last closed maximized. Defaults to true
+ */
+ maximize?: boolean;
+ /*
+ * Should we automatically restore the window to full screen,
+ * if it was last closed full screen. Defaults to true
+ */
+ fullScreen?: boolean;
+ }
+}
+
+declare module 'electron-window-state' {
+ /*
+ * Load the previous state with fallback to defaults
+ */
+ function windowStateKeeper(opts: ElectronWindowState.WindowStateKeeperOptions): ElectronWindowState.WindowState;
+ export = windowStateKeeper;
+}