diff --git a/geometry/geometry-tests.ts b/geometry/geometry-tests.ts
new file mode 100644
index 000000000..6e05d380a
--- /dev/null
+++ b/geometry/geometry-tests.ts
@@ -0,0 +1,25 @@
+///
+
+var point = new DOMPoint(5, 4);
+var matrix = new DOMMatrix(2, 0, 0, 2, 10, 10);
+var transformedPoint = point.matrixTransform(matrix);
+
+var point = new DOMPoint(2, 0);
+var quad1 = new DOMQuad(point, {x: 12, y: 0}, {x: 2, y: 10}, {x: 12, y: 10});
+
+var rect = new DOMRect(2, 0, 10, 10);
+var quad2 = new DOMQuad(rect);
+
+new DOMQuad({x: 40, y: 25}, {x: 180, y: 8}, {x: 210, y: 150}, {x: 10, y: 180});
+
+var matrix = new DOMMatrix();
+matrix.scaleSelf(2);
+matrix.translateSelf(20,20);
+
+var matrix = new DOMMatrix();
+matrix.translateSelf(20, 20);
+matrix.scaleSelf(2);
+matrix.translateSelf(-20, -20);
+
+var matrix = new DOMMatrix();
+matrix.translateSelf(20, 20).scaleSelf(2).translateSelf(-20, -20);
diff --git a/geometry/geometry.d.ts b/geometry/geometry.d.ts
new file mode 100644
index 000000000..f0a8c3ba5
--- /dev/null
+++ b/geometry/geometry.d.ts
@@ -0,0 +1,326 @@
+// Type definitions for Geometry Format Specification
+// Project: http://www.w3.org/TR/geometry-1/
+// Definitions by: Toshiya Nakakura
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare module Geometry {
+ export interface DOMPointReadOnly {
+ /**
+ * x coordinate / readonly
+ */
+ x: number;
+ /**
+ * y coordinate / readonly
+ */
+ y: number;
+ /**
+ * z coordinate / readonly
+ */
+ z: number;
+ /**
+ * w coordinate / readonly
+ */
+ w: number;
+
+ /**
+ * Post-multiply point with matrix.
+ * @param matrix
+ */
+ matrixTransform(matrix:DOMMatrixReadOnly): DOMPoint;
+ }
+
+ interface DOMPoint extends DOMPointReadOnly {
+ /**
+ * x coordinate
+ */
+ x: number;
+ /**
+ * y coordinate
+ */
+ y: number;
+ /**
+ * z coordinate
+ */
+ z: number;
+ /**
+ * w coordinate
+ */
+ w: number;
+ }
+
+ interface DOMRect extends DOMRectReadOnly {
+ /**
+ * x coordinate
+ */
+ x: number;
+ /**
+ * y coordinate
+ */
+ y: number;
+ /**
+ * width value
+ */
+ width: number;
+ /**
+ * height value
+ */
+ height: number;
+ }
+
+ interface DOMRectReadOnly {
+ /**
+ * x coordinate
+ */
+ x: number;
+ /**
+ * y coordinate
+ */
+ y: number;
+ /**
+ * width value
+ */
+ width: number;
+ /**
+ * height value
+ */
+ height: number;
+ /**
+ * min(y coordinate, y coordinate + height dimension)
+ */
+ top: number;
+ /**
+ * max(x coordinate, x coordinate + width dimension)
+ */
+ right: number;
+ /**
+ * max(y coordinate, y coordinate + height dimension)
+ */
+ bottom: number;
+ /**
+ * min(x coordinate, x coordinate + width dimension)
+ */
+ left: number;
+ }
+
+ interface DOMRectList {
+ /**
+ * total number of DOMRect objects associated with the object.
+ * readonly unsigned long length
+ */
+ length: number;
+ /**
+ * the DOMRect object at index must be returned.
+ * @param index
+ */
+ item(index: number): DOMRect;
+ }
+
+ interface DOMQuad {
+ /**
+ * a DOMPoint that represents p1 of the quadrilateral
+ */
+ p1: DOMPoint;
+ /**
+ * a DOMPoint that represents p2 of the quadrilateral
+ */
+ p2: DOMPoint;
+ /**
+ * a DOMPoint that represents p3 of the quadrilateral
+ */
+ p3: DOMPoint;
+ /**
+ * a DOMPoint that represents p4 of the quadrilateral
+ */
+ p4: DOMPoint;
+ /**
+ * the associated bounding rectangle of the quadrilateral
+ */
+ bounds: DOMRectReadOnly;
+ }
+
+ interface DOMMatrixReadOnly {
+ /**
+ * These attributes are simple aliases for certain elements of the 4x4 matrix
+ */
+ a: number;
+ b: number;
+ c: number;
+ d: number;
+ e: number;
+ f: number;
+
+ m11: number;
+ m12: number;
+ m13: number;
+ m14: number;
+ m21: number;
+ m22: number;
+ m23: number;
+ m24: number;
+ m31: number;
+ m32: number;
+ m33: number;
+ m34: number;
+ m41: number;
+ m42: number;
+ m43: number;
+ m44: number;
+
+ is2D: boolean;
+ isIdentity: boolean;
+
+ translate(tx: number, ty: number, tz?: number): DOMMatrix;
+ scale(scale: number, originX?: number, originY?: number): DOMMatrix;
+ scale3d(scale: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;
+ scaleNonUniform(scale: number, scaleX: number, scaleY: number, scaleZ: number, originX: number, originY: number, originZ: number): DOMMatrix;
+ rotate(angle: number, originX?: number, originY?: number): DOMMatrix;
+ rotateFromVector(x: number, y: number): DOMMatrix;
+ rotateAxisAngle(x: number, y: number, z: number, angle: number): DOMMatrix;
+ skewX(sx: number): DOMMatrix;
+ skewY(sx: number): DOMMatrix;
+
+ multiply(other: DOMMatrix): DOMMatrix;
+ flipX(): DOMMatrix;
+ flipY(): DOMMatrix;
+ inverse(): DOMMatrix;
+
+ transformPoint(point?: DOMPointInit): DOMPoint;
+
+ toFloat32Array(): Array;
+ toFloat64Array(): Array;
+ }
+
+ interface DOMMatrix extends DOMMatrixReadOnly {
+ a: number;
+ b: number;
+ c: number;
+ d: number;
+ e: number;
+ f: number;
+
+ m11: number;
+ m12: number;
+ m13: number;
+ m14: number;
+ m21: number;
+ m22: number;
+ m23: number;
+ m24: number;
+ m31: number;
+ m32: number;
+ m33: number;
+ m34: number;
+ m41: number;
+ m42: number;
+ m43: number;
+ m44: number;
+
+
+ multiplySelf(other: DOMMatrix): DOMMatrix;
+ preMultiplySelf(other: DOMMatrix): DOMMatrix;
+ translateSelf(tx: number, ty: number, tz?: number): DOMMatrix;
+ scaleSelf(scale: number, originX?: number, originY?: number): DOMMatrix;
+ scale3dSelf(scale: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;
+ scaleNonUniformSelf(scaleX: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;
+ rotateSelf(angle: number, originX?: number, originY?: number): DOMMatrix;
+ rotateFromVectorSelf(x: number, y: number): DOMMatrix;
+ rotateAxisAngleSelf(x: number, y: number, z: number, angle: number): DOMMatrix;
+
+ skewXSelf(sx: number): DOMMatrix;
+ skewYSelf(sy: number): DOMMatrix;
+ invertSelf(): DOMMatrix;
+ setMatrixValue(transformList: DOMMatrix): DOMMatrix;
+ }
+}
+
+declare var DOMPointReadOnly: {
+ prototype: Geometry.DOMPointReadOnly;
+ new (x: number, y: number, z: number, w: number): Geometry.DOMPointReadOnly;
+};
+
+declare var DOMPoint: {
+ prototype: Geometry.DOMPoint;
+ new (x?:number, y?:number, z?:number, w?:number): Geometry.DOMPoint;
+};
+
+interface DOMPointInit {
+ /**
+ * x coordinate: 0
+ */
+ x: number;
+ /**
+ * y coordinate: 0
+ */
+ y: number;
+ /**
+ * z coordinate: 0
+ */
+ z?: number;
+ /**
+ * w coordinate: 1
+ */
+ w?: number;
+}
+
+declare var DOMRect: {
+ prototype: Geometry.DOMRect;
+ new (x: number, y: number, width: number, height: number): Geometry.DOMRect;
+};
+
+declare var DOMRectReadOnly: {
+ prototype: Geometry.DOMRectReadOnly;
+ new (x: number, y: number, width: number, height: number): Geometry.DOMRectReadOnly;
+};
+
+interface DOMRectInit {
+ /**
+ * x coordinate
+ */
+ x: number;
+ /**
+ * y coordinate
+ */
+ y: number;
+ /**
+ * width value
+ */
+ width: number;
+ /**
+ * height value
+ */
+ height: number;
+}
+
+interface DOMRectList {
+ /**
+ * total number of DOMRect objects associated with the object.
+ * readonly unsigned long length
+ */
+ length: number;
+ /**
+ * the DOMRect object at index must be returned.
+ * @param index
+ */
+ item(index: number): Geometry.DOMRect;
+}
+
+declare var DOMQuad: {
+ prototype: Geometry.DOMQuad;
+ new (rect?: DOMRectInit): Geometry.DOMQuad;
+ new (p1?: DOMPointInit, p2?: DOMPointInit, p3?: DOMPointInit, p4?: DOMPointInit): Geometry.DOMQuad;
+};
+
+declare var DOMMatrixReadOnly: {
+ prototype: Geometry.DOMMatrixReadOnly;
+ new (numberSequence: Array): Geometry.DOMMatrixReadOnly;
+};
+
+declare var DOMMatrix: {
+ prototype: Geometry.DOMMatrix;
+ new (): Geometry.DOMMatrix;
+ new (transformList: string): Geometry.DOMMatrix;
+ new (other: Geometry.DOMMatrixReadOnly): Geometry.DOMMatrix;
+ new (array: Array): Geometry.DOMMatrix;
+ new (a: number, b: number, c: number, d: number, e: number, f: number): Geometry.DOMMatrix;
+};
+
diff --git a/npm-debug.log b/npm-debug.log
new file mode 100644
index 000000000..080c94e86
--- /dev/null
+++ b/npm-debug.log
@@ -0,0 +1,36 @@
+0 info it worked if it ends with ok
+1 verbose cli [ 'node', '/usr/local/bin/npm', 'run', 'all' ]
+2 info using npm@2.7.5
+3 info using node@v0.12.2
+4 verbose node symlink /usr/local/bin/node
+5 verbose run-script [ 'preall', 'all', 'postall' ]
+6 info preall DefinitelyTyped@0.0.1
+7 info all DefinitelyTyped@0.0.1
+8 verbose unsafe-perm in lifecycle true
+9 info DefinitelyTyped@0.0.1 Failed to exec all script
+10 verbose stack Error: DefinitelyTyped@0.0.1 all: `dt`
+10 verbose stack Exit status 1
+10 verbose stack at EventEmitter. (/usr/local/lib/node_modules/npm/lib/utils/lifecycle.js:213:16)
+10 verbose stack at EventEmitter.emit (events.js:110:17)
+10 verbose stack at ChildProcess. (/usr/local/lib/node_modules/npm/lib/utils/spawn.js:14:12)
+10 verbose stack at ChildProcess.emit (events.js:110:17)
+10 verbose stack at maybeClose (child_process.js:1015:16)
+10 verbose stack at Process.ChildProcess._handle.onexit (child_process.js:1087:5)
+11 verbose pkgid DefinitelyTyped@0.0.1
+12 verbose cwd /Volumes/user/Users/nakakura/Desktop/DefinitelyTyped
+13 error Darwin 14.3.0
+14 error argv "node" "/usr/local/bin/npm" "run" "all"
+15 error node v0.12.2
+16 error npm v2.7.5
+17 error code ELIFECYCLE
+18 error DefinitelyTyped@0.0.1 all: `dt`
+18 error Exit status 1
+19 error Failed at the DefinitelyTyped@0.0.1 all script 'dt'.
+19 error This is most likely a problem with the DefinitelyTyped package,
+19 error not with npm itself.
+19 error Tell the author that this fails on your system:
+19 error dt
+19 error You can get their info via:
+19 error npm owner ls DefinitelyTyped
+19 error There is likely additional logging output above.
+20 verbose exit [ 1, true ]