Choice of IDE for Julia


The “official” IDE for Julia seems to be Juno, which based on Atom. Other options mentioned somewhere are: VS Code and Eclipse. Is there a big difference between them and Juno as far as completeness and usability are concerned? Any other IDE options? Should I just start with Juno and save myself unnecessary pain trying other options, at least for the time being?


I’ve been around the block with editors for Julia. I started with vi(m), then Sublime Text, then Atom, then VS Code. I’ve now gone back to Atom + Juno, though I have not tried JuliaPro yet.

IMO, having a plot pane and console within the editor is a huge advantage. All else being equal, I’d suggest Atom + Juno, even though it means I’m using a different editor for each of the 4 programming languages I’m currently using.


I use VIM for source code editing and Jupyter for prototyping and plotting. I am still not really satisfied with Juno, but I am also a hardcore VIM user, so this might be biased.

I like Jupyter ( because you can create slides and convert your notebooks to PDF etc. Also there are nice interactive widgets for UI elements like sliders, buttons, checkboxes and so on. I am using it for years (with Python and Haskell kernels) for my research and now also for Julia.

Simply install Jupyter via pip install jupyter and then use the Julia REPL to Pkg.add("IJulia"). After that, launch the Jupyter server with jupyter notebook and play around…


There’s also my Gtk based editor, I don’t really recommend it unless you are very adventurous: it got plenty of bugs and idiosyncratic behaviours.

That said I’m trying to use it as my main working tool these days and I find it quite productive. I haven’t tested it on linux since a while and it doesn’t work well on windows.


Any chance someone will integrate Julia and Spyder IDE?

That would be a big step forward.


Or just Pkg.add("IJulia") without pip.


Just because nobody has mentioned it yet: Emacs + ESS mode. Probably not the easiest option for a newcomer, but an excellent tool for an experienced Emacs user.


I am an Atom/Juno user. I think it’s great. The installation could still have problems now and then, but it’s pretty fully featured, has great keyboard shortcuts, looks nice, and nice and reactive (on my speedy computers that is, I have heard otherwise from others, but the computers I’m working on are pretty beast). I just want the breakpoint update and I’m happy.


Why would that be a big step forward?


After having mostly coded in emacs for about 5 years, then spending 3 years going through multiple IDE’s, I discovered that there is no conceivable reason to ever use anything other than vim and as a result I have been pretty fanatical about vim for the last two years (though I have to admit, atom is pretty nice). One should use neovim for various reasons that are explained there.

There are actually a couple of really good Julia plugins for vim and neovim. There is julia-vim (the gentleman who maintains it has done a magnificent job squashing whatever small issues have come up). There is also deoplete-julia which is Julia support for deoplete (and I can tell you from experience that deoplete is so nice and completely issue-free compared to YouCompleteMe). Finally there is julialint.vim for doing Julia linting.

Also, I personally think Jupyter notebooks are godawful, largely because I find editing in a browser to be the stuff of nightmares and having your code in some format other than a normal text file is aggravating for any number of reasons. There are several alternatives that supplant most of their functionality. There’s weave (a version of which is also available for Python here). Also I really like just keeping a browser window open which can browse my output since most browsers these days can open any type of graphical format (e.g. pdf, jpg, svg, png). You can even browse through files without having to type in the address if you use a simple HTTP server such as python -m SimpleHTTPServer. Eventually my ambition is to make a somewhat nicer HTTP server such that I can call it and weave from vim for this sort of work flow, thus rendering Jupyter completely useless.

Addendum: After having said all that, I also think Juno is a pretty good option.


The fact that Atom + Juno has a convenient way of evaluating code into other modules makes it a significant productivity booster. I despise Atom as a text editor (soo slow) but this feature is just too convenient when you have gotten used to it.


One combination I’m toying with more and more lately is Juno connected to a kernel running in a Jupyter notebook (Ctrl+Shift+P “Julia Client: Connect External Process” from Juno, then run the command it gives you in Jupyter). The advantage is that you can be evaluating code into whatever modules you want from Juno and thus be actively developing whatever package you’re working on, and this is reflected in the Jupyter notebook. Then in the notebook you can be doing free-form analysis work and getting all the goodness of inline plots which are saved for later viewing.


Thank you all for feedback and suggestions. I decided to go for batteries included option and installed JuliaPro (includes Juno and Jupyter). I will play with it for a while and see where it goes.


I share your frustration with Juno. But as you said it is the convenience of evaluating code into other modules makes it the to go option for serious developing. I have been wondering whether this could be added to emacs+ess, or in general other editors.


There is also, which builds on julia-mode to provide a REPL based on ansi-term. The advantage is that you get to use Gallium.jl (which the comint-based ESS mode cannot handle). The disadvantage is that it is a horrible hack :smiley:


While we are on the subject, what’s the practical difference between include_string(str) and eval(parse(str)) ? It seems Juno is using the former and vscode the latter.


@mkborregaard, it will make things much more familiar for MATLAB users.


I’d call that a small step forward :slight_smile: No, seriously, I just really like Juno.


eval(parse(str)) only handles a single expression, whereas include_string(str) can evaluate multiple expressions (on separate lines or separated by ;), returning the result of the final expression.


It also handles metadata like file paths.