diff --git a/gridstack/gridstack-tests.ts b/gridstack/gridstack-tests.ts
new file mode 100644
index 000000000..b3167ea5d
--- /dev/null
+++ b/gridstack/gridstack-tests.ts
@@ -0,0 +1,20 @@
+///
+///
+
+
+// Type definitions for Gridstack
+// Project: http://troolee.github.io/gridstack.js/
+// Definitions by: Pascal Senn
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+var options = {
+ float: true
+};
+var gridstack:GridStack = $(document).gridstack(options);
+
+gridstack.add_widget("test", 1, 2, 3, 4, true);
+gridstack.batch_update();
+gridstack.cell_height();;
+gridstack.cell_height(2);
+gridstack.cell_width();
+gridstack.get_cell_from_pixel({ left:20, top: 20 });
diff --git a/gridstack/gridstack.d.ts b/gridstack/gridstack.d.ts
new file mode 100644
index 000000000..4bb379483
--- /dev/null
+++ b/gridstack/gridstack.d.ts
@@ -0,0 +1,241 @@
+// Type definitions for Gridstack
+// Project: http://troolee.github.io/gridstack.js/
+// Definitions by: Pascal Senn
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+interface JQuery {
+ gridstack (options: IGridstackOptions):GridStack
+}
+
+interface GridStack {
+ /**
+ * Creates new widget and returns it.
+ *
+ * Widget will be always placed even if result height is more than actual grid height. You need to use will_it_fit method before calling add_widget for additional check.
+ *
+ * @param {string} el widget to add
+ * @param {number} x widget position x
+ * @param {number} y widget position y
+ * @param {number} width widget dimension width
+ * @param {number} height widget dimension height
+ * @param {boolean} auto_position if true then x, y parameters will be ignored and widget will be places on the first available position
+ */
+ add_widget(el: string, x: number, y: number, width: number, height: number, auto_position: boolean): JQuery
+ /**
+ * Initializes batch updates. You will see no changes until commit method is called.
+ */
+ batch_update():void
+ /**
+ * Gets current cell height.
+ */
+ cell_height():number
+ /**
+ * Update current cell height. This method rebuilds an internal CSS style sheet. Note: You can expect performance issues if call this method too often.
+ * @param {number} val the cell height
+ */
+ cell_height(val:number):void
+ /**
+ * Gets current cell width.
+ */
+ cell_width():number
+ /**
+ * Finishes batch updates. Updates DOM nodes. You must call it after batch_update.
+ */
+ commit():void
+ /**
+ * Destroys a grid instance.
+ */
+ destroy(): void
+ /*
+ * Disables widgets moving/resizing.
+ */
+ disable(): void
+ /*
+ * Enables widgets moving/resizing.
+ */
+ enable(): void
+ /*
+ * Get the position of the cell under a pixel on screen.
+ * @param {MousePosition} position the position of the pixel to resolve in absolute coordinates, as an object with top and leftproperties
+ */
+ get_cell_from_pixel(position: MousePosition): CellPosition,
+ /*
+ * Checks if specified area is empty.
+ * @param {number} x the position x.
+ * @param {number} y the position y.
+ * @param {number} width the width of to check
+ * @param {number} height the height of to check
+ */
+ is_area_empty(x: number, y: number, width: number, height: number): void
+ /*
+ * Locks/unlocks widget.
+ * @param {HTMLElement} el widget to modify.
+ * @param {boolean} val if true widget will be locked.
+ */
+ locked(el: HTMLElement, val: boolean): void
+ /*
+ * Set the minWidth for a widget.
+ * @param {HTMLElement} el widget to modify.
+ * @param {number} val A numeric value of the number of columns
+ */
+ min_width(el: HTMLElement, val: number): void
+ /*
+ * Set the minHeight for a widget.
+ * @param {HTMLElement} el widget to modify.
+ * @param {number} val A numeric value of the number of rows
+ */
+ min_height(el: HTMLElement, val: number): void
+ /*
+ * Enables/Disables moving.
+ * @param {HTMLElement} el widget to modify.
+ * @param {number} val if true widget will be draggable.
+ */
+ movable(el: HTMLElement, val: boolean): void
+ /**
+ * Changes widget position
+ * @param {HTMLElement} el widget to modify
+ * @param {number} x new position x. If value is null or undefined it will be ignored.
+ * @param {number} y new position y. If value is null or undefined it will be ignored.
+ *
+ */
+ move(el: HTMLElement, x: number, y: number): void
+ /**
+ * Removes widget from the grid.
+ * @param {HTMLElement} el widget to modify
+ * @param {boolean} detach_node if false DOM node won't be removed from the tree (Optional. Default true).
+ */
+ remove_widget(el: HTMLElement, detach_node?: boolean): void
+ /**
+ * Removes all widgets from the grid.
+ */
+ remove_all(): void
+ /**
+ * Changes widget size
+ * @param {HTMLElement} el widget to modify
+ * @param {number} width new dimensions width. If value is null or undefined it will be ignored.
+ * @param {number} height new dimensions height. If value is null or undefined it will be ignored.
+ */
+ resize(el: HTMLElement, width: number, height: number): void
+ /**
+ * Enables/Disables resizing.
+ * @param {HTMLElement} el widget to modify
+ * @param {boolean} val if true widget will be resizable.
+ */
+ resizable(el: HTMLElement, val: boolean): void
+ /**
+ * Toggle the grid static state. Also toggle the grid-stack-static class.
+ * @param {boolean} static_value if true the grid become static.
+ */
+ set_static(static_value: boolean): void
+ /**
+ * Updates widget position/size.
+ * @param {HTMLElement} el widget to modify
+ * @param {number} x new position x. If value is null or undefined it will be ignored.
+ * @param {number} y new position y. If value is null or undefined it will be ignored.
+ * @param {number} width new dimensions width. If value is null or undefined it will be ignored.
+ * @param {number} height new dimensions height. If value is null or undefined it will be ignored.
+ */
+ update(el: HTMLElement, x: number, y: number, width: number, height: number): void
+ /**
+ * Returns true if the height of the grid will be less the vertical constraint. Always returns true if grid doesn't have height constraint.
+ * @param {number} x new position x. If value is null or undefined it will be ignored.
+ * @param {number} y new position y. If value is null or undefined it will be ignored.
+ * @param {number} width new dimensions width. If value is null or undefined it will be ignored.
+ * @param {number} height new dimensions height. If value is null or undefined it will be ignored.
+ * @param {boolean} auto_position if true then x, y parameters will be ignored and widget will be places on the first available position
+ */
+ will_it_fit(x: number, y: number, width: number, height: number, auto_position:boolean):boolean
+
+
+}
+/**
+* Defines the coordiantes of a object
+*/
+interface MousePosition {
+ top: number,
+ left:number,
+}
+/**
+* Defines the position of a cell inside the grid
+*/
+interface CellPosition {
+ x: number,
+ y:number
+}
+declare module GridStackUI {
+ interface Utils {
+ /**
+ * Sorts array of nodes
+ *@param nodes array to sort
+ *@param dir 1 for asc, -1 for desc (optional)
+ *@param width width of the grid. If undefined the width will be calculated automatically (optional).
+ **/
+ sort(nodes: HTMLElement[], dir: number, width: number): void
+ }
+}
+/**
+* Gridstack Options
+* Defines the options for a Gridstack
+*/
+interface IGridstackOptions {
+ /**
+ * if true the resizing handles are shown even if the user is not hovering over the widget (default: false)
+ */
+ always_show_resize_handle: boolean;
+ /**
+ * turns animation on (default: true)
+ */
+ animate: boolean;
+ /**
+ * if false gridstack will not initialize existing items (default: true)
+ */
+ auto: boolean;
+ /**
+ * one cell height (default: 60)
+ */
+ cell_height: number;
+ /**
+ * allows to override jQuery UI draggable options. (default: { handle: '.grid-stack-item-content', scroll: true, appendTo: 'body' })
+ */
+ draggable: {};
+ /**
+ * draggable handle selector (default: '.grid-stack-item-content')
+ */
+ handle: string;
+ /**
+ * maximum rows amount.Default is 0 which means no maximum rows
+ */
+ height: number;
+ /**
+ * enable floating widgets (default: false) See example
+ */
+ float: boolean;
+ /**
+ * widget class (default: 'grid-stack-item')
+ */
+ item_class: string;
+ /**
+ * minimal width.If window width is less, grid will be shown in one - column mode (default: 768)
+ */
+ min_width: number;
+ /**
+ * class for placeholder (default: 'grid-stack-placeholder')
+ */
+ placeholder_class: string;
+ /**
+ * allows to override jQuery UI resizable options. (default: { autoHide: true, handles: 'se' })
+ */
+ resizable: {};
+ /**
+ * makes grid static (default false).If true widgets are not movable/ resizable.You don't even need jQueryUI draggable/resizable. A CSS class grid-stack-static is also added to the container.
+ */
+ static_grid: boolean;
+ /**
+ * vertical gap size (default: 20)
+ */
+ vertical_margin: number;
+ /**
+ * amount of columns (default: 12)
+ */
+ width: number;
+}