Swiftpack.co - makoni/couchdb-vapor as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by makoni.
makoni/couchdb-vapor 1.2.7
CouchDB client for Vapor
⭐️ 10
🕓 4 weeks ago
iOS macOS
.package(url: "https://github.com/makoni/couchdb-vapor.git", from: "1.2.7")

CouchDB Client

Vapor 4

Build on macOS Build on Ubuntu Test on Ubuntu

This is simple lib to work with CouchDB in Swift.

  • Latest version is based on async/await and requires Swift 5.6 and newer. Works with Vapor 4.50 and newer.
  • Version 1.0.0 can be used with Vapor 4 without async/await. Swift 5.3 is required
  • You can use old version for Vapor 3 from vapor3 branch or using version < 1.0.0.

The only depndency for this lib is async-http-client


You can find docs, examples and even tutorials here.


Swift Package Manager

Add to the dependencies value of your Package.swift.

dependencies: [
    .package(url: "https://github.com/makoni/couchdb-vapor.git", from: "1.2.0"),


// use default params
let myClient = CouchDBClient()

// provide your own params
let couchDBClient = CouchDBClient(
    couchProtocol: .http,
    couchHost: "",
    couchPort: 5984,
    userName: "admin",
    userPassword: "myPassword"

If you don’t want to have your password in the code you can pass COUCHDB_PASS param in you command line. For example you can run your Server Side Swift project:

COUCHDB_PASS=myPassword /path/.build/x86_64-unknown-linux-gnu/release/Run

Just use initializer without userPassword param:

let couchDBClient = CouchDBClient(
    couchProtocol: .http,
    couchHost: "",
    couchPort: 5984,
    userName: "admin"

Usage examples

Define your document model:

// Example struct
struct ExpectedDoc: CouchDBRepresentable, Codable {
    var name: String
    var _id: String?
    var _rev: String?

Insert data

var testDoc = ExpectedDoc(name: "My name")

try await couchDBClient.insert(
    dbName: "databaseName",
    doc: &testDoc

print(testDoc) // testDoc has _id and _rev values now

Update data

// get data from DB by document ID
var doc: ExpectedDoc = try await couchDBClient.get(dbName: "databaseName", uri: "documentId")

// Update value
doc.name = "Updated name"

try await couchDBClient.update(
    dbName: testsDB,
    doc: &doc

print(doc) // doc will have updated name and _rev values now

Delete data example:

let response = try await couchDBClient.delete(fromDb: "databaseName", doc: doc)
// or by uri
let response = try await couchDBClient.delete(fromDb: "databaseName", uri: doc._id,rev: doc._rev)

Get all DBs example:

let dbs = try await couchDBClient.getAllDBs()
// prints: ["_global_changes", "_replicator", "_users", "yourDBname"]

Using with Vapor

Here's a simple tutorial for Vapor.


Stars: 10
Last commit: 1 week ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Release Notes

4 weeks ago

Updated async-http-client to 1.19.0

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics