
Container IDE with cloud connection
Something for Everyone
Classic IDEs usually come with an editor, a compiler, and a debugger. Gitpod Software-as-a-Service (SaaS), on the other hand, provides an integrated development environment with an editor plus a run-time environment as needed, which you call in the browser without having to worry about the technical underpinnings.
The Rub
Everyone will be familiar with this scenario: A project you recently discovered and find pretty exciting provides detailed documentation; however, for the build process, you need the A, B, and C libraries and some additional tools – all of this, of course, in versions that your distribution choice does not provide. Developers either have to grin and bear the installation overhead, or they can resort to a virtual machine or Docker image.
Although this solution might work well for individual developers, this is not the case in teams. Companies usually roll out development environments centrally to ensure uniformity. Local installations on developer PCs sooner or later diverge, and setting up central test servers to recapture the differences between development environments comes with its own set of problems. For example, sys admins prefer to manage production systems rather than test systems. Shared use also requires caution on the part of the developer. Otherwise, one developer could destroy another's carefully constructed test record in the shared database.
Docker instances are a potential solution. Docker starts and configures its images reproducibly according to configuration files. If these are also in the project's version control system, theoretically all developers should get their own image, but with identical software stacks. However, managing Docker is not a developer's core business. If the development environment removes the need for this work, it leaves more time for more important things. This is where Gitpod [1] comes in.
One Pod, One Word
The technology behind Gitpod picks up on relatively new developments from the open source scene. Besides Docker, it uses the Eclipse Theia [2] editor. The special bonus the Gitpod makers add is that the whole enchilada is bundled into an easy-to-use package.
Registration
You can log in online [1] with your GitHub ID; after all, Gitpod does not want to reinvent the wheel. GitHub [3] is required as the version control system, and GitLab support [4] is a work in progress.
The company behind Gitpod offers three price models: Open Source, Personal, and Unlimited. The first variant costs nothing; however, it can only be used in combination with public repositories. Moreover, Gitpod limits the up time of the Docker containers to 100 hours per month.
The Personal variant allows private repositories, as well, but only for non-commercial purposes. The time limit remains in place; costs are $9/month per person. Even the Unlimited plan without restrictions is not really expensive at $39/month per person. Students can even get this for $9.
All told, these conditions are fair, because the first two stages let you work with Gitpod for three hours a day. It remains to be seen whether or not this price model will work for the vendor.
First Steps
After logging in, you do not call the GitHub URL of your project directly, but add a prefix (e.g., https://gitpod.io/#<GitHub Project URL> (Figure 1). It is even easier with a browser extension for Chrome or Firefox, which displays a Gitpod button on GitHub pages (Figure 2). Direct links to the add-ons can be found in the online documentation [5]. The extensions can be installed in the browsers in the usual way.


The example in Figure 1 uses an arbitrary public GitHub repository. The user does not have to be the repository owner. Gitpod works with any project to which you have access and that fits your pricing model. When the URL is called, Gitpod creates a workspace and opens the README file, if available.
The setup happens surprisingly fast. The standard workspace automatically supports a variety of common programming languages. Visually, it is divided into three areas: The project's directory structure appears on the left, and the right-hand side shares an editor window at the top and a terminal at the bottom. In addition to the default dark theme, an inverse bright variant is also available.
Workspaces
Workspaces are a central term in the Gitpod world. Technically they are Docker containers that form the working environment for programming and testing. Gitpod automatically creates workspaces and stops them after 30 minutes of inactivity – or five minutes after you quit the browser. Because active workspaces burden your account, this automatism also saves resources. From the avatar at the top right, click the Stop Workspace menu item to trigger this process manually.
In the background, Gitpod automatically saves changes (e.g., code edits or configuration file updates) to the workspace. They do not end up on GitHub without an explicit commit, however, and Gitpod never deletes stopped workspaces. The dashboard, which you can also access from the menu, displays a list of all available workspaces (Figure 3). Old workspaces can be restarted, archived, or explicitly and irreversibly deleted here.

Workspaces are based on Docker. In contrast to Docker's philosophy of one Docker image per active application, a workspace includes all the services you need. For example, if a program offers a web interface, Gitpod opens the corresponding port to the Internet, if required. Details can be found in the documentation [5].
Editor
Instead of programming a new editor, the Gitpod makers simply use Theia, which is the web version of Visual Studio Code (VS Code) [6]. If you are reminded of Microsoft's classic integrated development environment (IDE), you're not completely wrong, because the editor, which was developed entirely as open source, originally came from Microsoft. I even prefer VS Code myself, now, despite being a decade-long XEmacs user.
One killer feature in VS Code is the ability to install any of numerous plugins in seconds at the touch of a button, which, however, is not yet possible with Theia, although the Gitpod developers are working hard on the implementation.
Having a web editor and local editor that are similar in look and feel is useful. Theia (or VS Code) offers extensive configuration options. Key mappings in particular can be adapted to suit your preferences.
The editor comes with syntax and style checks for many languages, as well as context-sensitive help for functions (Figure 4). At the touch of a button, Theia completes the code or inserts a code pattern. All in all, this significantly improves the quality of the code as you type.

GitHub Integration
As mentioned previously, you always launch the Gitpod IDE in the context of a GitHub project. However, the integration goes even further. Besides a project path, the Gitpod prefix or button also lets you open a file, an Issue, and a pull request.
In the first case, the Gitpod IDE opens the corresponding file in the editor. In the second case, Gitpod creates a local branch with the name GH-<Problemnumber>
, in addition to preparing immediately a matching commit message. In the case of a pull request, Gitpod opens a view specially suited to code reviews.
Besides integration on a project-specific basis, Gitpod also supports working with the version control back end in various windows. Gitpod highlights changes, both in the Explorer by tagging directories and files with an M (for modified) (Figure 5) and in the code itself (for changed lines).

The Git view lists the modified files again. With the icons to the right of the files (Figure 6), you can run the usual Git operations (e.g., add or commit). Of course, you can also do all of this at the command line in the terminal window.

Adjustments
Gitpod's standard workspace provides comprehensive support for multiple programming languages. Nevertheless, the referenced Docker image does not cover all needs. For example, in one of my projects, the python3-bottle package, which is missing in the Ubuntu environment of the standard workspace, was indispensable. In such a situation, you will have to manipulate Docker slightly and adapt the workspace. Simply reinstalling a package does not work because the default gitpod user in the workspace lacks root permissions.
The .gitpod.yml
configuration file turns out to be the central element in such a scenario. It points to a Docker file, the official building instructions for the Docker image, and other configuration settings for the workspace (e.g., a command for calling Gitpod after creating the workspace).
A very minimal version of .gitpod.yml
defines the Docker file for the project:
image: file: .gitpod.dockerfile
The project name can be freely selected, which allows for adjustments to the standard workspace, even without Docker skills and complicated hacks. One of the simplest steps is reinstalling project-specific packages:
FROM gitpod/workspace-full RUN sudo apt-get update && sudo apt-get install -y && python3-bottle && sudo rm -rf /var/lib/apt/lists/*
The first launch of a workspace with its own image takes a little longer, because Docker has to build the image first. If you use a public Docker image from Docker Hub instead of the standard image, you need to plan for additional time: The Gitpod infrastructure has to retrieve the base image from the Internet first.
Gitpod offers an additional GitHub app that immediately rebuilds the workspace in the background if changes are made to the project, thus saving valuable time at first launch. If you want to prepare your project for Gitpod in the best possible way, you should check out the Gitpod blog post about "Gitpodifying" [7].
Conclusions
Gitpod offers everything a developer needs for productive work: an editor, a command line, and a GitHub connection. All you have to do is register with the project once; you do not need to install any other software on your development machine.
However, this scenario only works in the online world. Gitpod can cope with brief interruptions, because the browser keeps the session alive, but offline work is not possible. If you want to program on the go, you need a good mobile network connection, or at least a rudimentary development environment. The combination of Git, VS Code, and Docker is an obvious choice.
The developers of Gitpod are constantly working on improvements. The current roadmap includes GitLab integration, editor plugins, and Gitpod Enterprise, a solution intended for corporations that want the benefits of Gitpod but do not want to entrust their source code and test data to a cloud system.