diff --git a/jug/jug-tests.ts b/jug/jug-tests.ts
new file mode 100644
index 000000000..7353428e0
--- /dev/null
+++ b/jug/jug-tests.ts
@@ -0,0 +1,121 @@
+///
+import jug = require('jug');
+
+/*
+Example 1.
+ */
+var root = jug.init();
+
+root
+ .seed()
+ .seed();
+
+root.data({
+ interest: {
+ genre: 'Action',
+ year: 2014,
+ stars: [ 'Eva Green', 'Duck Dogers' ]
+ }
+});
+
+root.edge( 0 ).data({
+ info: {
+ name: '300: Rise of an Empire',
+ genre: 'Action',
+ stars: [ 'Eva Green', 'Duck Dogers' ],
+ year: 2014
+ }
+});
+
+root.edge( 1 ).data({
+ info: {
+ name: 'Man of Steel',
+ genre: 'Action',
+ stars: [ 'Henry Cavill' ],
+ year: 2013
+ }
+});
+
+root.edge(1).seed({
+ test: {
+ some: 'value'
+ }
+});
+
+var distance = root.proximity('interest', 'info');
+var close = distance.indexOf( 0 );
+var nodeData = root.edge( close ).data();
+
+/*
+Example 2.
+ */
+var wire = jug.init({
+ interest: {
+ cloth: 't-shirt',
+ color: 'red',
+ size: 'medium'
+ }
+});
+
+/*
+ Seed node
+ */
+wire.seed();
+
+/*
+ Seed node with data.
+ */
+wire.seed({
+ info: {
+ cloth: 't-shirt',
+ color: 'red',
+ size: 'medium'
+ }
+});
+
+/*
+ Access node.
+ */
+wire.edge(0);
+
+/*
+ Get distance between nodes
+ */
+// first argument is 'from' object
+// second argument is 'to' object
+root.proximity('interest', 'info');
+
+/*
+ Find a node.
+ */
+wire.find('info', { color: 'red' });
+
+/*
+ Verify the level.
+ */
+wire.edge(0).level();
+
+/*
+ Verify if the current node is the root
+ */
+wire.isRoot();
+
+/*
+ Getting childs of an specified edge
+ */
+wire.getChildsOf(0);
+
+/*
+ Getting parents of an specified level and edge.
+ */
+wire.getParentsFrom(1, 0);
+
+/*
+ Getting the length of childs of an specified edge.
+ */
+wire.getScopeOf(0);
+
+/*
+ Getting siblings of current level, excluding the index indicated.
+ */
+wire.getSiblingsOf(1);
diff --git a/jug/jug.d.ts b/jug/jug.d.ts
new file mode 100644
index 000000000..820700b8c
--- /dev/null
+++ b/jug/jug.d.ts
@@ -0,0 +1,135 @@
+// Type definitions for jug
+// Project: https://github.com/kaiquewdev/Graph
+// Definitions by: yevt
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare module "jug" {
+ /**
+ * Internal structure of a vertex
+ */
+ interface VertexStructure {
+ level: number;
+ edge: Array,
+ data: VertexData,
+ parent: Vertex
+ }
+
+ /**
+ * User data of a vertex.
+ */
+ type VertexData = Object;
+
+ /**
+ * Graph constructor function.
+ */
+ interface GraphConstructor {
+ new():Graph;
+ }
+
+ /**
+ * Creates root node of a graph.
+ */
+ interface Graph {
+ vertex:VertexConstructor;
+ init(data?:VertexData):Vertex;
+ }
+
+ /**
+ * Vertex constructor function.
+ */
+ interface VertexConstructor {
+ new(obj?:VertexData):Vertex;
+ }
+
+ /**
+ * Represents one node of a graph.
+ */
+ interface Vertex {
+
+ /**
+ * Initial vertex data.
+ */
+ internal: VertexStructure;
+
+ /**
+ * Verify the level.
+ */
+ level(): number;
+
+ /**
+ * Get edge count.
+ */
+ edge(): number;
+
+ /**
+ * Access node.
+ * @param index - edge index.
+ */
+ edge(index:number): Vertex;
+
+ /**
+ * Seed node.
+ * @param [data] - created vertex UserData.
+ */
+ seed(data?:VertexData): Vertex;
+
+ /**
+ * Verify if the current node is the root.
+ */
+ isRoot(): boolean
+
+ /**
+ * Set node data.
+ * @param obj - data to be set.
+ */
+ data(obj:VertexData): Vertex;
+
+ /**
+ * Get node data.
+ */
+ data(): VertexData
+
+ /**
+ * Get distance between nodes.
+ * @param from {string}
+ * @param to {string}
+ */
+ proximity(from, to): Array;
+
+ /**
+ * Find a node.
+ * @param {string} type - object type.
+ * @param {Object} query - _.where query object.
+ */
+ find(type:string|void, query:Object): Array;
+
+ /**
+ * Get siblings of specified edge.
+ * @param {number} index - edge index.
+ */
+ getSiblingsOf(index:number): Array;
+
+ /**
+ * Getting childs of an specified edge.
+ * @param egde - target vertex;
+ */
+ getChildsOf(egde:number): Array
+
+ /**
+ * Getting parents of an specified level and edge.
+ * @param {number} level - max level.
+ * @param {number} edge - edge index.
+ */
+ getParentsFrom(level:number, edge:number): Array
+
+ /**
+ * Getting the length of childs of an specified edge.
+ * @param {number} edge - edge index.
+ */
+ getScopeOf(edge:number): number;
+ }
+
+ var jug:Graph;
+
+ export = jug;
+}