CodeTogether supports coding alone, or with a group while sharing a virtual cursor. Based on settings used to start the session, a single session can have multiple groups and individuals coding or browsing independently of each other. There is also a presentation mode where only the host has a cursor.

Note: When multiple developers are typing simultaneously in the same file, language features like content assist, validation, navigation, etc. will continue to work for each editor, but performance may be affected. We are continuing to improve the reliability of these features in such cases.

Shared Cursor or Your Own Cursor

Session participants can initially share a virtual cursor with the host or get an independent cursor.  When starting a session, the host can choose the initial cursor behavior for those who join the session, or allow participants to choose their cursor when joining the session.

Coding Together with a Shared Virtual Cursor

When developers share a virtual cursor, they typically share the same editing context—the same cursor position, and the same selection, in the same file. Based on editing permissions set when starting the session, all developers may be able to make changes to files by simply typing in the desired location. The following modes allow you to code together:

  • Dynamic Driver Mode—If the session was started in this mode, any member of the group sharing the virtual cursor can start driving by simply editing code, making selections, opening files, etc. Other members in the same group will automatically follow the driver. No explicit actions are needed to switch drivers, though if multiple members of the group are active at the same time, CodeTogether will intelligently assign a driver using recency of activity and cooldown periods. The current driver can explicitly make another member a driver.
  • Explicit Driver Mode (Strong-style Pairing)—In this mode, the current driver must explicitly grant the driver role to another member of the group—while group members can edit and navigate to different files, they will not change to the driver role unless the role is granted by the current driver.

Quick Investigations and Edits

You don’t need to be a driver to browse or edit code independently. Followers in a group sharing a virtual cursor can still browse code and even make edits without leaving the group, or becoming a driver. They can just navigate to the point of interest and make changes if desired—other members in the group and the driver are not affected by these actions. CodeTogether uses an intelligent system to allow the member enough time* to make their changes or browse code, bringing them back to follow the driver when appropriate. In the dynamic driver mode, based on other activity in the group, CodeTogether may also make this member the new group driver.

* Time is dynamically adjusted based on actions performed. More actions result in additional time being given to the user before being brought back to the driver’s context.

Coding Alone with Your Own Cursor

Coding alone is similar to coding in a regular IDE. The developer alone decides which files to browse or edit. Other participants in the session are not disrupted, nor do they follow along as the developer opens new files and makes edits.

Changing Your Virtual Cursor Mode and Driver

In the Virtual Cursors section of the CodeTogether view, simply double click on another group of participants to start sharing their virtual cursor, or click the Go to your own cursor node to start coding or browsing independently.

You have the following additional options based on the client you are using.

Eclipse & IntelliJ Options

An annotation in the bottom right of the editor will allow you to start/stop watching and to change the driver. Color codes are used in addition to the text to make your current state more clear.

  • Grey—Watching or waiting for others to join
  • Light Blue—Coding alone
  • Green—Driving
  • Yellow—Browsing or editing with another active driver who shares your virtual cursor

Use the Stop link to get your own cursor.

Use the Watch link to start sharing a virtual cursor. When already sharing a virtual cursor, this link allows you to immediately jump back to the driver’s context.

Use the Change Driver/Let <name> Drive link to grant the driver role to another group member. You will only see this option when you are the current driver.

You can turn off the Editor border and collaboration status from the CodeTogether Preferences—clear the Show collaboration status in editor checkbox.

    VS Code Options

    In VS Code, click the Editing alone, Driving, Watching status bar item, or the collaboration status button in the toolbar to start/stop watching, or to change the driver.

    Browser Options

    The following options are available when you join a session from a browser:

    • Use the Ctrl + K C hotkey to toggle between sharing a virtual cursor and having your own cursor.
    • In the collaboration status area of the menubar, hyperlinks will allow you to watch others (share their virtual cursor), stop watching (code alone), and change the driver.

    Using the CodeTogether View

    To see an overview of your active pair programming session, take a look at the CodeTogether view in the IDE or the browser. In the IDE, if signed in to a Teams account, you also get an overview of other team members online and sessions they are currently running. Several team specific actions are also available.

    In the IDE

    Open the CodeTogether view in the IDE as follows:

    • Eclipse—Select Window > Show View > Others > CodeTogether > CodeTogether.
    • IntelliJ—Select View > Tool Windows > CodeTogether.
    • VS Code—Select View > Open View > CodeTogether.
    Shown in IntelliJ

    In the Browser

    The CodeTogether View defaults to the right sidebar in the browser.

    Tip: You can click the CodeTogether icon to quickly show/hide the view.

    Shown in Firefox

    The tree in the view has multiple sections as described below.

    Note: Most tree nodes have actions that can be accessed by hovering over the node.

    • Virtual Cursors—All members in the session are listed under this node, with the file being actively edited by them displayed alongside. Double-click on any virtual cursor node, or click the Join Cursor button to share a cursor with that group of participants. Alternatively, use the View Cursor Location button to open the file being edited without changing your virtual cursor. In IntelliJ and Eclipse, these actions are also available via a context menu.
    • Terminals—Expands to a list of terminals shared by the host in the current session.  Double-click a terminal to open the terminal in your IDE or browser, or click the Focus Terminal button. The host has a Stop Sharing button which closes the terminal for all participants and removes it from their CodeTogether view. If you are signed in with a Teams account, you can request write access to the terminal by using the Request Write Access button or context menu action on the terminal. You can also request write access by attempting to type in the terminal. For additional security, the host must individually grant write access to each participant requesting it.

      Note: Once the host stops sharing a terminal, while it remains listed in their Terminals node, it cannot be re-shared in the current session. We’ll be making terminal sharing more flexible in future releases.

    • Shared Servers—On the host, servers that are detected automatically or added manually appear here. Hosts can choose to start or stop sharing a server anytime during the session. When a server is no longer shared, it disappears from the participant’s CodeTogether view and they can no longer interact with it.On the participant side, servers that are shared by the host appear under this node. Use the Connect Server action or double click to make the server available locally. The node then displays the local address for the server. You can use the Disconnect Server action or double click to disconnect from the shared server, freeing up the local port being used.
    • Recently Modified—Expands to a list of files that were recently modified in the current session. Double-click any file to open the file, or click the Open Modified File button.

    CodeTogether Teams Section

    This section is displayed if you are connected to a Teams account, or an on-premises installation.

    • Remote Sessions—Lists sessions your team members have running—you can join any session listed under this node without being explicitly invited to the session.
    • Your Teams—Expands to a list of teams and online members in each team. Use these nodes to invite team members to a session or ask them to host a session.

    Navigating and Editing in a Session

    Host-provided language smarts allow you to take advantage of a number of useful features when navigating and editing code in the session, regardless of whether you join the session from an IDE or browser. Refer to Participating in a Session for details.