DEV Community

Cover image for Truly Integrated Development Environment
stereobooster
stereobooster

Posted on • Updated on • Originally published at stereobooster.com

Truly Integrated Development Environment

When people say IDE most of the time they mean just glorified text editor, sometimes with the debugger, sometimes with autocompletion. In my opinion, the text editor is not enough to qualify as a development environment. As well we will need:

  • a compiler (or interpreter, or transpiler, etc)
  • an automation tool (make or similar)
  • a package manager (bundler, yarn, cargo or similar)
  • probably a version switcher (rbenv, nvm, rustup or similar)
  • a language server for more intelligent autocompletion (solargraph, typescript, flow, gocode or similar)
  • a linter or a type checker (rubocop, eslint or similar)
  • a formatter (prettier, gofmt or similar)
  • maybe a shell (bash, zsh or similar) and git

Solution

Recently I found a potential solution for a truly integrated development environment: Docker + "cloud IDE" (in-browser IDE). We can pack all tools in Docker container and some "cloud" IDE and configure all tools to work together, then you would use one command to run Docker container and fully working editor will be available in the browser.

I wasn't the first one to come up with this idea, so there are some options:

Theia:

docker run -it -p 3000:3000 -v "$(pwd):/home/project:cached" theiaide/theia
Enter fullscreen mode Exit fullscreen mode

Coder:

docker run -it -p 127.0.0.1:8443:8443 -v "${PWD}:/home/coder/project" codercom/code-server --allow-http --no-auth
Enter fullscreen mode Exit fullscreen mode

Eclipse Che:

docker run -ti -v /var/run/docker.sock:/var/run/docker.sock -v /local/path:/data eclipse/che start
Enter fullscreen mode Exit fullscreen mode

What would you expect from IDE? What it should provide out of the box?

Photo by NESA by Makers on Unsplash

Top comments (8)

Collapse
 
akosyakov profile image
Anton Kosyakov • Edited

You forgot to mention Gitpod (gitpod.io/) One defines dev env in Dockerfile, checks it in on GitHub, let Gitpod build it continuously together with the project, and then can open it in one-click on any branch and PR. It's based on Theia and used to develop Theia, see github.com/theia-ide/theia/blob/ma...

All other solutions are just IDEs without automation part, you still have to configure your tools and build everything manually.

Collapse
 
stereobooster profile image
stereobooster

Gitpod is basically Theia as service. I listed projects, not services so ¯\_(ツ)_/¯.

Thanks for developing Theia and co 👍

Collapse
 
gautamkrishnar profile image
Gautam Krishna R

Use jetbrains ides jetbrains.com/

Collapse
 
stereobooster profile image
stereobooster

Which points that I mention jetbrains covers (a compiler, an automation tool, a package manager, a version switcher, a language server, a linter or a type checker, a formatter)? For which languages? If it doesn't support required language (Haskell for example), can I write extension myself to add support?

Collapse
 
gautamkrishnar profile image
Gautam Krishna R • Edited

Sorry for the confusion. Yes you are right it is not a compiler, an automation tool, a package etc. I mentioned it because i found it easier to use the jetbrains ide more than any other ides since it has good integration with many programming languages. It even has a docker integration.

Collapse
 
carbonrobot profile image
Charlie Brown

Most modern ides accomplish all of this with plugins, allowing it to support any language. Vscode, atom, jetbrains, eclipse. Even your example of Theia is just vscode with specific plugins running in the browser using docker.

Collapse
 
stereobooster profile image
stereobooster

There is a difference between you can add it yourself or it comes out of the box packaged as one thing. My idea was to pre-pack everything in docker, so you can tun it with one command and have all tools preinstalled. Example github.com/theia-ide/theia-apps/bl...

Collapse
 
cookrdan profile image
Dan

This extension for vs code makes working within the docker container possible. Haven’t tried it yet.