Coding on iPad using VSCode, Caddy, and code-server
Visual Studio Code has quickly become the text editor many people use for their day-to-day work. Its cross-platform compatibility, speed, and plethora of extensions make it an easy choice.
Coder.com’s code-server lets you run VSCode on a server and access it on any device, including an iPad. This is a natural pairing for Tailscale, which lets you secure a server, and easily access it from anywhere.
However, code-server isn’t safe to expose over the public internet, which usually leads to installing a public-facing ssh proxy or an http reverse proxy like nginx in front of it. Tailscale eliminates all that, giving you a fast, private connection no matter where you are.
Before you begin this guide, you’ll need a few things:
An iPad or similar tablet, or a laptop to access your VSCode server remotely. An external keyboard and mouse input will make writing code easier.
A server to host code-server. This guide assumes you’re using an Ubuntu 20.04 server, but the steps should be similar for most hosting providers and Ubuntu versions. You can also install code-server on a desktop computer or server at home.
Lastly, you’ll need a Tailscale account. You can create a free solo account in a few seconds.
After spinning up a new server, ssh into it with your account details.
ssh <username>@<server host ip>
From here, we’ll install Tailscale. First, add Tailscale’s package signing key and repository. (If you’re not using Ubuntu, skip these steps and follow our install instructions for your platform).
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/focal.gpg | sudo apt-key add - curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/focal.list | sudo tee /etc/apt/sources.list.d/tailscale.list
Then install Tailscale:
sudo apt-get update sudo apt-get install tailscale
And finally, authenticate and connect this server to your Tailscale network.
sudo tailscale up
Now, let’s confirm everything is working by ssh-ing into the server over Tailscale. We’ll exit the machine and re-ssh with our Tailscale IP.
First, find and copy your machine’s Tailscale IP. The easiest way to do this is to run
ip addr show tailscale0
And copy the 100.x.y.z address. Once you’ve found it,
exit your ssh
session, and start a new one with your newly copied Tailscale IP.
ssh <username>@<copied 100.x.y.z address>
If you’ve enabled MagicDNS on your network, you can use your server’s MagicDNS hostname instead of the IP address.
On your server, run the following one-line command to install code-server.
curl -fsSL https://code-server.dev/install.sh | sh
You can also download pre-built binaries from their GitHub releases page.
Once the installation is complete, configure code-server to start on boot by running the following command:
sudo systemctl enable --now code-server@$USER
code-server is now running on your local machine, on port 8080. Now, we’ll expose this server over Tailscale.
By default, code-server only allows access from the local device (127.0.0.1), and restricts access with a password.
Since we’ll only be accessing code-server over Tailscale, and Tailscale already uses your existing Single Sign-On (SSO) identity provider, there’s no need for password-based auth — we can already trust that you’re authorized if you can even access the server!
To do this, we’ll update code-server’s configuration. First, we’ll open up
the config file at
The default config file looks something like this:
bind-addr: 127.0.0.1:8080 auth: password password: <random-password> cert: false
We’ll update the
auth field to
none and remove the
password field, and
make the service available only on your Tailscale IP address.
After these changes, your config file should look like this (don’t forget to
<copied 100.x.y.z address> with your Tailscale IP address!):
bind-addr: <copied 100.x.y.z address>:8080 auth: none cert: false
Apply these changes by restarting code server:
sudo systemctl restart code-server@$USER
The last step is to install and sign in to Tailscale on your iPad. You can find Tailscale in the App Store. Make sure you log in with the same account as on your server, so the two devices can see each other.
Once you’re authenticated, you should be able to access your server from the
iPad by visiting
http://100.x.y.z:8080/. (Make sure to fill in the right
IP address or MagicDNS hostname!)
You’re done! Access your VSCode instance from anywhere. You can code from a café near your home or from the other side of the world. It’s all the same. And it’s only accessible over Tailscale.
There are a few caveats to coding on an iPad.
For more configuration options, explore the code-server repository’s FAQ documentation.
code-server works fine over plain http (over an encrypted+authenticated Tailscale link) but some features will be unavailable. To make it fully functional, you’ll need to set up https.
Then, use that cert by setting up a Caddy- or nginx-based web proxy.
Since we’ll be developing on this device, chances are it’ll have access to sensitive information: private code, private data, etc. To keep things safe, you may want to restrict all access to the server to only be over Tailscale.
For more details on how to further lock down a server, read our guide on Ubuntu and ufw.