Coding on an iPad: is it worth?
Tags: vscode, ios
Published: 2019-12-25 17:40:06

At the end of the year I faced the new experience of living without a laptop, occurrence which, as a software developer, never happened before.

While I spend my time at home that’s definitely not an issue: I have my desktop with dual monitors and a pleasant chair that suit my needs almost perfectly. But especially during the holidays, as I am travelling home to see my parents and old friends, that’s not an option and I decided to give a try into coding on my *iPad Pro 11”*, bought somewhen around one year ago.

Before proceeding further, I want to give you a bit of context about my coding needs. At the moment I mostly work with full-stack web projects, focused mainly on Python language for the backend and VueJS for the frontend. Considering this context, I usually need:

- several versions of the Python language
- virtual environments
- node and npm
- databases
- docker and related utilities
- git

Consequentially, even if today on the *Apple Store* there are plenty of nice applications for coding in a vast variety of languages and manage git repositories, everything else is – time of writing – completely missing, probably due to OS limitations.

Using something like _Pythonista_ would let me write Python code and even run it, but it would be impossible to use everything else one of my projects needs, like a *PostgreSQL* instance or *Redis*.

This let me with only one real viable option: a remote IDE, deployed somewhere, option that would let me use everything I need relying just on the internet connection. Considering the few free options out there, [code server](https://github.com/cdr/code-server) – a *VSCode* server implementation – caught my attention. The idea is quite simple in reality: you deploy a virtual machine with the Linux distro you prefer, install the package, and use it on the machine you prefer through the browser.

Since I have quite a long history of DevOps and Systems management, it took me just a couple of hours getting everything run safely and configured for my needs, even with themes and extensions for *VSCode*; it also requires just a few bucks per month for the virtual machine.

![VSCode on iPad](https://thepracticaldev.s3.amazonaws.com/i/j25rorxhol5h086wdjuf.jpeg)

So, after a few weeks, how was it?

Let me start answering with the *code server* project.
The experience is *almost* the same you have with a real instance of *VSCode*, with just a few exceptions and mainly regarding the extensions: in order to install an extension you need to run a specific command from the shell, and some of them seem just to be not compatible with this specific environment. But everything else, from the shortcuts, to the arrangement, to the terminal, are there, exactly the same.

Regarding the *iPad* experience the evaluation is quite complex in comparison.

First of all, I felt the *VSCode* interface is not really designed for **touch inputs**. The menus and small icon buttons are quite hard to *click* with the finger: you have to be quite precise to avoid erroneous taps on near elements. Even **scrolling** the code with the finger is a bit awkward, since the responsiveness of the input it doesn’t feel super natural. But the *Magic Mouse* was not an option here, since the *iPad* doesn’t support (yet?) its gestures, and consequentially you cannot scroll using the mouse :-/

Then it comes the keyboard. Now, I’m not sure I completely understood what is wrong with keyboard bindings in iPadOS or Safari, but **keyboard shortcuts**, that generally work out of the box at the beginning, start to get weird as soon as you start switching between different panels, or even different apps. For instance, if I resume the editor ‘cause I was in the browser checking something, and I opened one time at least the terminal, hitting *cmd + F* in order to search something in the code gets you to the terminal search. And it seems not to be possible to instruct the editor to get back over the code, as the only working thing seems to close the editor completely and reopen it. Also, the actual implementation in *iPad OS* add a small bar in the very low section of the screen while you’re typing, but since the editor is in full-screen mode, it gets a bit weird since it covers the last lines of the code, even if you’re writing on those lines.

Now, the two issues I just described get you mad few times during the day, but the most annoying thing in coding over an *iPad* for web development is the absence of a valid **browser inspector** and a console. Now, I even tried a couple of paid apps from the Store, but in general they work pretty bad and it’s almost impossible to use those tools in the same way you do on a Mac or a PC. And, trust me on this, trying to design Vue components without an inspector or a Javascript console is the **perfect way to get completely mad and crazy**.

Except for these points, I have to admit that I managed to run everything I usually have on a proper computer: starting containers using *docker-compose*, testing, merging changes with git, use the shell and all the cli tools I need; everything was possible with this solution.

Also, coding over an iPad with 11” screen is the most portable setup you might ever have: even coding during a train rail or a flight is super comfortable compared to a super light MacBook Air. And, bonus point: it doesn’t heat you while you’re compiling stuff, which is, by definition, super cool :)

Putting together all of this, I came up with these ratings for this setup:

- Code server **4/5**
- Mouse usability **1/5**
- Keyboard usability **3/5**
- OS functionalities **2/5**
- Portability **5/5**

And to answer the question from the title: *is it worth?*

I think that, when it comes to web development, the main issue preventing you from having a proper environment is the lack of daily tools like a decent inspector or a fully functional javascript console in the browser. I mean, it might be a solution for travelling, but I think **is quite hard today to use this setup as a computer replacement**.

On the other side, if your development is mostly backend oriented or involves solutions not requiring constant checks over UI components, then yes, for sure it can be a productive every day solution for you.

And, if you don’t need any database or utilities, you can even use one of the **good editors now available on the Store** and skip also the configuration of a remote editor.

In order to make it completely functional for my needs, it would need a bit of fixes in *coder server* regarding input handlings over an *iPad*, and a solution for the inspector.

But hey, 2020 is almost here, and I hope new options will came in the next months :)