This page is part of my digital garden.

This page might be unfinished or have typos. These pages are meant as part of a public living notebook to be edited over time. For more, visit the page explaining the concept of a digitial garden.


What makes an iPad so interesting to use

  • Extreme Battery Life - The battery on iPads lasts a long time meaning they’re very useful for doing work on the go
  • Cloud and Remote computation - There is so much cheap and accessible compute in the form of free services or simply on-demand virtual private servers (AWS, Digital Ocean, etc.) that it almost doesn’t make sense to use a device with all that much power locally.
  • Extreme Security - While the Apple Store limits what you can do on the device, on the other hand worrying about anything except “State-Level Actors” is really not needed because the security on iOS is so much stricter than on a personal laptop.
  • Very usable - What is the point of computers if not to make things easier than they would be otherwise? iPads are extremely easy to use and still provide the extreme security that would otherwise require deep system administrative knowledge and constant maintenance.

An intersection of all these various features make it so that the limitations of the iPad are outweighed by things which simply aren’t possible on other platforms. There is no other thin, powerful, and efficient device which provides the same features except for maybe the new M1 Macs. Even then, the limitations of the iPad make it more secure in many aspects because there is not compatibility required with scripts and programs which do expect or properly handle the security restrictions which would be on iOS and iPadOS.

Development on the iPad

It’s possible to do development work via an iPad (mainly the Pro 12" version). The way this works is by basically turning the iPad in to an edit-only or thin-client like device.

This means the primary apps we’re looking for either allow easy remote control of computers (e.g. ssh terminals) or make it easy to sync the text files of source code so we can make some edits locally before running them remotely (e.g. git or scp/rsync clients)


The best apps for this are the following

  • Blink Shell - I have always highly recommended Blink, but their recent updates have added real OpenSSH support (including certificates) as well as an integrated copy of VSCode running on the iPad. Not to mention the rare support of mosh1 for connecting over bad connections. STILL Highly recommended
  • Working Copy - Provides the best git client on iOS period. Also makes it possible to read code and all of it’s history from anywhere. It is absolutely worth the money to purchase it and support the developer. Pretty much required, in my opinion.
    • (If nothing else Working Copy is the base of a lot of more advanced automations to because of the advanced and powerful support for many iOS/iPadOS File APIs most apps have not yet added support for)
  • Screens - Very capable VNC and MDP client which makes accessing remote Macs and VNC Servers super easy. I am not a fan of how it handles some authentication things1, but otherwise not much to dislike. The Mac app is also pretty much the best client there is for the Mac. If you need graphical access this is the app to get
  • Secure ShellFish - Made by the developer of Working Copy. Very nicely made app with Files integration for accessing remote files transparently via SSH/SCP. Paying for the app gives you Offline Caching of your files. It also offers using the same SSH access to provide a terminal when needed. The terminal is quite reliable and you can easily just buy this instead of Working Copy and Blink and you’ll probably be fine. I fine it useful for editing files locally, syncing changes back, and then running a few commands on a remote server like a build or deploy. Additional note, it lets you easily create and destroy servers in Digital Ocean to use for whatever you need a server for on-demand.
  • Textastic - Usually I prefer to ssh in to a computer and use vim, but for local editing very little can beat the list of features and flexibility of Textastic on iOS

Setup: Keyboard, Mouse, Stand…

When it comes to using an iPad for development you want to avoid making things worse than with a laptop. If you can using a stand or something to make the iPad slightly below eye level and 2/3 arms reach is good. This is a compromise to still make it comfortable to touch while not making you crane your neck.

A mouse, like the Magic TouchPad, is a good idea because the iPad now supports mice fairly well.

A keyboard like the Magic Keyboard is great because it’s wireless so keeping it separated from the iPad makes it much easier to use ergonomically.

Using a mouse and keyboard like this means you’re probably at a desk and if you have a monitor you can use a USB-C hub with the Pro iPads to connect any wired keyboards or mice plus your screen which will then mirror anything on your iPad. Some apps like Blink Shell actually support having separate terminals on each screen which can be nice.

That all said, many will be using the iPad on the go and using a Magic Keyboard case for the iPad is the best way to go with this because you get all the tactile feedback of the Magic Keyboard and niceness of the Magic TrackPad in a single case which holds the iPad up a little bit. It’s also one of the most stable cases to use in your lap while providing such a high quality keyboard/mouse experience.

An Idea: I have yet to try this, but it’s probably worth trying. Using the Magic Keyboard at a desk, but connecting the iPad to a screen then simply looking at the screen to avoid bending over to look at the screen. This keeps it close when touch is needed, but otherwise allows you to see everything nice and large on your screen.

  1. Either setup a RamNode instance to act as centralized WireGuard node, configure DDNS so you can use a home-server/nas as a WireGuard node, or sign up for Tailscale and install it on your computers you want to remotely access. The design of WireGuard actually makes networks feel more reliable (ssh in particular doesn’t disconnect as often) and the encryption ensures that even insecure protocols are safe to use and also avoid exposing. ↩︎

Last updated on