use BSON and MongoDB in pure Swift
swift-mongodb is a pure-Swift, Foundation-less BSON library and MongoDB driver.
products
This package vends the following library products:
-
Defines BSON types. Consumers that don’t need to perform any decoding or encoding, or interact with variants (union types) can depend on this product alone.
This module contains a type (
BSON) of the same name as the module itself, so every declaration in this module is namespaced to that type.Does not re-export
BSONTraversal. -
BSONDecoding(BSON*,BSONUnions)Vends tools for (performantly) decoding BSON with an emphasis on type-safety and avoiding allocations.
Also vends a fallback
Decoderinterface for consumers migrating fromDecodable.Re-exports
BSON, but notBSONUnions. -
Vends tools for (performantly) encoding BSON with an emphasis on static typing and legibility.
Re-exports
BSON. -
BSONSchema(BSONDecoding*,BSONEncoding*)Convenience module that re-exports
BSONDecodingandBSONEncoding, and defines the typealiasesBSONSchemeandBSONStringScheme. Contains no code of its own. -
Defines the
AnyBSONunion type, theBSON.TypecastErrortype, and provides tools for working with heterogenous/dynamically-typed BSON.Also vends
ExpressibleByArrayLiteralandExpressibleByDictionaryLiteralconformances for various BSON types, includingAnyBSON.Does not re-export
BSON. -
MongoDB(MongoDriver*,MongoSchema)Vends Swift bindings for MongoDB’s command API, and also implements cursors and managed cursor streams. Most package consumers will depend this module, unless it is possible to depend on one of its constituent dependencies.
Depends on SwiftNIO (indirectly), and re-exports
MongoDriver. -
MongoDriver(Mongo*,MongoWire,BSONSchema,SCRAM,TraceableErrors,UUID,SHA2,NIOCore,NIOPosix,NIOSSL,Atomics)Implements a MongoDB driver, for communicating with a
mongod/mongosserver. Handles authentication, sessions, transactions, and command execution, but does not define specific MongoDB commands other than the ones needed to bootstrap a connection.MongoDriverhas the concept of databases, but does not have any awareness of collections, or other high-level database concepts.Depends on SwiftNIO, and re-exports
Mongo. -
Interface module that defines the
MongoDecodableandMongoEncodableprotocols, and theMongoSchemetypealias.Consumers that only implement MongoDB schema and do not need to use the MongoDB driver can depend on this product alone.
Does not re-export
BSONSchema. -
Implements the MongoDB wire protocol, in a generic manner without dependency on SwiftNIO.
This module contains a type (
MongoWire) of the same name as the module itself, so every declaration in this module is namespaced to that type. -
SCRAM(Base64,MessageAuthentication)Implements SCRAM. The module is intended to be used with MongoDB SCRAM-SHA-256, but is not strongly coupled with any particular flavor of SCRAM.
-
Provides support for error chaining and pretty-printing of errors.
-
Defines the
UUIDtype, and an interface for interacting with UUIDs asRandomAccessCollections ofUInt8.
Please avoid depending on SCRAM, TraceableErrors, UUID, and the BSON libraries; they are likely to migrate to a separate repository in the medium-term.
license
The MongoDriver module was originally a re-write of MongoKitten’s MongoClient module. Although its fork-ancestor is not really recognizable in the module’s current form, MongoKitten was MIT-licensed, so MongoDriver is MIT-licensed as well.
The rest of the project is available under the MPL 2.0 license.
acknowledgements
swift-mongodb started out as a re-write of Orlandos’s MongoKitten; without MongoKitten, swift-mongodb would not exist.