diff --git a/lovefield/lovefield-tests.ts b/lovefield/lovefield-tests.ts
new file mode 100644
index 0000000000..aa77f5b2c1
--- /dev/null
+++ b/lovefield/lovefield-tests.ts
@@ -0,0 +1,49 @@
+///
+
+function main(): void {
+ var schemaBuilder: lf.schema.Builder = lf.schema.create('todo', 1);
+
+ schemaBuilder.createTable('Item').
+ addColumn('id', lf.Type.INTEGER).
+ addColumn('description', lf.Type.STRING).
+ addColumn('deadline', lf.Type.DATE_TIME).
+ addColumn('done', lf.Type.BOOLEAN).
+ addPrimaryKey(['id']).
+ addIndex('idxDeadline', ['deadline'], false, lf.Order.DESC);
+
+ var todoDb: lf.Database = null;
+ var itemSchema: lf.schema.Table = null;
+ var connectOptions: lf.schema.ConnectOptions = {
+ storeType: lf.schema.DataStoreType.MEMORY
+ }
+ schemaBuilder.connect(connectOptions).then(
+ function(db) {
+ todoDb = db;
+ itemSchema = db.getSchema().table('Item');
+ var row = itemSchema.createRow({
+ 'id': 1,
+ 'description': 'Get a cup of coffee',
+ 'deadline': new Date(),
+ 'done': false
+ });
+
+ return db.insertOrReplace().into(itemSchema).values([row]).exec();
+ }).then(
+ function() {
+ var column: lf.schema.Column = (itemSchema).done;
+ return todoDb.select().from(itemSchema).where(column.eq(false)).exec();
+ }).then(
+ function(results) {
+ results.forEach(function(row) {
+ document.body.textContent =
+ (row).description + ' before ' + (row).deadline;
+ });
+
+ return todoDb.delete().from(itemSchema);
+ }).then(
+ function() {
+ return todoDb.select(lf.fn.count()).from(itemSchema).exec();
+ });
+}
+
+main();
diff --git a/lovefield/lovefield.d.ts b/lovefield/lovefield.d.ts
new file mode 100644
index 0000000000..b692a414fa
--- /dev/null
+++ b/lovefield/lovefield.d.ts
@@ -0,0 +1,214 @@
+// Type definitions for Lovefield v2.0.56
+// Project: http://google.github.io/lovefield/
+// Definitions by: freshp86
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+declare module lf {
+ export enum Order { ASC, DESC }
+
+ export enum Type {
+ ARRAY_BUFFER,
+ BOOLEAN,
+ DATE_TIME,
+ INTEGER,
+ NUMBER,
+ OBJECT,
+ STRING
+ }
+
+ export interface Binder {
+ getIndex(): number
+ }
+
+ export interface Predicate {}
+ export interface Row {}
+ type ValueLiteral = string|number|boolean|Date;
+
+ export interface PredicateProvider {
+ eq(operand: ValueLiteral|schema.Column|Binder): Predicate
+ neq(operand: ValueLiteral|schema.Column|Binder): Predicate
+ lt(operand: ValueLiteral|schema.Column|Binder): Predicate
+ lte(operand: ValueLiteral|schema.Column|Binder): Predicate
+ gt(operand: ValueLiteral|schema.Column|Binder): Predicate
+ gte(operand: ValueLiteral|schema.Column|Binder): Predicate
+ match(operand: RegExp|Binder): Predicate
+ between(from: ValueLiteral|Binder, to: ValueLiteral|Binder): Predicate
+ in(values: Binder|Array): Predicate
+ isNull(): Predicate
+ isNotNull(): Predicate
+ }
+
+ function bind(index: number): Binder;
+
+ export interface Transaction {
+ attach(query: query.Builder): Promise>
+ begin(scope: Array): Promise
+ commit(): Promise
+ exec(queries: Array): Promise>>
+ rollback(): Promise
+ }
+
+ export enum TransactionType { READ_ONLY, READ_WRITE }
+
+ export interface Database {
+ close(): void
+ createTransaction(type?: TransactionType): Transaction
+ delete(): query.Delete
+ getSchema(): schema.Database
+ insertOrReplace(): query.Insert
+ insert(): query.Insert
+ observe(query: query.Select, callback: Function): void
+ select(...columns: schema.Column[]): query.Select
+ unobserve(query: query.Select, callback: Function): void
+ update(table: schema.Table): query.Update
+ }
+
+ module query {
+ export interface Builder {
+ bind(...values: any[]): Builder
+ exec(): Promise>
+ explain(): string
+ toSql(): string
+ }
+
+ export interface Delete extends Builder {
+ from(table: schema.Table): Delete
+ where(predicate: Predicate): Delete
+ }
+
+ export interface Insert extends Builder {
+ into(table: schema.Table): Insert
+ values(rows: Array|Binder|Array): Insert
+ }
+
+ export interface Select extends Builder {
+ from(...tables: schema.Table[]): Select
+ groupBy(...columns: schema.Column[]): Select
+ innerJoin(table: schema.Table, predicate: Predicate): Select
+ leftOuterJoin(table: schema.Table, predicate: Predicate): Select
+ limit(numberOfRows: Binder|number): Select
+ orderBy(column: schema.Column, order?: Order): Select
+ skip(numberOfRows: Binder|number): Select
+ where(predicate: Predicate): Select
+ }
+
+ export interface Update extends Builder {
+ set(column: schema.Column, value: any): Update
+ where(predicate: Predicate): Update
+ }
+
+ } // module query
+
+
+ module raw {
+ export interface BackStore {
+ getRawDBInstance(): any
+ getRawTransaction(): any
+ dropTable(tableName: string): Promise
+ addTableColumn(
+ tableName: string, columnName: string,
+ defaultValue: string|boolean|number|Date|ArrayBuffer): Promise
+ dropTableColumn(tableName: string, columnName:string): Promise
+ renameTableColumn(
+ tableName: string, oldColumnName: string,
+ newColumnName:string) : Promise
+ createRow(payload: Object): Row
+ getVersion(): number
+ dump(): Array