Working on Surface Pro X

7 minute read

About a month ago, I refreshed my device - Dell XPS13 with Surface Pro X. The major difference between these two for me was ARM64 processor architecture, which I was initially quite skeptical about.

I first got my hands-on with Surface Pro X in February during Microsoft Ignite Tour in Prague, one of the last events I attended in person before COVID-19 lockdowns started. Just for fun, we installed bunch of apps like Visual Studio Code, Git, .NET Core on the device and it all worked! Obviously the Win32 emulation did its job. I also really liked the fan-less experience of the device, since the device is pretty silent thanks to it (no more “flying to the Moon” situations).

…couple months later, a present arrived - Surface Pro X!

After initial Windows setup, upgrading to Pro edition (to have full BitLocker controls and MDM support), I installed bunch of essential apps which I use on daily basis:

  • Visual Studio Code (has full ARM64 support)
  • Windows Terminal
  • Bitwarden
  • Microsoft Office
  • Microsoft Teams (more on that later)
  • WinSCP (via Microsoft Store)
  • OpenSSH (native Windows feature)
  • .NET Core SDK (Win32 emulation)
  • Node.js (Win32)
  • Git (Win32 emulation)
  • and bunch of other apps

I haven’t hit any issues except for the OpenSSH feature, which didn’t seem to execute, but luckily, it was as simple as adding C:\Windows\SysNative\OpenSSH to my PATH (thanks Reddit).

Since installing wasn’t any issue, I started using the apps the way I use them. In few Twitter threads I saw that people use the PWA version of Outlook on the web, so instead of installing full Outlook, I ended up with trying the PWA version - works pretty nice and no OST file is present on the disk to consume storage. The PWA suports notifications, which are pretty nice as well, and if I need to compose something while offline (yeah, the Outlook PWA doesn’t really work offline at the time of writing), I can just use Mail app present in Windows 10.

I actually switched to bunch of PWAs since then, Spotify for example. Still thinking about switching to Office on the web, however since it is quite complex to open local files (even with OneDrive enabled), I am probably not going to do that anytime soon.


Probably the most important part of this topic - how the heck do you develop on ARM64? Simple - you don’t. There’s bunch of featur requests and ongoing issues (with OmniSharp, Azure Functions, …), however it is just SDK related stuff, you can nicely run the apps (but just don’t have the development comfort). What works very nicely is TypeScript / Node.js development.

Saying I don’t develop on ARM64 is true, I develop on regular machine to which I remotely connect. At work, I have a desktop workstation (from my gaming years) which runs smoothly. I then use the Remote Development tools in VS Code to connect to my PC remotely via SSH and done.

Enabling SSH host on Windows is simple - check the docs, if you are using admin-enabled account, you need to take an extra step.

At work I have Wake on LAN setup (or wake on phone if it fails). However trying to use cloud-first environments, I also setup two machines in Azure - one on Windows and one on Linux. Both have most of my most common tools and SDKs installed, so I can just connect to those via SSH from anywhere.

But Microsoft also has GitHub Codespaces (formerly Visual Studio Online / Codespaces). I have been one of the lucky people who have access to the preview version. Using Codespaces from VS Code is as simple as connecting to my own machine - I suggest you give it a try.Pretty powerful.

Speaking of PWAs, you can also use GitHub Codespaces as a PWA (app per project though).


I can’t skip this part - using a device, which isn’t really meant for gaming but still gaming on it? Hell, yea! There are few ways to achieve this right now - selfhosted version, which I use as well is Parsec. Simply setup an NV-series VM in Azure and you’re good to go to play literally anything. There are really good articles on the internet how-to set it up, so not going to go into this (there is also an official VM prep tool available). But if you don’t want to bother with setting up your VM, you can go with NVIDIA GeForce NOW (which I had the luck to testsince early preview as well). Another alternative in future may be xCloud on PC, which is unfortunately only available on Android at the time of writing.

So as you can see gaming on Surface Pro X isn’t an issue either.

Other experiences

I also wanted to write a little bit about Microsoft Teams… It took Microsoft literally months to bring Teams to ARM64 which is really a shame. I love Teams, use it on daily basis, but not having a native support on the release day of such a device like Surface Pro X isn’t really a good marketing. The good thing is, that even though the official installer for ARM64 isn’t available yet, there already have been leaks containing the installer, which greatly improves Teams performance on ARM64.

Another great benefit is built-in LTE module, which already came handy few times for me (it also supports eSIM).

Battery life is also very nice, I can use the device for about 8 hours without the need of charging.

Connectivity in general is good. You get one Surface adapter, which is also a charger, with the awesome feature of a built-in USB charger for your phone or another device and two USB-C ports. Getting a USB-C adapter is a must, I carry a Microsoft USB-C Travel Hub, so I can pretty much connect to anything, except for my Audio Jack headphones from Apple.

I use AirPods with my iPhone, however the AirPods experience on Windows isn’t really so great. You can use AirPods as sound output, but not as input at the same time - but it looks like a Teams-related issue rather than general system issue (1, 2).

One more thing which I am really looking forward to is the x64 emulation which should be coming soon to all ARM64 based devices with Windows 10!

All in all, this is a great experience and I am really in love with my Surface Pro X!

Leave a Comment

Your email address will not be published. Required fields are marked *