Swiftpack.co - mongodb/swift-bson as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
pure Swift BSON library
.package(url: "https://github.com/mongodb/swift-bson.git", from: "v3.0.2")

Swift BSON


The official MongoDB BSON implementation in Swift!


Bugs / Feature Requests

Think you've found a bug? Want to see a new feature in swift-bson? Please open a case in our issue management tool, JIRA:

  1. Create an account and login: jira.mongodb.org
  2. Navigate to the SWIFT project: jira.mongodb.org/browse/SWIFT
  3. Click Create Issue - Please provide as much information as possible about the issue and how to reproduce it.

Bug reports in JIRA for all driver projects (i.e. NODE, PYTHON, CSHARP, JAVA) and the Core Server (i.e. SERVER) project are public.


The library supports use with Swift 5.1+. The minimum macOS version required to build the library is 10.14. The library is tested in continuous integration against macOS 10.14, Ubuntu 16.04, and Ubuntu 18.04.

Installation is supported via Swift Package Manager.

Install BSON

To install the library, add the package as a dependency in your project's Package.swift file:

// swift-tools-version:5.1
import PackageDescription

let package = Package(
    name: "MyPackage",
    dependencies: [
        .package(url: "https://github.com/mongodb/swift-bson", .upToNextMajor(from: "3.0.2"))
    targets: [
        .target(name: "MyTarget", dependencies: ["SwiftBSON"])

Example Usage

Work With and Modify Documents

import SwiftBSON

var doc: BSONDocument = ["a": 1, "b": 2, "c": 3]

print(doc) // prints `{"a" : 1, "b" : 2, "c" : 3}`
print(doc["a", default: "Not Found!"]) // prints `.int64(1)`

// Set a new value
doc["d"] = 4
print(doc) // prints `{"a" : 1, "b" : 2, "c" : 3, "d" : 4}`

// Using functional methods like map, filter:
let evensDoc = doc.filter { elem in
    guard let value = elem.value.asInt() else {
        return false
    return value % 2 == 0
print(evensDoc) // prints `{ "b" : 2, "d" : 4 }`

let doubled = doc.map { elem -> Int in
    guard case let value = .int64(value) else {
        return 0

    return Int(value * 2)
print(doubled) // prints `[2, 4, 6, 8]`

Note that BSONDocument conforms to Collection, so useful methods from Sequence and Collection are all available. However, runtime guarantees are not yet met for many of these methods.

Development Instructions

See our development guide for the MongoDB driver to get started. To run the tests for the BSON library you can make use of the Makefile and run: make test-pretty (uses xcpretty to change the output format) or just make test (for environments without ruby).


This repository previously contained Swift bindings for libbson, the MongoDB C driver's BSON library. Those bindings are still available under the 2.1.0 tag. Major version 3.0 and up will be used for the BSON library.


Stars: 16
Last commit: 19 hours ago

Ad: Job Offers

iOS Software Engineer @ Perry Street Software
Perry Street Software is Jack’d and SCRUFF. We are two of the world’s largest gay, bi, trans and queer social dating apps on iOS and Android. Our brands reach more than 20 million members worldwide so members can connect, meet and express themselves on a platform that prioritizes privacy and security. We invest heavily into SwiftUI and using Swift Packages to modularize the codebase.

Submit a free job ad (while I'm testing this). The analytics numbers for this website are here.


Release Notes

SwiftBSON v3.0.1
28 weeks ago

The MongoDB Swift driver team is pleased to announce the 3.0.1 release of SwiftBSON.

This release contains fixes for the following bugs that were included in the 3.0.0 release:

  • [SWIFT-1126] SwiftBSON fails to parse legacy extended JSON
  • [SWIFT-1137] Dates greater than or equal to Int64.max ms from epoch cause SwiftBSON to crash

Any existing applications depending on the Swift driver can update to this version of SwiftBSON simply by running swift package update without any modifications to the their Package.swifts. Any new applications depending on the driver will automatically pull this version in.

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