Latest 0.9.2
License MIT
Platforms ios 8.0, tvos 9.0, osx 10.9

Build Status CocoaPods Version Platform Carthage compatible Join the chat at

A type-safe, Swift-language layer over SQLite3.

SQLite.swift provides compile-time confidence in SQL statement
syntax and intent.


  • A pure-Swift interface
  • A type-safe, optional-aware SQL expression builder
  • A flexible, chainable, lazy-executing query layer
  • Automatically-typed data access
  • A lightweight, uncomplicated query and parameter binding interface
  • Developer-friendly error handling and debugging
  • Full-text search support
  • Well-documented
  • Extensively tested
  • Companion project has SQLCipher support
  • Active support at StackOverflow, and Gitter Chat Room (experimental)


import SQLite

let db = try Connection("path/to/db.sqlite3")

let users = Table("users")
let id = Expression<Int64>("id")
let name = Expression<String?>("name")
let email = Expression<String>("email")

try { t in
    t.column(id, primaryKey: true)
    t.column(email, unique: true)
// CREATE TABLE "users" (
//     "name" TEXT,
//     "email" TEXT NOT NULL UNIQUE
// )

let insert = users.insert(name <- "Alice", email <- "[email protected]")
let rowid = try
// INSERT INTO "users" ("name", "email") VALUES ('Alice', '[email protected]')

for user in try db.prepare(users) {
    print("id: (user[id]), name: (user[name]), email: (user[email])")
    // id: 1, name: Optional("Alice"), email: [email protected]
// SELECT * FROM "users"

let alice = users.filter(id == rowid)

try <- email.replace("", with: "")))
// UPDATE "users" SET "email" = replace("email", '', '')
// WHERE ("id" = 1)

// DELETE FROM "users" WHERE ("id" = 1)

db.scalar(users.count) // 0
// SELECT count(*) FROM "users"

SQLite.swift also works as a lightweight, Swift-friendly wrapper over the C

let stmt = try db.prepare("INSERT INTO users (email) VALUES (?)")
for email in ["[email protected]", "[email protected]"] {

db.totalChanges    // 3
db.changes         // 1
db.lastInsertRowid // 3

for row in try db.prepare("SELECT id, email FROM users") {
    print("id: (row[0]), email: (row[1])")
    // id: Optional(2), email: Optional("[email protected]")
    // id: Optional(3), email: Optional("[email protected]")

db.scalar("SELECT count(*) FROM users") // 2

Read the documentation or explore more,
interactively, from the Xcode project’s playground.

SQLite.playground Screen Shot

For a more comprehensive example, see this article and the companion repository.


Note: SQLite.swift requires Swift 2 (and Xcode 7) or greater.

The following instructions apply to targets that support embedded
Swift frameworks. To use SQLite.swift in iOS 7 or an OS X command line
tool, please read the Frameworkless Targets section of the


Carthage is a simple, decentralized dependency manager for Cocoa. To
install SQLite.swift with Carthage:

  1. Make sure Carthage is installed.

  2. Update your Cartfile to include the following:

    github "stephencelis/SQLite.swift" ~> 0.9.2
  3. Run carthage update and add the appropriate framework.


CocoaPods is a dependency manager for Cocoa projects. To install
SQLite.swift with CocoaPods:

  1. Make sure CocoaPods is installed. (SQLite.swift
    requires version 0.37 or greater.)

  2. Update your Podfile to include the following:

    pod 'SQLite.swift', '~> 0.9.2'
  3. Run pod install.


To install SQLite.swift as an Xcode sub-project:

  1. Drag the SQLite.xcodeproj file into your own project.
    (Submodule, clone, or download the project first.)

    Installation Screen Shot

  2. In your target’s General tab, click the + button under Linked
    Frameworks and Libraries

  3. Select the appropriate SQLite.framework for your platform.

  4. Add.


See the planning document for a roadmap and existing feature requests.

Read the contributing guidelines. The TL;DR (but please; R):

  • Need help or have a general question? [Ask on Stack
    Overflow][] (tag sqlite.swift).
  • Found a bug or have a feature request? Open an issue.
  • Want to contribute? Submit a pull request.



SQLite.swift is available under the MIT license. See the LICENSE
for more information.


These projects enhance or use SQLite.swift:


Looking for something else? Try another Swift wrapper (or FMDB):

Latest podspec

    "name": "SQLite.swift",
    "version": "0.9.2",
    "summary": "A type-safe, Swift-language layer over SQLite3 for iOS and OS X.",
    "description": "SQLite.swift provides compile-time confidence in SQL statement syntax andnintent.",
    "homepage": "",
    "license": "MIT",
    "authors": {
        "Stephen Celis": "[email protected]"
    "source": {
        "git": "",
        "tag": "0.9.2"
    "social_media_url": "",
    "module_name": "SQLite",
    "platforms": {
        "ios": "8.0",
        "tvos": "9.0",
        "osx": "10.9"
    "module_map": "podstuff/module.modulemap",
    "libraries": "sqlite3",
    "source_files": "SQLite/**/*.{c,h,m,swift}",
    "private_header_files": "SQLite/Core/fts3_tokenizer.h"

Pin It on Pinterest

Share This