The iPad has always been a bit of an awkward device to me. I've had a handful of them and I never really use them in the way that I tell myself I'll use them before buying one. On paper it sounds sweet, a bigger version of my phone, but for me personally it doesn't translate well. I either do stuff on my phone or on my computer, I never have the urge to reach for the iPad.

The last iPad that I bought collected dust like normal, but one day I asked myself is it possible to do web development on an iPad?

I do a wide range of web work, from installing WordPress websites, small HTML updates, and all the way to full featured web applications. My knee jerk reaction is that there is no way that you could use an iPad and do all the heavy lifting. While that's true for the most part, you'll be surprised at what you can do with an iPad and an internet connection.

There are some good apps to choose from

My first stop was to see what types of apps I would need or could use to do the job. I ultimately landed on Coda for iOS. The app is pretty fully featured. It does everything from editing code to syncing sites to web servers. It also allows you to connect to servers via SSH which I really like. Coda does cost $24.99 which is kinda pricey for "just a mobile app", I think the price is justified for everything that this app does.

Coda is great for HTML/CSS/JS all on client side and works well with shared hosts. They have a sync feature that allows you to make your changes live with a press of a button. If I didn't already use VS Code and Vim I would totally look at Coda for web development.

A good app isn't enough...

As good as Coda is it still can't grant you the ability to do full blown web applications of different varieties. For instance, I can't work with Rails apps on it, I would need to install other packages on the iPad which isn't allowed. However, like I said earlier Coda for iOS does have a great terminal app built-in, so that means I can SSH to a linux box and do whatever I want.

This... surprisingly... works pretty well*. What I mean by pretty well is if you have and like to use the stuff listed below then you'll have an experience similar to what you're used to when using a desktop or a laptop with these packages/software installed.

  • Linux VPS and/or Mac OS computer/server
  • Vim
  • Tmux
  • Git
  • A spare domain (not really needed, but can make things easier)
  • Decent internet connection

The same environment on all operating systems

Since you're using a VPS you can set the environment up once and scale up and down as needed. You can use something like Terraform and/or Ansible to keep changes and setup in code.

Check out my Terraform resource list here: https://medium.com/@lscott3/welcome-to-terraform-a-resource-list-ea3b33c1c285

Once everything is setup you can use your favorite terminal app to connect to the VPS and develop away. It doesn't matter if your host machine is Windows, Mac, Linux or... an iPad. As long as you can connect to the VPS you're in business. Your development environment is going to be consistent no matter the platform you're using.

If you are not currently renting a VPS I recommend Digital Ocean for your server/cloud needs. AWS and some of the other cloud solutions are a bit out of my league in terms of price (for now). Although you could use something like AWS lightsail and I'm sure the same would apply.

If you're interested in signing up with Digital Ocean use my referral link here: https://m.do.co/c/272fa8bc17e7 - You'll get $100 in credit over 60 days, which is awesome. I can't recommend them enough!

Showcase from anywhere

Since you're developing on a remote server that can be always on it's easy enough to serve up your app using Apache or whatever web server you want. This can come in handy if you need to demo some things to a client for feedback.

This also comes in handy if you need to work with web hooks or API's that need to communicate back to your development environment. You can use a development domain or the static IP provided to your VPS. Normally, I would use something like ngrok to handle this, but since the server is remote we can just leverage what a server is traditionally supposed to do - serve up files.

Cost

Obviously there is an ongoing cost associated with renting server space and that may or may not be a deal breaker for you. If you're able to keep your setup in code, you may be able to come out way cheaper than I did. Most cloud providers don't charge you if you don't have any instances live.

Coming up with a development environment deployment pipeline could be super beneficial here (maybe I'll give this a shot!). You could do a one click deployment to get the instances needed and code deployed to those instances to actually do development. When you're done, just destroy everything and repeat that process whenever its work time. This would also encourage you to have a pretty tight deployment process and keep things nice and snappy.

Security

A lot of concerns here haha! If you're working on mission critical applications or healthcare stuff this probably isn't the best route to go without hardening everything. Even then there are still so many loose ends that you'd need to tie up that I'm not sure if it would be worth it.

Is this really feasible?

I would say so. I actually developed like this for a little over a year and did a lot of my side projects this way. I didn't always use an iPad to do the work, but I did enjoy that I could have the same experience on my Windows and Mac machines. At the time Windows 10 didn't have bash available and it was pretty weird working from GitBash and using something to write code in other than vim in a terminal. The biggest downsides can be the cost, you HAVE to be connected to the internet, and all of your code resides somewhere else if you're not using source control (which you should be).

For most people I think they won't need to work like this, or even want to work like this, but it was something I wanted to test out and try.