Skip to content
MsgPack Serializer & Deserializer for Swift
Branch: master
Clone or download
Latest commit d124318 Oct 9, 2017
Type Name Latest commit message Commit time
Failed to load latest commit information.
Sources/SwiftMsgPack Swift 4 Compatibility Sep 14, 2017
SwiftMsgPack Swift 4 Compatibility Sep 14, 2017
Tests/SwiftMsgPackTests Added several other interesting tests for numeric Feb 26, 2017
.DS_Store Swift 4 Compatibility Sep 14, 2017
.swift-version Swift 4 Compatibility Sep 14, 2017 Swift 4 Compatibility Sep 14, 2017
LICENSE Initial commit Feb 26, 2017
Package.swift Update Oct 9, 2017
SwiftMsgPack-logo-source.sketch Added readme and logo Feb 26, 2017
SwiftMsgPack.podspec Swift 4 Compatibility Sep 14, 2017
logo.png Added readme and logo Feb 26, 2017


Carthage compatible CI Status Version License Platform

MsgPack for Swift... Its' like JSON but faster
Made with ♥ in pure Swift, no dependencies, lightweight & fully portable

★★ Star our github repository to help us! ★★

Created by Daniele Margutti (@danielemargutti)

MessagePack is an efficient binary serialization format, which lets you exchange data among multiple languages like JSON, except that it's faster and smaller. Small integers are encoded into a single byte while typical short strings require only one extra byte in addition to the strings themselves. You can read more about specs directly from the main web site.


I'm also working on several other projects you may like. Take a look below:

Library Description
SwiftDate The best way to manage date/timezones in Swift
Hydra Write better async code: async/await & promises
Flow A new declarative approach to table managment. Forget datasource & delegates.
SwiftRichString Elegant & Painless NSAttributedString in Swift
SwiftLocation Efficient location manager
SwiftMsgPack Fast/efficient msgPack encoder/decoder


Current Release

A complete list of changes for each release is available in the CHANGELOG file.

How to use: one-shot pack & unpack

Both serialization and deseralization happens inside a Data object.

In order to pack one or more objects you need to create an empty Data instance and call pack by passing the object(s) you want to serialize. It's pretty easy, take a look here:

var data = Data()
do {
	let obj1 = "Hello World"
	let obj2 = 45.5
	let obj3: [AnyHashable:Any?] = [ "key_1" : "value test","key_2" : 4,"key_3" : true, otherHashableKey: "value1"]
	// Now you can pack your instances by passing them to pack function
	try data.pack(obj1,obj2,obj3)
} catch {
	print("Something went wrong while packing data: \(error)")	

Deserializing data is pretty simple too, just call unpack function to an instance of Data with msgpack data:

let data: Data = // msgpack data...
do {
  let decodedObj: Any? = try data.unpack()
} catch {
	print("Something went wrong while unpacking data: \(error)")	

Supported Types

SwiftMsgPack supports the following Swift types:

  • String
  • Data
  • Bool
  • nil
  • Numeric values: Int & UInt (UInt8,Int8,UInt16,Int16,UInt32,Int32,UInt64,Int64), Float and Double
  • Dictionaries ([AnyHashable:Any?])
  • Array ([Any?])

The following limitations are specified by MsgPack specs format:

  • a value of an Integer object is limited from -(2^63) upto (2^64)-1
  • maximum length of a Binary object is (2^32)-1
  • maximum byte size of a String object is (2^32)-1
  • String objects may contain invalid byte sequence and the behavior of a deserializer depends on the actual implementation when it received invalid byte sequence
    • Deserializers should provide functionality to get the original byte array so that applications can decide how to handle the object
  • maximum number of elements of an Array object is (2^32)-1
  • maximum number of key-value associations of a Map object is (2^32)-1


You can install Swiftline using CocoaPods, carthage and Swift package manager


pod 'SwiftMsgPack'


github 'malcommac/SwiftMsgPack'

Swift Package Manager

Add swiftline as dependency in your Package.swift

  import PackageDescription

  let package = Package(name: "YourPackage",
    dependencies: [
      .Package(url: "", majorVersion: 0),


SwiftMsgPack has an extensive coverage using XCTest. You can found a complete list of tests inside Tests/SwiftMsgPackTests folder. Tests can also be runned with XCode using the SwiftMsgPack project.


Current version is compatible with:

  • Swift 4.x+ (Swift 3.x up to 0.9.1)
  • iOS 9.0 or later
  • tvOS 9.0 or later
  • macOS 10.10 or later
  • Linux compatible environments

Credits & License

SwiftMsgPack is owned and maintained by Daniele Margutti.

As open source creation any help is welcome!

The code of this library is licensed under MIT License; you can use it in commercial products without any limitation.

The only requirement is to add a line in your Credits/About section with the text below:

This software uses open source SwiftMsgPack's library to manage MsgPack data.
Created by Daniele Margutti and licensed under MIT License.[SwiftMsgPack]

You can’t perform that action at this time.