Access Your IDE Remotely With Projector
Today we’re announcing the initial release of Projector – a tool and framework for running JetBrains IDEs and Swing apps remotely over your network.
As you may know, Swing is a graphical widget toolkit for Java. Current JetBrains IDEs use Swing to draw the UI. The same is true for other IntelliJ-based IDEs, like Android Studio.
Even though it is generally a good thing that JetBrains IDEs and Swing apps are desktop applications, there’s a number of corner cases, like thin clients, that require a special approach. This is where Projector comes in.
Projector is a self-hosted technology that runs IntelliJ-based IDEs and Swing-based apps on the server, allowing you to access them from anywhere using browsers and native apps.
Use Cases
There is a wide range of special conditions that may require you to run an IDE on a server. Some of these issues are particularly common in large companies with huge infrastructure. Here’s a brief list of issues that Projector is particularly suited to address:
- Running code near the runtime or database to reduce roundtrips.
- High-security corporate environments.
- Really large projects.
- Local copy of source code is prohibited.
- User hardware constraints.
- Thin clients.
- The need to run the IDE in a GNU/Linux environment on Windows machines or even on non-conventional operating systems like ChromeOS.
- The need to turn off your computer while your app continues to work on the server.
- Remote debugging server-side (devtest, devprod).
- VM or Docker images with debug sources and a pre-configured IDE.
- A configuration that requires remote access.
Please be aware, Projector does not support collaborative development. If you need a collaboration tool, try Code With Me. We’re also working on a new remote development solution that combines the functionality of Code With Me and Projector. This will help further address network latency problems.
Open Source
Every aspect of Projector is published under an Open Source license. This is very important for companies that want to build custom solutions on top of this technology. We use the three most popular licenses:
- Client: MIT License (Expat)
- Server: GNU GPL v2.0 + Classpath Exception
- Dockerfiles: Apache License 2.0
We also invite you to contribute new features and bug fixes via GitHub pull requests. You can find GitHub links to particular projects below.
Architecture
Projector is client-server software. You run the IDE on your server, and then you can connect to it over the network. The connection between the client and server is extremely fast and lightweight.
You can think of this as a remote desktop solution like VNC, but it only displays the IDE windows and it is fine-tuned for maximum throughput for Java-based applications.
Projector provides multiple options for setting up a server or client.
Client Apps
You can use either a browser or native app to connect to the IDE. The native app offers better functionality (it offers keyboard shortcuts, for example), but it is only available for desktop operating systems. Currently, using a browser is the only option for mobile devices, but in the future we plan to create native clients for mobile platforms too.
Web Client
The browser experience is very similar to using an interactive website. There is, however, an option to enter fullscreen mode, which offers a more desktop-like experience.
You can control the properties of the web client by changing the URL parameters. For example, on mobile devices you can add the “mobile” parameter to the URL to enable overlay buttons, including the ability to open a virtual keyboard.
The web client is implemented using HTML5 Canvas API and should work in every browser that’s compatible with this API. It has been tested on Chrome/Chromium, Firefox, and Safari.
You don’t have to install the web client anywhere: it’s already included in the webserver part of Projector. All you need to do is enter the URL. All the code is available on GitHub.
Native App
You can use a native application for macOS, Windows, and Linux. The binaries are available here, and the sources are published on GitHub.
In addition to the expected benefits like Dock/Taskbar integration, this app supports keyboard shortcuts such as Ctrl+W/Cmd+W, which are usually unavailable in the browser client.
Server Side
Python Installation Script
Our installation script provides flexibility for installing server-side components. This is a standalone distribution, and it’s currently only available for GNU/Linux hosts. You can pick which IDE you want to install, along with its version, security options, and more.
Docker Images
Docker is the easiest way to run Projector in a cloud environment. We have a sample script that allows you to generate Docker images that contain JetBrains IDEs and Projector. This lets you run the IDEs anywhere that Docker is available. The IDE will be run headlessly and isolated, and you won’t have to install X11 on the server. The image is self-contained.
Instead of using DockerHub, we publish pre-built images using our custom Docker Registry. For example, this snippet allows you to pull IntelliJ IDEA Community Edition:
docker pull registry.jetbrains.team/p/prj/containers/projector-idea-c
IDE Plugin
Last but not least, you can install the plugin directly into your IDE without having to deploy server-side elements to a separate server. With this plugin, your device is the server. As always, you can find the source code on GitHub.
However, the plugin is much less isolated, which means you may encounter interactions with the operating system. For example, we can’t render the global menu on macOS.
Do It Yourself
Projector is a technology rather than an end-user solution. You can use it to customize your own infrastructure to meet the needs of your business. Ansible? Sure. Kubernetes? No problem.
You can build anything you want – assuming you have enough technical expertise. The code is open source, so there is nothing restricting you from changing whatever you want, or even contributing back to it! You can find more information, along with the most important server-side code, here on GitHub.
Projector still is a very young technology, but we believe that it has the potential to become one of the best solutions for remote IDE access. We’d be glad to hear your feedback. You can contact us anytime through YouTrack and Twitter.
— The Projector team