diff --git a/builder.go b/builder.go
deleted file mode 100644
index 1d3c0e204d85875326efddb4ceb6d81aeb995682..0000000000000000000000000000000000000000
--- a/builder.go
+++ /dev/null
@@ -1,91 +0,0 @@
-package db
-
-import (
-	"database/sql"
-	"fmt"
-	"github.com/jmoiron/sqlx"
-)
-
-// QueryBuilder is an experimental interface.
-type QueryBuilder interface {
-	Select(columns ...interface{}) QuerySelector
-	SelectAllFrom(table string) QuerySelector
-
-	InsertInto(table string) QueryInserter
-	DeleteFrom(table string) QueryDeleter
-	Update(table string) QueryUpdater
-
-	Exec(query interface{}, args ...interface{}) (sql.Result, error)
-}
-
-type QuerySelector interface {
-	Columns(columns ...interface{}) QuerySelector
-	From(tables ...string) QuerySelector
-	Distinct() QuerySelector
-	Where(...interface{}) QuerySelector
-	GroupBy(...interface{}) QuerySelector
-	//Having(...interface{}) QuerySelector
-	OrderBy(...interface{}) QuerySelector
-	Using(...interface{}) QuerySelector
-	FullJoin(...interface{}) QuerySelector
-	CrossJoin(...interface{}) QuerySelector
-	RightJoin(...interface{}) QuerySelector
-	LeftJoin(...interface{}) QuerySelector
-	Join(...interface{}) QuerySelector
-	On(...interface{}) QuerySelector
-	Limit(int) QuerySelector
-	Offset(int) QuerySelector
-
-	Iterator() Iterator
-
-	QueryGetter
-	fmt.Stringer
-}
-
-type QueryInserter interface {
-	Values(...interface{}) QueryInserter
-	Columns(...string) QueryInserter
-	Extra(string) QueryInserter
-
-	Iterator() Iterator
-
-	QueryExecer
-	QueryGetter
-
-	fmt.Stringer
-}
-
-type QueryDeleter interface {
-	Where(...interface{}) QueryDeleter
-	Limit(int) QueryDeleter
-
-	QueryExecer
-	fmt.Stringer
-}
-
-type QueryUpdater interface {
-	Set(...interface{}) QueryUpdater
-	Where(...interface{}) QueryUpdater
-	Limit(int) QueryUpdater
-
-	QueryExecer
-	fmt.Stringer
-}
-
-type QueryExecer interface {
-	Exec() (sql.Result, error)
-}
-
-type QueryGetter interface {
-	Query() (*sqlx.Rows, error)
-	QueryRow() (*sqlx.Row, error)
-}
-
-type Iterator interface {
-	All(dest interface{}) error
-	One(dest interface{}) error
-	Scan(dest ...interface{}) error
-	Next(dest ...interface{}) bool
-	Err() error
-	Close() error
-}
diff --git a/db.go b/db.go
index 2b11c2f6aecbd1634fe475393b9aff8be6398841..d44de71b317198133f85cae326e7a4ae81f58999 100644
--- a/db.go
+++ b/db.go
@@ -43,6 +43,10 @@
 //	err = res.All(&people)
 package db
 
+import (
+	builder "upper.io/builder/meta"
+)
+
 // import "upper.io/db"
 
 // Cond is a map used to define conditions passed to `db.Collection.Find()` and
@@ -157,7 +161,7 @@ type Database interface {
 	Driver() interface{}
 
 	// Builder is an experimental interface
-	Builder() QueryBuilder
+	Builder() builder.QueryBuilder
 
 	// Open() attempts to stablish a connection with the database server, a
 	// previous call to Setup() is required.
diff --git a/internal/sqladapter/database.go b/internal/sqladapter/database.go
index 4a9ec70d6be2fafd5d34d7c650ed1466d63ea038..94b30a8a4ae1d9991e7a22641199154bcbba2f8f 100644
--- a/internal/sqladapter/database.go
+++ b/internal/sqladapter/database.go
@@ -6,7 +6,8 @@ import (
 	"time"
 
 	"github.com/jmoiron/sqlx"
-	"upper.io/builder"
+	sqlbuilder "upper.io/builder"
+	"upper.io/builder/meta"
 	"upper.io/builder/sqlgen"
 	"upper.io/cache"
 	"upper.io/db"
@@ -41,7 +42,7 @@ type BaseDatabase struct {
 	cachedStatements *cache.Cache
 	collections      map[string]db.Collection
 	collectionsMu    sync.Mutex
-	builder          db.QueryBuilder
+	builder          builder.QueryBuilder
 
 	template *sqlgen.Template
 }
@@ -58,7 +59,7 @@ func NewDatabase(partial PartialDatabase, connURL db.ConnectionURL, template *sq
 		template: template,
 	}
 
-	d.builder = builder.NewBuilder(d, d.template)
+	d.builder = sqlbuilder.NewBuilder(d, d.template)
 	d.cachedStatements = cache.NewCache()
 
 	return d
@@ -244,7 +245,7 @@ func (d *BaseDatabase) QueryRow(stmt *sqlgen.Statement, args ...interface{}) (*s
 }
 
 // Builder returns a custom query builder.
-func (d *BaseDatabase) Builder() db.QueryBuilder {
+func (d *BaseDatabase) Builder() builder.QueryBuilder {
 	return d.builder
 }
 
diff --git a/internal/sqlutil/result/result.go b/internal/sqlutil/result/result.go
index 2e50932e1e4e16bdc991fbe3fed76d2c375a812c..6f052d2b73ae1ed03c89586b107276151081426d 100644
--- a/internal/sqlutil/result/result.go
+++ b/internal/sqlutil/result/result.go
@@ -22,13 +22,14 @@
 package result
 
 import (
+	builder "upper.io/builder/meta"
 	"upper.io/db"
 )
 
 type Result struct {
-	b       db.QueryBuilder
+	b       builder.QueryBuilder
 	table   string
-	iter    db.Iterator
+	iter    builder.Iterator
 	limit   int
 	offset  int
 	fields  []interface{}
@@ -40,7 +41,7 @@ type Result struct {
 
 // NewResult creates and results a new result set on the given table, this set
 // is limited by the given sqlgen.Where conditions.
-func NewResult(b db.QueryBuilder, table string, conds []interface{}) *Result {
+func NewResult(b builder.QueryBuilder, table string, conds []interface{}) *Result {
 	return &Result{
 		b:     b,
 		table: table,
@@ -155,7 +156,7 @@ func (r *Result) Count() (uint64, error) {
 	return counter.Count, nil
 }
 
-func (r *Result) buildSelect() db.QuerySelector {
+func (r *Result) buildSelect() builder.Selector {
 	q := r.b.Select(r.fields...)
 
 	q.From(r.table)