Space
The intelligent code collaboration platform
Space and SpaceCode will be discontinued on June 1, 2025. Learn more → →
How To Get Started With Space Cloud Dev Environments
Are you thinking about introducing remote development into your team or organization? JetBrains’ remote development workflow allows you to overcome the limits of local machines and slow laptops by keeping your source code safe and secure on a remote server.
With the orchestration functionality included in Space, you can create a dev environment, connect it to your favorite JetBrains IDE, and start coding in seconds.
In this blog post, we’ll look at how to get started with dev environments in Space!
Create a Space organization and a first project
To get started with dev environments in Space, you will first need to create a Space organization. A free plan is available with some credits so you can try out remote development.
After logging in to your newly created Space organization, you’ll need to create a project. Click the + icon on the bottom left-hand side of the screen, and then select Project. We’ll only be using this project to try out remote development, so any name will do.
Projects in Space bring together repositories, issue tracking, CI/CD, package registries, and much more. If you’re interested in any of these aspects of Space, we encourage you to explore them further.
Create a mirrored Git repository
Once you have your project set up in Space, you’ll need a Git repository to work with.
Space comes with its own Git hosting. If you already have an existing Git repository that contains your code, you can choose to either migrate it to Space or enable repository mirroring.
When you create a mirrored Git repository, Space makes a copy of your existing Git repository and keeps the two synchronized at all times. Any code pushed to your existing Git repository will appear in Space, and any code pushed to Space will be automatically added to your existing repository. This is true for all branches and tags.
Install any JetBrains IDE (or JetBrains Gateway)
To connect to a dev environment that is running in Space, you’ll need to install either a JetBrains IDE or the standalone JetBrains Gateway on your machine. The latter is a compact desktop application that allows you to work with a remote instance of a JetBrains IDE.
Note: If you have the JetBrains Toolbox App installed, you can use it to install JetBrains Gateway.
The JetBrains IDE (or JetBrains Gateway) configures the connection between your local machine and the remote dev environment and launches the thin client that connects to the remote machine. You can also use it to manage dev environments in your Space organization without having to use the browser.
Create a dev environment
Once you have a Git repository in Space, use the Open in IDE button to create your first dev environment. In the dialog that opens, choose the instance type your remote IDE will run in, as well as the JetBrains IDE and version you want to work with.
In Space Cloud, there are a couple of instance types that can host your remote environment: a Regular virtual machine size with 4 CPUs and 7 GB RAM, as well as Large and Extra Large options with additional CPUs and memory.
When it comes to IDEs, you have a variety to choose from: JetBrains Fleet, CLion, GoLand, IntelliJ IDEA Ultimate, PhpStorm, PyCharm Professional Edition, Rider, RubyMine, and WebStorm.
Note: The default version, which will be selected automatically, can be configured for your Space organization. For each IDE, you can set the default version in Administration | Dev Environments.
When you’re ready, click Create. This will provision the selected virtual machine and IDE, and prompt JetBrains Gateway to connect to your dev environment.
Congratulations, you now have your first dev environment running! In the remote IDE instance, you can write and refactor code, run and debug your apps, and more. If you enabled Git repository mirroring, any changes you commit and push to Space will automatically be replicated back to your existing Git repository.
Hibernate your dev environment
Your Space dev environment will be hibernated when it goes unused for more than 30 minutes. Hibernation stops the underlying virtual machine so it does not consume resources unnecessarily. In addition, you can hibernate your dev environment manually in Space by navigating to the Dev Environments screen in your project:
From Space, or from within JetBrains Gateway, you can always restart a dev environment and continue where you left off. In Space, click Open IDE to restart the environment and connect to it. In JetBrains Gateway, you can click on the environment name to do the same:
Space makes sure the project directory and the $HOME
directory are preserved during hibernation, so uncommitted code changes will still be there when you reconnect to the dev environment.
Customize your dev environment with devfiles and Dockerfiles
When you create your dev environment, Space provisions the virtual machine based on the instance type and IDE you select in the dialog. If you want to specify your own default values for your project, you can add a devfile to your repository. With a devfile, you can set the default instance type, the default IDE and version, specific environment variables and secrets, and more.
A project may have a single devfile.yaml
file or several *.devfile.yaml
files located in the .space
folder in the repository root. Here’s an example devfile.yaml
file that preselects a large instance type and sets IntelliJ IDEA Ultimate version 2022.2 as the default IDE:
schemaVersion: 2.2.0 attributes: space: instanceType: large editor: type: Idea version: '2022.2'
When you next create a dev environment, Space will automatically fill in the settings for the dev environment based on the selected devfile:
But wait! There’s more! Your dev environment will run in a container on that virtual machine using the default Space container image. The default Docker image is based on the Ubuntu OS and includes tools like Git, curl, Docker, Docker Compose, Kubernetes, Google Cloud, Open JDK, Python, PHP, the .NET SDK, Ruby, Go, Node.js, npm, yarn, and others.
You can customize the container image that is used to provision your dev environment by adding a custom Dockerfile
to your repository. Here’s an example Dockerfile
based on Ubuntu 20.04, with some additional tools and JDK versions installed:
FROM ubuntu:20.04 ENV DEBIAN_FRONTEND=noninteractive ENV LC_ALL=C.UTF-8 RUN apt-get update && apt-get install -y apt-utils apt-transport-https RUN apt-get install -y \ # Utilities \ curl unzip wget software-properties-common socat man-db gnupg2 pass lsof \ # VCS \ git \ # JVM \ openjdk-8-jre-headless openjdk-11-jdk-headless openjdk-16-jdk-headless openjdk-17-jdk-headless maven \ # Docker docker docker-compose \ # Required tools cowsay \ # Reduce image size && rm -rf /var/lib/apt/lists/* ENV PATH="${PATH}:/usr/games" ENV JAVA_HOME=/usr/lib/jvm/java-16-openjdk-amd64
Note: When using a custom image for remote development, we recommended always installing a number of command-line tools, such as curl
, unzip
, wget
, lsof
(to enable port forwarding in the remote IDE), and git
.
To use a custom Docker image for your dev environment, you’ll need to update your devfile.yaml
file and specify the path to the Dockerfile
in your repository:
schemaVersion: 2.2.0 attributes: space: instanceType: large editor: type: Idea version: '2022.2' components: - name: image-build image: imageName: myapp:latest dockerfile: uri: .space/Dockerfile
Once done, the remote IDE will run in a container that uses your custom Docker image.
Warm up your dev environment to start it faster
When you start a new dev environment and connect to it, there’s a good chance you’ll see the remote IDE resolve project dependencies, build indexes, and perform other background activities. Depending on the size of your project and the number of dependencies, this may take some time.
The good news is that you can speed this process up significantly by building a warm-up snapshot. Warm-up snapshots are created with Space Automation. In the root of your repository, you can add a .space.kts
file and configure how your dev environment should be warmed up.
Here’s an example .space.kts
file that defines a job that runs every night. It downloads all Git branches, and then runs the steps to prepare a warm-up snapshot with the IDE configured in our devfile.yaml
file:
job("Dev Environment Warmup") { startOn { schedule { cron("0 5 * * *") } } git { depth = UNLIMITED_DEPTH refSpec = "refs/*:refs/*" } warmup(ide = Ide.Idea) { devfile = ".space/devfile.yml" } }
After you’ve warmed up your dev environment, everyone in your Space organization will benefit from a faster startup time, with project indexes ready to go.
One more thing – you can run additional steps as part of the warm-up. In your .space.kts
file, just add a scriptLocation
parameter that tells Space Automation to run a specific script file:
job("Dev Environment Warmup") { // … warmup(ide = Ide.Idea) { devfile = ".space/devfile.yml" scriptLocation = "./dev-env-warmup.sh" } }
The ./dev-env-warmup.sh
file in your Git repository can perform steps such as an initial mvn install
or npm install
to pre-populate dependencies in the environment, further reducing the time it takes to start a new dev environment and get coding.
Note: Space Automation can be used for many other tasks, including continuous integration (CI). Check out our documentation to learn more.
Summary
Space is a complete software development platform that offers remote development orchestration functionality.
You can create and work with dev environments to code on a secure remote machine in the Space cloud. With custom devfile.yml
files and Dockerfiles, you can fine-tune how your remote development environment looks, while warm-up snapshots can help reduce the time it takes for your dev environment to start up.
In addition, Space covers the entire software development lifecycle, from hosting Git repositories, automating CI/CD, and publishing packages to managing issues, documents, and chats – all in one place and integrated with JetBrains IDEs. Give it a try!