diff --git a/geometry-dom/geometry-dom-tests.ts b/geometry-dom/geometry-dom-tests.ts
new file mode 100644
index 000000000..e29366511
--- /dev/null
+++ b/geometry-dom/geometry-dom-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-dom/geometry-dom.d.ts b/geometry-dom/geometry-dom.d.ts
new file mode 100644
index 000000000..9058bf87d
--- /dev/null
+++ b/geometry-dom/geometry-dom.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 GeometryDom {
+ 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: GeometryDom.DOMPointReadOnly;
+ new (x: number, y: number, z: number, w: number): GeometryDom.DOMPointReadOnly;
+};
+
+declare var DOMPoint: {
+ prototype: GeometryDom.DOMPoint;
+ new (x?:number, y?:number, z?:number, w?:number): GeometryDom.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: GeometryDom.DOMRect;
+ new (x: number, y: number, width: number, height: number): GeometryDom.DOMRect;
+};
+
+declare var DOMRectReadOnly: {
+ prototype: GeometryDom.DOMRectReadOnly;
+ new (x: number, y: number, width: number, height: number): GeometryDom.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): GeometryDom.DOMRect;
+}
+
+declare var DOMQuad: {
+ prototype: GeometryDom.DOMQuad;
+ new (rect?: DOMRectInit): GeometryDom.DOMQuad;
+ new (p1?: DOMPointInit, p2?: DOMPointInit, p3?: DOMPointInit, p4?: DOMPointInit): GeometryDom.DOMQuad;
+};
+
+declare var DOMMatrixReadOnly: {
+ prototype: GeometryDom.DOMMatrixReadOnly;
+ new (numberSequence: Array): GeometryDom.DOMMatrixReadOnly;
+};
+
+declare var DOMMatrix: {
+ prototype: GeometryDom.DOMMatrix;
+ new (): GeometryDom.DOMMatrix;
+ new (transformList: string): GeometryDom.DOMMatrix;
+ new (other: GeometryDom.DOMMatrixReadOnly): GeometryDom.DOMMatrix;
+ new (array: Array): GeometryDom.DOMMatrix;
+ new (a: number, b: number, c: number, d: number, e: number, f: number): GeometryDom.DOMMatrix;
+};
+