diff --git a/tracking/tracking-tests.ts b/tracking/tracking-tests.ts
new file mode 100644
index 000000000..e1fdd8560
--- /dev/null
+++ b/tracking/tracking-tests.ts
@@ -0,0 +1,55 @@
+///
+
+// All tracking tests below are code taken verbatim (or, as close as possible) from the tracking docs: https://trackingjs.com/docs.html
+
+var colors = new tracking.ColorTracker(['magenta', 'cyan', 'yellow']);
+
+colors.on('track', function(event) {
+ if (event.data.length === 0) {
+ // No colors were detected in this frame.
+ } else {
+ event.data.forEach(function(rect) {
+ console.log(rect.x, rect.y, rect.height, rect.width, rect.color);
+ });
+ }
+});
+
+tracking.track('#myVideo', colors);
+
+var myTracker = new tracking.Tracker('target');
+
+myTracker.on('track', function(event) {
+ if (event.data.length === 0) {
+ // No targets were detected in this frame.
+ } else {
+ event.data.forEach(function(data) {
+ // Plots the detected targets here.
+ });
+ }
+});
+
+var trackerTask = tracking.track('#myVideo', myTracker);
+
+trackerTask.stop(); // Stops the tracking
+trackerTask.run(); // Runs it again anytime
+
+tracking.ColorTracker.registerColor('green', function(r, g, b) {
+ if (r < 50 && g > 200 && b < 50) {
+ return true;
+ }
+ return false;
+});
+
+var objects = new tracking.ObjectTracker(['face', 'eye', 'mouth']);
+
+objects.on('track', function(event) {
+ if (event.data.length === 0) {
+ // No objects were detected in this frame.
+ } else {
+ event.data.forEach(function(rect) {
+ // rect.x, rect.y, rect.height, rect.width
+ });
+ }
+});
+
+tracking.track('#myVideo', objects);
diff --git a/tracking/tracking.d.ts b/tracking/tracking.d.ts
new file mode 100644
index 000000000..cf8b228e3
--- /dev/null
+++ b/tracking/tracking.d.ts
@@ -0,0 +1,40 @@
+// Type definitions for Tracking.js v1.1.2
+// Project: https://github.com/eduardolundgren/tracking.js
+// Definitions by: Tim Perry
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare module tracking {
+ export class ColorTracker extends Tracker {
+ constructor(colours: string[]);
+
+ static registerColor(name: string, predicate: (r: number, g: number, b: number) => boolean): void;
+ }
+
+ export class ObjectTracker extends Tracker {
+ constructor(objects: string[]);
+ }
+
+ class Tracker {
+ constructor(target: string);
+ on(eventName: string, callback: (event: TrackEvent) => void): void;
+ }
+
+ interface TrackEvent {
+ data: TrackRect[];
+ }
+
+ interface TrackRect {
+ x: number;
+ y: number;
+ height: number;
+ width: number;
+ color: string;
+ }
+
+ interface TrackerTask {
+ stop(): void;
+ run(): void;
+ }
+
+ export function track(selector: string, tracker: tracking.Tracker): TrackerTask;
+}