Birds of a feather

For well over a year now, Twitter has been an often-requested addition to our repertoire of services. As a user of the service I absolutely understand. The current base of Twitter clients often leave something to be desired, behave in a weird way, or just add an additional application you need to keep open.

Fear not! Using Matt Gemmell‘s MGTwitterEngine, a library used to communicate with the Twitter API, I’ve managed to make what I consider to be a very good Twitter client into Adium. Your friends (people you follow) are displayed in a group on the Contact List: adding or removing will follow or unfollow them, and chatting with them will send (or receive) direct messages. Note that you can only send a direct message to someone who follows you, so it might be a one-way conversation.


A group chat named “Timeline (username)” (you can rename it like I have above) will appear alongside your Twitter contacts. When new tweets arrive, this group chat will open; you can close it to help keep your place in the tweets, or leave it open and watch them arrive. Of course, the check interval is customizable (between never checking and checking every hour), and you can force an update through the chat’s context menu. There’s also an option to automatically update tweets when you send one.

When an incoming tweet is a reply to one of yours, the message style you are using will highlight the message for you. I’m going to be modifying all of the message styles included in Adium to support this (it’s been around for group chats since 1.3 was released, but not many have added it). You can also set an Event to fire when a reply comes in: display a growl notification, play a sound, whatever floats your boat!

You can get information on any of your Twitter contacts, and their biographical information (with links to friends, followers, and updates) and their latest 20 statuses will be loaded.


Next to every Tweet is a set of action links. “original” will go to the post which the tweet is replying to, “link” will go to the permanent link for the status, and the “reply” link will set up a reply like below. The “@” character next to the character count indicates that the Tweet you are sending is replying to a specific tweet.


If you come across a tweet online, you can open the “Reply to a Tweet” window, which lets you either enter the username and status ID, or paste the URL to fill in the information. This makes replying to tweets other people reference a great deal easier! For example, if I didn’t click the “reply” link for Ryan’s status above, I could paste the URL into the window and see something like this:


My goal has been to integrate the service seamlessly into the Adium experience, and I think I’m meeting or exceeding my own expectations. However, I’m definitely open for suggestions which could go in before this is released. There’s still a few bugs to iron out, a few things to finish up, and a few new ideas which are bound to pop into my head. We also need to beat Twitter into submission about giving us a service identifier.

I’ve got a fun few ideas for ways Adium could save you time and effort, like automatically uploading images you insert into a message (like you would a direct IM on AIM) to Twitpic. This will largely depend on how much time and effort are available before Adum 1.4 is released (hopefully in the next few months we’ll see a beta!) and how many insane stints of programming I can slip in between now and then.


  1. This looks great! Please keep us updated on progress and when it might be released. I actually don’t use IM’s that often anymore, save for the odd AIM or GTalk request, but I use twitter everyday. Right now I’m using Twhirl, because it’s free. But if I could combine twitter with IM’s, Adium would become my default client! That would definitely be worthy of a donation.

  2. Wow.. so Awsome ! Can’t wait to give it a try.

  3. Is there any chance of somehow syncing your tweets with your AIM, GTALK, MSN status messages?

    Keep up the amazing work!

  4. Thank you thank you thank you. This looks fabulous, and is such a logical extension! No more choking on Adobe’s Air, or dealing with Twitterific’s ad’s – woot!

  5. @Fabricio Zuardi – I haven’t decided what to go with. No matter what service(s) I choose, code is going to have to be written for all of them.

    @akatsuki – I think you’re missing the point. Twitter is basically a large group chat; this is how I am treating it. If you don’t agree, don’t add a Twitter account. But try it out: I think you’ll enjoy it if you’re a Twitter user.

    @SonyaLynn – My TODO definitely includes it; the problem is MGTwitterEngine doesn’t support it (yet) in a release version, and it’s not an XML outputted API so I would have to utilize a secondary parser. We’ll see; I want it myself.

    @Dave Taylor – Skype just isn’t happening. There’s no need to ask. It’s an encrypted proprietary network with *0* third-party clients.

    @Rui Carmo – I’ll take a look. Direct messages are private chats, though. Threaded.

    @davidconnell – You can detach any group (right click – detach), or you can hide the Twitter contacts in 1.4.

    @Ted Grubb – On the TODO list. It’s technically possible if you don’t enter it in the timeline chat, but I intend to do it a bit more properly.

  6. FYI -I know many of the devs are on all the social websites, keeping up to date… but just incase a few of you have not seen:
    I read the article linked, but then went and read the comments for the Digg… someone might want to go through there and straighten some people out 🙂

  7. One of the features that I loved about the Twitter IM while it last was, that I didn’t receive tweets from everyone I follow (3,500 +), but only from those that I’ve turned “Device Updates” on.

    Will this functionality be in Adium 1.4?

    Thanks for providing a great resource.

  8. adium is really awesome

  9. @KatLady – Honestly, it’s not worth the time. People will be straightened out over time.

    @Evan Courtney – The functionality will (probably) not be in Adium 1.4. I am, however, interested in how well Adium would handle such a huge amount of follows. Be sure to keep us updated when 1.4 alpha/beta is released.

  10. You crazy folk will be interested to know that I’ve put Laconica support in the latest version of trunk. Follow me on

  11. @Zac West – I will exceeded my allotted API limits fairly quickly, and will be unable to use this feature on Adium. I’ll try it out at the release though, and keep you posted.

  12. @Evan Courtney – Hmm

    35 requests to get friends
    ~15-20 requests per timeline update

    You could have Adium set to update every 30 minutes and probably be okay.


  14. Zac, are you saying that you take 15-20 requests to do a single timeline update??? Why such a huge number? /statuses/friends_timeline.xml is one request and should have everything you need in it.

  15. @Tim Dorr – It will take 15-20 requests for someone with 3500 follows, I am guessing.

  16. meebo beat us to the punch with an app for iPhone 3.0 software

  17. Would it be possible to create groups of friends like in TweetDeck?

    For instance I follow a ton of news related twitterers whose chatter can often overwhelm my client so much that I miss tweets from my core group of friends. If there was a way to create a separate group chat window just for them it would be awesome.

  18. I made an imaginary mockup… you can see it here:

  19. Can’t come fast enough! it’s crazy that I like my iphone twitter app better than any desktop app available.

  20. Neat mockup, Zkaka! 🙂

  21. Once again, the best messaging client (not only in the Mac world) out there.
    Great one, even if I don’t use Twitter.

  22. Will you also port it/make it available for GAIM/Pidgin.. ??

  23. @enigma – Eventually.

    @Zkaka – Interesting.

    @ Tonci – Nope.

  24. Can. Not. Wait.

  25. Using it. Loving it. Release it 🙂

  26. Great news, looking forward to it!

    I do have some suggestions/questions:
    – Is there support for multiple accounts?
    – Along with TwitPic support, you could also implement Mobypicture
    – Check interval could be shorter than every hour, maybe somoething like every 5 minutes?
    – Automitically expand URL’s, so instead of showing…. you see the ectual link. This is done in EventBox and I love it. (of course not only with the TinyURL service)
    – Show the Timeline “contact” at the top of the list (as an option or by default)

    Hope I’m not to critical. This is really good news, I now already have 2 extra apps on my Mac for this sort of things.

    Cheers! Lex

  27. @Lex

    – Is there support for multiple accounts?

    – Along with TwitPic support, you could also implement Mobypicture
    Twitpic isn’t happening because I’m not willing to share the user’s credentials behind their back (let alone with OAuth it would be impossible to do so), even if they give permission it’s just not a good idea. I’ll look into mobypicture but it appears to require usernames and passwords as well.

    – Check interval could be shorter than every hour, maybe somoething like every 5 minutes?
    Quoting the post, “Of course, the check interval is customizable (between never checking and checking every hour)”

    – Automitically expand URL’s, so instead of showing…. you see the ectual link. This is done in EventBox and I love it. (of course not only with the TinyURL service)
    Possible with a javascript included in the message style, been thinking about a way to make it generalized so every style could have it. It’s only a few lines to add, if you wanted to modify the style yourself for it.

    – Show the Timeline “contact” at the top of the list (as an option or by default)
    It follows your normal sort rules; you could create a group for it, or move it around.

  28. Nice! Thanks

Post a Comment

Logged in as - Logout