Swiftpack.co - Package - halcyonmobile/RestBird

RestBird 🦉

Codacy Badge Build Status codecov


Lightweight, stateless REST network manager over the Codable protocol built upon Alamofire.

To learn more aboit this library, check out the documentation.


  • iOS 9.0+ / macOS 10.11+
  • XCode 10.0+
  • Swift 4.2+


  • [x] Codable support.
  • [x] PromiseKit wrapper.
  • [x] RxSwift wrapper.
  • [x] Automatic request parameter serialization (Codable?)

Installation Instructions

Swift Package Manager

Add RestBird as a dependency to your project.

.Package(url: "https://github.com/halcyonmobile/RestBird.git", majorVersion: 0, minorVersion: 4)

Then, simply integrate RestBird with your target.

targets: [
    Target(name: "YourTarget", dependencies: ["RestBird"])


pod 'RestBird'

You can also try it out by running

pod try RestBird


github "halcyonmobile/RestBird"


Steps for setting up the project for development:

  • Clone the repo
  • Generate Xcode project by executing swift package generate-xcodeproj
  • Open project



First you need to create your NetworkClientConfiguration configuration with your custom or one of the provided session manager drivers. We're going to use the AlamofireSessionManager.

struct MainAPIConfiguration: NetworkClientConfiguration {
    let baseUrl = "https://api.example.com"
    let sessionManager = AlamofireSessionManager()
    let jsonEncoder = JSONEncoder()
    let jsonDecoder = JSONDecoder()

Now we can pass this configuration to the network client.

let networkClient = NetworkClient(configuration: MainAPIConfiguration())

In order to make requests, a DataRequest object should be defined.

struct SignIn: DataRequest {
    typealias ResponseType = Authentication

    let email: String
    let password: String

    let suffix: String? = API.Path.login
    let method: HTTPMethod = .post
    var parameters: [String : Any]? {
        return [API.Param.email: email, API.Param.password: password]

Now use your network client to execute requests.

let request = SignIn(email: "john-doe@acme.inc", password: "123456")
networkClient.execute(request: request, completion: { result: Result<Authentication> in


Middlewares are a powerful way to intercept network requests or react to the response the endpoint returns.

At the moment, middlewares fall under two categories:

  • Pre Middlewares (evaluated before the request is about to be executed)
  • Post Middlewares (evaluated after the request was executed)
struct LoggerMiddleware: PreMiddleware {
    func willPerform(_ request: URLRequest) throws {

struct ErrorMiddleware: PostMiddleware {
    func didPerform(_ request: URLRequest, response: URLResponse, data: Data?) throws {
        if let data = data, let error = ErrorProvider.provide(for: data) {
            throw error

// Register middleware

Meta support

To avoid writing boilerplate code for network classes, we wrote a couple of templates to generate code using Sourcery. Head over to the template repository.

Here's how two requests would look like using the templates:

/// sourcery: Service
protocol PostService {

    /// sourcery: path = /posts/\(id)
    /// sourcery: pathParam = id
    func get(id: String, completion: (result: Result<Post>) -> Void)

    /// sourcery: method = post, path = /posts
    /// sourcery: parameter = post
    /// sourcery: parameter = json
    func save(post: Post, completion: (result: Result<Post>) -> Void)


You can find convenience wrappers for RestBird which are not distributed through the package. This includes a PromiseKit and an RxSwift wrapper.

Check out here.


RestBird is released under the MIT license. See LICENSE for details.

If you use the open-source library in your project, please make sure to credit and backlink to http://halcyonmobile.com


Stars: 21
Help us keep the lights on


Used By

Total: 0


v0.4.1 - Feb 18, 2019

  • Add ability to customize parameter encoding for requests.
  • Add ability to upload multipart form data.
  • Add auto-generated Jazzy documentation.
  • Fix Middlewares not delegating back to the network client.

v0.4.0 - Feb 5, 2019

• Middlewares were introduced for request interception. • Removed NetworkLogger in favor of Middlewares.

v0.3.1 - Feb 5, 2019

• Validate AlamofireSessionManager requests.

v0.3.0 - Nov 10, 2018

  • Add JSON coding customization
  • Implement URL session manager

v0.2.1 - Oct 21, 2018

  • Fix ambiguity when calling execute(request:completion:)
  • Map header fields to the request inside the Alamofire driver