<type>documentation</type>
<domain>proj</domain>
<id>remote-hosts</id>
<title>Remote Development</title>
<date>$Date: 2010-05-14 11:53:19 -0400 (Fri, 14 May 2010) $</date>
<version>$Revision: 22093 $</version>
<product-version>6+</product-version>
<product>pro+</product>

Wing Pro can work with Python code that is stored on a remote host, device,
virtual machine, or container in the same way that you work with code stored
locally. This includes editing, debugging, testing, searching, version
control, running a Python shell, executing command lines, and project
management.

Remote development is supported to macOS and Linux (Intel or ARM). A detailed
list of supported remote host types is available in `Supported Platforms
<ref:install/supported-platforms>`__. Wing Pro itself can be running on
Windows, Linux, or macOS.

The form of remote development documented here works directly with files and
resources stored on the remote host. If you are working with 
containers like those provided by Docker, then please see `Working with
Containers <ref:proj/containers>`__ for an approach that is more appropriate
for cases where a container is built from locally stored files.

How it Works
------------

Wing's remote development support works by installing a remote agent that carries out
operations on the remote host. All communication to the remote host is over secure SSH
tunnels, one to access the remote agent and one for the debugger.

.. image:: remote-agent.png

Files are stored on the remote host, and everything you do is run on the remote host,
including running tests, debugging, executing files and command lines, searching, and
issuing version control operations.

The remote agent replaces the need for setting up file sharing to the remote host,
manually establishing SSH tunnels, defining file location maps, and other manual
configuration steps required for remote debugging in Wing 5 and earlier.

If you have used ``wingdbstub`` for `manually configured remote debugging
<ref:debug/manual-remote-debugging>`__ in the past, you can continue to use that approach.
Or you can switch to the new approach, which supports both launching your remote debug
process directly from Wing or continuing to use `wingdbstub through the remote agent
<ref:debug/remote-debugging>`__ if you need to launch your code from outside of the IDE.

If you prefer to store the master copy of your code on your local system, you can do this
as well by setting up file sharing to the remote host using Samba, NFS, or other method.
However, you will still use the remote agent to access the files on the remote system,
rather than opening them directly from local disk into the IDE.

Configuration Overview
----------------------

There are several steps in setting up remote development:

**1) Set up SSH access to your remote system.** In many cases this is already in place,
using ``ssh`` or ``plink`` on the command line. Wing can just invoke those command line
tools, or you can configure Wing to use its own built-in SSH implementation.

**2) Define a remote host configuration** to tell Wing about the remote host and how to
access it.

**3) Set up a remote project** in much the same way as is done for local projects.

These steps are detailed in the next three sections.
