🐦🎼 Swift WebSockets client for Phoenix Channels.
Swift Ruby
Latest commit 5f3d470 Feb 13, 2017 @sjrmanning committed on GitHub Merge pull request #11 from codeOfRobin/master
Weakified self to prevent memory leaks


Birdsong: Phoenix Channels WebSockets client for iOS & OS X


An iOS & OS X WebSockets client for use with Phoenix Channels. Supports Phoenix Presence!

As of version 0.3.0, Birdsong requires Swift 3.0+. Please use version 0.2.2 if you need Swift 2.2 support.


import Birdsong

let socket = Socket(url: NSURL(string: "http://localhost:4000/socket/websocket")!)

socket.onConnect = {
    let channel = self.socket.channel("rooms:some-topic", payload: ["user": "spartacus"])
    channel.on("new:msg", callback: { message in

    channel.join().receive("ok", callback: { payload in
        print("Successfully joined: \(channel.topic)")

    channel.send("new:msg", payload: ["body": "Hello!"])
        .receive("ok", callback: { response in
            print("Sent a message!")
        .receive("error", callback: { reason in
            print("Message didn't send: \(reason)")

    // Presence support.
    channel.presence.onStateChange = { newState in
        // newState = dict where key = unique ID, value = array of metas.
        print("New presence state: \(newState)")

    channel.presence.onJoin = { id, meta in
        print("Join: user with id \(id) with meta entry: \(meta)")

    channel.presence.onLeave = { id, meta in
        print("Leave: user with id \(id) with meta entry: \(meta)")


To run the example project, clone the repo, and run pod install from the Example directory first.


Available on CocoaPods:

platform :ios, '9.0'

pod 'Birdsong', '~> 0.4'

If you need Swift 2.2 compatibility, please use version 0.2.2.


Simon Manning — sjrmanning@github


Birdsong is available under the MIT license. See the LICENSE file for more info.