diff --git a/twix/twix-tests.ts b/twix/twix-tests.ts
new file mode 100644
index 000000000..bc0ef9ae1
--- /dev/null
+++ b/twix/twix-tests.ts
@@ -0,0 +1,225 @@
+///
+
+var someMoment = moment("20111031", "YYYYMMDD");
+var otherMoment = moment("20120620", "YYYYMMDD");
+var startTime = moment('20120701');
+var endTime = moment('20120801');
+
+someMoment.twix(otherMoment);
+someMoment.twix('2012-05-25');
+someMoment.twix({ year: 2012, month: 5, day: 25 });
+someMoment.twix("05/25/1982", "MM/DD/YYYY", { parseStrict: true });
+
+someMoment.twix(otherMoment, "MM/DD/YYYY", { parseStrict: true });
+
+var range = moment(someMoment).twix(otherMoment);
+var range2 = moment.twix(someMoment, otherMoment);
+var range3 = someMoment.twix(otherMoment);
+
+moment('1982-05-25').twix('1982-05-26', { allDay: true });
+
+moment('1982-05-25').twix('1982-05-26', true);
+
+moment().twix(moment()).isValid(); //=> true
+moment().twix(moment().add(1, "day")).isValid(); //=> true
+moment().twix(moment().subtract(1, "day")).isValid(); //=> false
+
+moment("1982-05-25T05:00").twix("1982-05-26T06:00").isSame("day"); //=> false
+moment("1982-05-25T05:00").twix("1982-05-25T06:00").isSame("day"); //=> true
+moment("1982-05-25T05:00").twix("1982-05-25T06:00").isSame("year"); //=> true
+
+moment("1982-05-25").twix("1982-05-26").isPast(); //=> true
+
+moment("2054-05-25").twix("2054-05-26").isFuture(); //=> true
+
+moment("2054-05-25").twix(moment().add(1, "hour")).isCurrent(); //=> true
+
+moment("1982-05-25").twix("1982-05-28").contains("1982-05-26"); //=> true
+
+moment("1982-05-25T5:30").twix("1982-05-25T6:30").length("hours") //=> 1
+moment("1982-05-25T5:00").twix("1982-05-30T6:00").length("days") //=> 6
+
+moment("1982-05-25T5:00").twix("1982-05-25T6:00").count("days") //=> 1
+moment("1982-05-25T5:00").twix("1982-05-26T6:00").count("days") //=> 2
+
+moment("1982-05-25T5:00").twix("1982-05-25T6:00").countInner("days") //=> 0
+moment("1982-05-24T5:00").twix("1982-05-26T6:00").countInner("days") //=> 1
+
+var iter = moment("1982-05-25T5:00").twix("1982-05-26T6:00").iterate("days");
+iter.hasNext(); //=> true
+iter.next(); //=> moment("1982-05-25")
+iter.next(); //=> moment("1982-05-26")
+iter.hasNext(); //=> false
+iter.next(); //=> null
+
+var iter = moment("16", "hh").twix("1982-05-26T6:00").iterate(2, 'hours');
+iter.next().format('LT'); //=> '4:00 PM'
+iter.next().format('LT'); //=> '6:00 PM'
+
+var duration = moment.duration({ hours: 2, minutes: 30, seconds: 20 });
+var iter = moment("16", "hh").twix(someMoment).iterate(duration);
+iter.next().format('LT'); //=> '4:00 PM'
+iter.next().format('LT'); //=> '6:30 PM'
+iter.next().format('LT'); //=> '9:00 PM'
+
+var iter2 = moment("1982-05-24T5:00").twix("1982-05-27T6:00").iterateInner("days");
+iter.hasNext(); //=> true
+iter.next(); //=> moment("1982-05-25")
+iter.next(); //=> moment("1982-05-26")
+iter.hasNext(); //=> false
+iter.next(); //=> null
+
+var range1 = moment("1982-05-25").twix("1982-05-30");
+var range2 = moment("1982-05-27").twix("1982-06-13");
+
+range1.overlaps(range2); //=> true
+
+var range1 = moment("1982-05-25").twix("1982-08-30");
+var range2 = moment("1982-05-27").twix("1982-06-13");
+
+range1.engulfs(range2); //=> true
+range2.engulfs(range1); //=> false
+
+var range1 = moment("1982-05-25").twix("1982-08-30");
+var range2 = moment("1982-05-25").twix("1982-08-30");
+
+range1.equals(range2); //=> true
+range2.equals(range1); //=> true
+
+var range1 = moment("1982-05-25").twix("1982-05-30");
+var range2 = moment("1982-05-27").twix("1982-06-13");
+
+range1.union(range2); //=> 5/25/82 - 6/13/1982
+
+var range1 = moment("1982-05-25").twix("1982-05-30");
+var range2 = moment("1982-05-27").twix("1982-06-13");
+
+range1.intersection(range2); //=> 5/27/82 - 5/30/1982
+
+var range1 = moment("1982-05-24").twix("1982-05-28", true);
+var range2 = moment("1982-05-22").twix("1982-05-26", true);
+var xorred = range1.xor(range2);
+
+xorred[0].format() //=> 'May 22 - 23, 1982'
+xorred[1].format() //=> 'May 27 - 28, 1982'
+
+var range1 = moment("1982-05-23").twix("1982-05-28", true);
+var range2 = moment("1982-05-25").twix("1982-05-26", true);
+var diff = range1.difference(range2);
+
+diff[0].format(); //=> 'May 23 - 24, 1982'
+diff[1].format(); //=> 'May 27 - 28, 1982'
+
+var range = moment("1982-05-25T05:01").twix("1982-05-25T07:30");
+
+var splits = range.split(1, "hour");
+splits[0].format({ showDate: false }); //=> '5:01 - 6:01 AM'
+splits[1].format({ showDate: false }); //=> '6:01 - 7:01 AM'
+splits[2].format({ showDate: false }); //=> '7:01 - 7:30 AM'
+
+//other signatures
+range.split(moment.duration({ "h": 1 })).length; //=> 3
+range.split(moment("1982-05-25T06:00")).length; //=> 2
+range.split(moment("1982-05-25T06:00"), moment("1982-05-25T07:00")).length; //=> 3
+
+var d = moment.duration(2, "days");
+var range4 = d.afterMoment("1982-05-25"); //=> 5/25/1982 - 5/27/1982
+
+var d = moment.duration(2, "days");
+d.beforeMoment("1982-05-25"); //=> 5/23/1982 - 5/25/1982
+
+var range = moment("1982-05-25").twix("1982-05-28");
+range.asDuration("days"); //=> duration object with {days: 3}
+
+var range = moment("1982-05-25T8:00").twix("1982-05-25T10:00");
+range.humanizeLength(); //=> "2 hours"
+
+range = moment("1982-05-25").twix("2013-01-01");
+range.humanizeLength(); //=> 31 years
+
+var range = moment("1982-05-25T9:00").twix("1982-05-25T12:00");
+
+range.simpleFormat(); //=> '1982-05-25T09:00:00-04:00 - 1982-05-25T12:00:00-04:00'
+
+range.simpleFormat("ddd, hA"); //=> 'Tue, 9AM - Tue, 12PM'
+
+var range = moment("1982-05-25").twix("1982-05-26", { allDay: true });
+
+range.simpleFormat(); //=> '1982-05-25T00:00:00-04:00 - 1982-05-26T00:00:00-04:00 (all day)'
+range.simpleFormat("YYYY - MM - DD"); //=> '1982-05-25 - 1982-05-26 (all day)'
+
+range.simpleFormat(null, { allDay: "-- all day! --" }); //=> '1982-05-25T00:00:00-04:00 - 1982-05-26T00:00:00-04:00 -- all day! --'
+
+range.simpleFormat(null, { allDay: null }); //=> '1982-05-25T00:00:00-04:00 - 1982-05-26T00:00:00-04:00'
+
+range.simpleFormat("HH:mm", { template: function (left, right) { return left + " | " + right; } }); //=> '16:21 | 17:21'
+
+moment.twixClass.formatTemplate = function (left, right) { return left + " | " + right; };
+range.simpleFormat("HH:mm"); //=> '16:29 | 17:29'
+
+moment("1982-01-25T09:00").twix("1982-01-25T11:00").format(); //=> 'Jan 25, 1982, 9 - 11 AM'
+moment("1982-01-25T9:00").twix("1982-01-26T13:00").format(); //=> 'Jan 25, 9 AM - Jan 26, 1 PM, 1982'
+
+moment("2012-01-25").twix("2012-01-25", { allDay: true }).format(); //=> Jan 25
+moment("1982-01-25").twix("1982-01-25", { allDay: true }).format(); //=> Jan 25, 1982
+moment("2012-01-25").twix("2012-01-26", { allDay: true }).format(); //=> Jan 25 - 26
+moment("1982-01-25").twix("1982-02-25", { allDay: true }).format(); //=> Jan 25 - Feb 25, 1982
+moment("1982-01-25").twix(new Date(), { allDay: true }).format(); //=> Jan 25, 1982 - Jan 9, 2012
+
+moment("1982-01-25T9:30").twix("1/25/1982 1:30 PM").format(); //=> Jan 25, 1982, 9:30 AM - 1:30 PM
+moment("1982-01-25T9:30").twix(new Date()).format(); //=> Jan 25, 1982, 9:30 AM - Jan 9, 2012, 3:05 AM
+moment("1982-01-25").twix("1982-01-27").format(); //=> Jan 25, 12 AM - Jan 27, 12 AM, 1982
+
+var twix = moment("2012-05-25T9:00").twix("2012-05-25T10:00");
+
+twix.format(); //=> May 25, 9 - 10 AM
+twix.format({ implicitMinutes: false, groupMeridiems: false }); //=> May 25, 9:00 AM - 10:00 AM
+
+var twix = moment().twix(moment().add('days', 1));
+twix.format({ implicitYear: false }); //=> Mar 28, 1:13 AM - Mar 29, 1:13 AM, 2013
+
+moment("2012-05-25T16:00").twix("2012-05-25T17:00").format({ twentyFourHour: true }); //=> May 25, 16:00 - 17:00
+
+moment("2012-01-25T8:00").twix("2012-01-25T17:00").format({
+ monthFormat: "MMMM",
+ dayFormat: "Do"
+});
+
+moment("2012-05-25T8:00").twix("2012-05-25T17:00").format({ spaceBeforeMeridiem: false }); //=> May 25, 8AM - 5PM
+
+moment("2012-05-25T8:00").twix("2012-05-25T17:00").format({ showDate: false }); //=> 8 AM - 5 PM
+
+moment("2012-01-25").twix("2012-01-25", { allDay: true }).format({ showDate: false }); //=> All day
+
+moment.lang("fr");
+moment().twix(moment().add(3, "month")).simpleFormat("MMMM"); //=> 'juillet - octobre'
+
+moment("1982-05-25").twix(moment("1982-05-27")).format(); //=> '25 mai, 0:00 - 27 mai, 0:00, 1982'
+
+moment("1982-05-25").twix(moment("1982-05-27")).format({
+ groupMeridiems: true,
+ spaceBeforeMeridiem: true,
+ showDate: true,
+ showDayOfWeek: false,
+ twentyFourHour: false,
+ implicitMinutes: true,
+ implicitYear: true,
+ yearFormat: "YYYY",
+ monthFormat: "MMM",
+ weekdayFormat: "ddd",
+ dayFormat: "D",
+ meridiemFormat: "A",
+ hourFormat: "h",
+ minuteFormat: "mm",
+ allDay: "all day",
+ explicitAllDay: false,
+ lastNightEndsAt: 0
+}); //=> '25 mai, 0:00 - 27 mai, 0:00, 1982'
+
+var t = moment("1982-01-25T09:30").twix("1982-01-25T13:30");
+
+t.format(); //=> Jan 25, 1982, 9:30 AM - 1:30 PM
+
+t.isSame("day"); //=> true
+t.humanizeLength(); //=> "4 hours"
+t.count("days"); //=> 1
\ No newline at end of file
diff --git a/twix/twix.d.ts b/twix/twix.d.ts
new file mode 100644
index 000000000..e82df73be
--- /dev/null
+++ b/twix/twix.d.ts
@@ -0,0 +1,134 @@
+// Type definitions for twix.js 0.6.3
+// Project: https://github.com/icambron/twix.js
+// Definitions by: j3ko
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+declare module moment {
+ interface Moment {
+ twix(date: Date): Twix;
+ twix(date: Date, allDay: boolean): Twix;
+ twix(date: Date, options: TwixFormatOptions): Twix;
+ twix(date: Date, format: string, options: TwixFormatOptions): Twix;
+
+ twix(date: Moment): Twix;
+ twix(date: Moment, allDay: boolean): Twix;
+ twix(date: Moment, options: TwixFormatOptions): Twix;
+ twix(date: Moment, format: string, options: TwixFormatOptions): Twix;
+
+ twix(date: MomentInput): Twix;
+ twix(date: MomentInput, allDay: boolean): Twix;
+ twix(date: MomentInput, options: TwixFormatOptions): Twix;
+ twix(date: MomentInput, format: string, options: TwixFormatOptions): Twix;
+
+ twix(date: number): Twix;
+ twix(date: number, allDay: boolean): Twix;
+ twix(date: number, options: TwixFormatOptions): Twix;
+ twix(date: number, format: string, options: TwixFormatOptions): Twix;
+
+ twix(date: number[]): Twix;
+ twix(date: number[], allDay: boolean): Twix;
+ twix(date: number[], options: TwixFormatOptions): Twix;
+ twix(date: number[], format: string, options: TwixFormatOptions): Twix;
+
+ twix(date: string): Twix;
+ twix(date: string, allDay: boolean): Twix;
+ twix(date: string, options: TwixFormatOptions): Twix;
+ twix(date: string, format: string, options: TwixFormatOptions): Twix;
+ }
+
+ interface MomentStatic {
+ twix(start: Moment, end: Moment): Twix;
+ twixClass: TwixStatic;
+ }
+
+ interface TwixFormatOptions {
+ groupMeridiems?: boolean;
+ spaceBeforeMeridiem?: boolean;
+ showDate?: boolean;
+ showDayOfWeek?: boolean;
+ twentyFourHour?: boolean;
+ implicitMinutes?: boolean;
+ implicitYear?: boolean;
+ yearFormat?: string;
+ monthFormat?: string;
+ weekdayFormat?: string;
+ dayFormat?: string;
+ meridiemFormat?: string;
+ hourFormat?: string;
+ minuteFormat?: string;
+ allDay?: any; // boolean | string
+ explicitAllDay?: boolean;
+ lastNightEndsAt?: number;
+ }
+
+ interface TwixSimpleFormatOptions {
+ allDay?: string;
+ template?: (left: any, right: any) => any;
+ }
+
+ interface TwixIter {
+ hasNext(): boolean;
+ next(): Twix;
+ }
+
+ interface Duration {
+ afterMoment(date: string): string;
+ beforeMoment(date: string): string;
+ }
+
+ interface Twix {
+ isPast(): boolean;
+ isFuture(): boolean;
+ isCurrent(): boolean;
+ isSame(period: string): boolean;
+ contains(date: string): boolean;
+ contains(date: Date): boolean;
+ contains(date: Moment): boolean;
+ length(period: string): number;
+ count(period: string): number;
+ countInner(period: string): number;
+
+ iterate(period: string): TwixIter;
+ iterate(num: number, period: string): TwixIter;
+ iterate(duration: Duration): TwixIter;
+
+ iterateInner(period: string): TwixIter;
+ iterateInner(num: number, period: string): TwixIter;
+
+ overlaps(other: Twix): boolean;
+ engulfs(other: Twix): boolean;
+ equals(other: Twix): boolean;
+ union(other: Twix): string;
+ intersection(other: Twix): string;
+
+ xor(other: Twix): Twix[];
+ difference(other: Twix): Twix[];
+ split(num: number, period: string): Twix[];
+ split(other: Moment): Twix[];
+ split(start: Moment, end: Moment): Twix[];
+ split(duration: Duration): Twix[];
+
+ humanizeLength(): string;
+ simpleFormat(): string;
+ simpleFormat(format: string): string;
+ simpleFormat(format: string, options: TwixSimpleFormatOptions): string;
+
+ format(): string;
+ format(options: TwixFormatOptions): string;
+
+ asDuration(period: string): Duration;
+ isValid(): boolean;
+ }
+
+ interface TwixStatic {
+ formatTemplate?: (left: any, right: any) => any;
+ }
+}
+
+declare module 'twix' {
+ var _tmp: moment.MomentStatic;
+
+ export = _tmp;
+}
\ No newline at end of file