We really love Atom at Pusher. Its customizability is hugely beneficial to our workflow, and its API is awesome and very well documented indeed. There is a big community building around it, and the product seems to get better with every release.

However, there was always one thing we wanted to do with it…

You see, we’re fairly big on pair programming, but many of us work remotely. Of course, there are many existing solutions to this: screen sharing, browser pairing, or not pairing at all.

But none of those quite suited our needs. We wanted something immediate, almost frictionless, something that dissolves the distance between collaborators. Atom, built on hackability, seemed like the perfect medium: to pair together within a text editor sounded ideal.

Therefore, we decided to build AtomPair, and now we want to share the ♥.

Tutorial: Building AtomPair

How Do I Get Started?

Install

First off, install Atom if you haven’t already. Now type into your terminal:

$ apm install atom-pair

Alternatively, go to the command palette via ⌘+⇧+P and go to Install Packages and Themes. Then search for and install atom-pair.

Invite

You can either decide to pair on a blank slate, or on existing code. If you invite somebody to collaborate on existing code, they will see everything you can, and their syntax highlighting will be synchronized with yours.

As detailed below, there are two ways you can invite others. Given a free Sandbox plan, there will be a maximum of 20 collaborators per session.

Basic Invitation

Hit ⌘+⇧+P, and in the command palette, hit AtomPair: Start A New Pairing Session.

You will be given a session ID, hit command+c and paste that to a friend.

 

HipChat Invitation

The other way – one that we use quite often – is to invite collaborators over HipChat, a service for intra-company chat. You can sign up for a free account here.

We wanted this partly as an easy way of giving collaborators a session ID, but also so that other members of the team could join in if they wanted to.

If you have admin privileges in a HipChat organization, go to your Package Settings (⌘+, -> ‘Packages’ -> ‘atom-pair’). Enter your HipChat API key and the room you wish the invitation to be sent through.

Now, when you enter AtomPair: Invite Over HipChat and enter your collaborator’s HipChat @mention_name in the command palette, they will receive an invitation with a session ID.

HipChat Invite

Slack Invitation

If you use Slack instead of HipChat, we have you covered for that too. It works pretty much the same way as the HipChat integration. All you need to do is log into your Slack account and click “Configure Integrations” and configure an “Incoming Webhook”. It will ask you to choose a channel you want to post messages to, but this doesn’t really matter too much, you will manually specify the channel or recipient when you send the invite. Once you set up your integration, it will give you a “Webhook URL”. You’ll need to copy this URL, and put it in your atom-pair configuration where it asks for a “WebHook URL for Slack Incoming Webhook Integration”.

To send the invite, simply enter “AtomPair: Invite Over Slack” and enter either the channel you want to send the invite to (#channel) or the person you want to send the invite to (@person). Once you do, all they have to do is join the session with the session ID and you’ll be pair programming!

HipChat Invite

Collaborate!

Once your partner has a session ID, they should go to the command pallette and hit AtomPair: Join a pairing session, and enter the ID.

Once there are more than one of you in a session, your collaborators will be represented by a coloured marker in the gutter, which will changed position based on their selections and inputs.

How To Use

 

To end a pairing session, go to AtomPair: Disconnect, and you will be disconnected from Pusher, and the file will be free for you to save.

Free And Open For Everyone

Currently, you are given default Pusher credentials when you install the package, so that you can get started with as less friction as possible. Communication will take place over a randomly generated channel name. However, for improved security, we encourage you to create a free account and enter your own app key and app secret by going to your Package Settings. A free Sandbox plan should be more than enough for your pairing sessions.

We’d Love Your Feedback!

Here is a current list of features:

  • Text synchronization
  • File-sharing
  • HipChat invitations
  • Synchronized syntax highlighting
  • Collaborator visibility.

But if there are any features you find lacking, feel more than welcome to get in touch.

Happy pairing!

  • Very cool! Is the source code available online anywhere? Would be great to see how this works under-the-hood.

    • pusherapp

      Hi Henry! We’re planning on publishing a followup blogpost in the next few days about how it was built. Thanks for your interest :)

  • When will there be slack integration :)

  • Luiz

    Hi, we’ve started a similar project almost in the same time. Please take a look at ours.

    It uses Operational Transformation to enable the colaboration, and it share the whole project. So, we can reproduce the opening, closing and switching tabs of files.

    https://github.com/motepair/motepair

    Luiz Filho

  • KC

    How well does it work, and is it /practical/ to have two or more people working on the same code at the same time? It may look good on paper, but from my experiences, it doesn’t work too well in practice.

    • LakeMendota

      For every-day coding it’s probably a bad idea. But it’s may be nice for situations where you need help from someone. I do remote training, and this hopefully be a good way for me to view and edit students’ code.

  • Francisco J. Belchí

    I love the plugin! great work :)

  • Jinseok Oh

    This is the kinda news makes me smile. Wins hands down over any TV shows. Yes, I’m a freaking nerd and no one likes me. :P

  • Sebastian Paul

    Slack Integration and I’m in!

About Jamie Patel

Jamie is one of Pusher's Growth Engineers, and loves playing with new technology and working some realtime magic on them. Originally a literature graduate and founder of two magazines, he enjoys exploring the creative side of coding and is continually looking to learn new things.