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.

78 Responses to “Birds of a feather”

  1. Simon Says:

    That’s what I call two birds with one stone.

    Looking forward to this as well as 1.4. Twitter in Adium suddenly feels very natural the way you describe it.

  2. Pedro Varela Says:

    That is great news! Maybe that would be the thing that would finally bring me to use Twitter. Tell them this, they would get one more client, at least from me!

  3. Eitan K. Says:

    This looks awesome. Great idea and keep it up! One suggestion which you may already be doing, but I didn’t see above after reading twice: The web Twitter page will shorten any URL that puts you over the 140 limit. Any way you could possibly automate the same thing?

  4. Peter Hosey Says:

    Eitan: We have a character-counter in Adium 1.3 and later. Colin put it in for using Twitter over XMPP; in 1.4, it appears on the Twitter service as well. It’ll let you go over (it’ll read negative), so you can write out a thought before cutting it down to fit.

  5. Alex von Halem Says:

    Great! Will skype chat be featured next?

  6. DarkMoonWolf Says:

    Sounds (and looks) great!
    May i suggest to add An entry in the Twitter Group to follow Tags? So it is a timelime but that one of all twits with a specific tag?
    That would make this my absolutely preferred Twitter Client.

  7. Daniel Says:

    Is it possible to do this without hard-coding so that it could also support, say,

  8. Zac West Says:

    @Eitan K – is actually what will shorten a URL if it goes over, but I could see about auto-shrinking URLs which are pasted in.

    @Alex von Halem – This is not the place to request features, but Skype will probably never come: it’s encrypted, and not reverse-engineered. It’s not easy at all to do.

    @DarkMoonWolf – In the long term plans, yes. I would like to be able to add group chats which are search terms (i.e., search for #adium -> join group chat named #adium).

    @Daniel – No, sorry.

  9. Jorge Salvador Caffarena Says:

    Amazing work! This may very well be the first desktop Twitter “client” that I end up using regulary :)

  10. Jake Marsh Says:

    As someone who uses twitter very often, you’re going to need to get that update time down to like 1 minute, at the very most, 1 hour is WAY too long.

  11. Matt Legend Gemmell Says:

    Hey Zac,

    Looks good; glad my MGTwitterEngine code came in handy. Looking forward to trying out the Twitter support in Adium 1.4. :)

  12. Zac West Says:

    @Jake Marsh – Right, which is why you can set it to a lower value. The options range from never to 60 minutes, you can pick 2, 5, 15, 30, or 60 minute update intervals.

    @Matt Gemmell – Thanks for working on it, it’s come in very handy indeed!

  13. Charles Marshall Says:

    Any chance we can get a beta out there to help test things out?

  14. Simon Says:

    @Charles Marshall: It’s in SVN, so I made a build of it:

    While Twitter seems to work pretty solid already Adium has crashed already so it’s not stable, and I think I’ve run across some other 1.4 related bugs already (mostly in the contactlist). So.. be prepared for that kind of stuff in alpha software. Use at your own risk.

  15. Zac West Says:

    @Charles Marhsall / Simon – I don’t mind people running trunk, but I would really not prefer to (at least on here) encourage people to use non-upgrading, unstable copies of trunk. It’s just a support nightmare.

  16. Nelson Says:

    I am a heavy user of both Adium and Identica, and I am currently using their Jabber interface. I would be extremely interested in having Adium support Identica and other services that support the Twitter API and not just Twitter. If you could put in a preference so that we can use a different URL instead of Twitter, that’s really all you need to support Identica/Laconica, I strongly urge you to take that small step to support open source web services.

  17. Nelson Says:

    * a different URL instead of, that is.

  18. Jasper Says:

    Excited to get my hands on a release of adium incorporating this feature. I’ve wanted to use twitter and adium together for ages now. Kudos for delivering this.

  19. Richard Says:

    Oh this sounds amazing. I keep moving from one client to another, whereas Adium has remained my chatter of choice for years now. Would love to see this in action. Any release date? :)


  20. Richard Says:

    OK, Between the time of my starting to write my comment and hitting refresh I see its in 1.4. Embarrassing :) Looking forward to 1.4 alpha! Cheers

  21. Sarah tt Says:

    omg Richards you got my words!

  22. Raphaël Says:

    I’m very interested in testing twitter integration to report bug if necessary but building the newest trunk version only give me the option to see the Twitter account type in preferences, If I click nothing happens :-(

  23. Matthijs Says:

    Tested the trunk version, it works awesome.

  24. Raphaël Says:

    @Matthijs the problem has been fixed few hours after my comment ;-)

  25. Zac West Says:

    @Nelson – The major problem with Laconica is having to special-case it. The URLs for permanent links/etc don’t follow the same formats, so I’d have to not include them at all…I don’t like this. I had semi-working locally, I had to change one or two things for it. However, it doesn’t respond to rate_limit_status at all, which is part of the Adium login step. Other than that, it probably works.

  26. Zoe Corkhill Says:

    This looks absolutely brilliant, I’ve been wanting a new twitter solution for OS X for a while and as the current trend for twitter apps is to use air, I haven’t been getting along well with any of the newer apps! Plus I have adium running most of the time and I always prefer to run as few apps as possible :)

    My top requests for a service like this would be to incorporate twitpic & twitlonger – both these services are brilliant & I’ve become quite reliant on them in tweete (twitlonger has only been in tweetie a few days and I love it already!)

    How do you post a normal tweet, that is not a reply or direct message? On the timeline ‘group chat’ window?

  27. Wayland Says:

    This is awesome. Thanks so much!

  28. Ryan Marsh Says:

    This is awesome. I’m stoked.

  29. Joseph Crawford Says:

    Wow I cannot wait for 1.4 with Twitter. I have been looking for a good client to use but they all seem rather clunky. I bought Twitteriffic and it works for the time being but it is a pain also.

    I look forward to this addition :)

  30. Tim Burke Says:

    “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:”

    You could have someone whip up a greasemonkey script that could send replies via Adium. I can think it, but I can’t make it.

  31. Zac West Says:

    @Zoe Corkhill – You can post in the group chat, it will send a normal Tweet. You can also set a “Social Networking Status” (globally, to Facebook/Twitter at the same time, or to the specific account) though that’s a bit more effort. I haven’t seen Twitlonger before, I’ll take a look.

    @Tim Burke – It will be pretty trivial to make a greasemonkey script like that.

  32. Daniel Andrews Says:

    As long as there is an easy way to hide away the contacts for the Adium + Twitter integration, I think it’s an awesome setup. But I don’t have any interest in seeing a list of all of the people I follow on my buddy list.

  33. Jonathan Metts Says:

    Will the reply’s provide the proper reply ID’s (not sure what they are called)? I hate it when I want to drill down through another person’s reply and there is no reference to the original tweet.

  34. Carlo Says:

    +1 on what Jonathan Metts said above, if it’s possible. In any case, this sounds fantastic.

  35. OtavioCC Says:

    +1, I hate replies without the “in reply to…” and the reference to the original post.

  36. Chad Says:

    I love the idea of having one fewer client to think about. I don’t love the idea of having all those twitters cluttering up my contact list. It isn’t necessary, is it? How about an option to hide the whole group? (Not just shrink it up, which only works if you have your contacts in groups) No other client I’ve seen needs to show you everyone you’re following and even the main twitter page puts it on a separate screen. And for a killer feature, it should have the ability to open new ‘chat windows/timelines’ to follow searches. I was a ta conference this week where participants were all twittering with a hash tag, and I switched clients to TweetDeck just so I could have a section to follow that tag. Killer feature.

  37. Zac West Says:

    @Jonathan – Yes, in_reply_to_status_id is set properly when you click a reply link.

    @Chad – I added View > Hide Social Networking Contacts, which makes only the timeline appear. I’ve been toying with the idea of a group chat with possible search terms.

  38. Joffrey Says:

    Can’t wait for it, Twitterrific bores me. :x

  39. Fernando Meyer Says:

    Great feature … = )

    Got my own Adium from svn with tweeter feature =)

  40. Fabricio Zuardi Says:

    This looks really awesome, with the exception of the twitpic part… why twitpic? A service that require that it’s users handle their twitter credentials even for a simple comment on a photo! I would rather have images uploaded to flickr and the link tweeted (since flickr has a nice authentication interface that does not require users giving their passwords away for 3rd parties).

    Other than that, I am pretty excited about the possibility of having twitter updates on my adium again (I used to use their discontinued IM integration…)

  41. akatsuki Says:

    Next thing, you might as well add facebook status and news pages like EventBox.

    Can’t believe this will make it in before Xbox chat though… Since Xbox chat is still actually chat.

  42. sgarza Says:

    Just compiled lastest adium svn, works like a sharm goodbye thwirl and pwitter :D

    thanks Adium team

  43. SonyaLynn Says:

    Allow me to also throw my support behind the idea of having hashtag-based “chat room” functionality baked into any implementation of Twitter in Adium. If you had that, you would utterly kill any need I might feel to use a separate client like TweetDeck or Twhirl. If you also tossed in integration, you would make my year!

  44. Dave Taylor Says:

    If you ask me, I’d say that integration with IM-only Skype would be FAR more interesting to me than Twitter integration. So hate using Skype, but I IM with people on it with surprising frequency. Think of it as a strong request. :-)

  45. David Smith Says:

    Dave Taylor: if Skype had a nice API with existing libraries to reuse for talking to it (as Twitter does), it’d be a lot more likely to happen. Sadly, the opposite is true; they’re incredibly paranoid about their protocol.

  46. Rui Carmo Says:

    Actually, there’s something missing – a one-to-one dialogue view like the one found in TwitterFon where you can see threaded conversations (both in @replies and DMs, listing only the tweets “in reply to” or from/to a specific user), and that I think is _precisely_ what Adium ought to do better.

    I suggest you guys grab TwitterFon (it’s free) and give it a whirl – that specific feature is the reason a lot of people are turning to it on the iPhone, and, after all, Adium is all about one-to-one dialogue…

  47. Allan Clark Says:

    With your twitter-announced concern over twitpic performance, how about letting the user select a URL-abbreviator and a photo-store? That would allow someone to choose if they like it, or some other URL-shortening tool, but I’m not sure how a flickr/twitpic choice can be made. (@-replied in twitter but I doubt you’re following me :) )

  48. davidconnell Says:

    This looks awesome. If you pull this off Adium will be my sole desktop client, which will be a relief. One question: Will the Twitter contact be in a separate window from my standard chat contacts? Otherwise I can see the contact list becoming unmanageable. At the same time, I think most people wold likely skip the Twitter contacts list as the list would likely include hundreds, potentially thousands of names?

    That said, rock on — Adium rules.

  49. smart@ss Says:

    Looks great!!, I can’t wait. Donation button time!

  50. Chris Marshall Says:

    I run Adium most of the time and I’m constantly logged into Twitter via the rather excellent TweetDeck. I doubt Adium would replace TweetDeck but nonetheless Twitter integration would be fantastic. I look forward to reading more about this in the near future.

    Nice one!

  51. Cody Says:

    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.

  52. Samuel Garneau Says:

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

  53. Ted Grubb Says:

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

    Keep up the amazing work!

  54. Joe Says:

    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!

  55. Zac West Says:

    @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.

  56. KatLady Says:

    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 :)

  57. Evan Courtney Says:

    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.

  58. adiumliker Says:

    adium is really awesome

  59. Zac West Says:

    @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.

  60. Zac West Says:

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

  61. Evan Courtney Says:

    @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.

  62. Zac West Says:

    @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.

  63. awesomerobot Says:


  64. Tim Dorr Says:

    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.

  65. Zac West Says:

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

  66. curt Says:

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

  67. enigma Says:

    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.

  68. Zkaka Says:

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

  69. Markovitch Says:

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

  70. Robby Says:

    Neat mockup, Zkaka! :)

  71. Vincenzo Says:

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

  72. Tonći Says:

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

  73. Zac West Says:

    @enigma – Eventually.

    @Zkaka – Interesting.

    @ Tonci – Nope.

  74. mivox Says:

    Can. Not. Wait.

  75. Says:

    Using it. Loving it. Release it :)

  76. Lex Says:

    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

  77. Zac West Says:


    - 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.

  78. Lex Says:

    Nice! Thanks