How do I ride completely solo on Zwift?

Riding Zwift solo

This article is specifically about riding on Zwift 100% solo, even when the default course of the day is full of riders, for example riding on Watopia solo, while 600 other riders are also riding on Watopia.

If you just want to choose a different course to ride, for example riding on Watopia while the default course is Richmond, read the following KB article:

The above article describes how to ride on the "other" (non-default) course, which may not be what you want.

If you want to ride Richmond solo and it's a Richmond day, that workaround won't work, so that's why I came up with the "ApocaZwift©" solution that does give you this capability and doesn't require changing your Zwift configuration or messing with your PC clock date (and all the downstream impacts that brings)

Use ApocaZwift (© David A. Desrosiers, 2015-2020)

The quick-and-dirty way to set up ApocaZwift© is to set up some firewall rules to block (filter) traffic on port 3022 coming to and from Zwift. This lets you ride, create a .fit file and keep the course fast and responsive with no other riders on it. Here's how:

Microsoft Windows:

  1. Turn on the firewall from an elevated command prompt (if you don't know how to open an elevated command prompt, please Google that, as that is out of the scope of this KB article):
    netsh advfirewall set publicprofile state on
  2. Set the rules that restrict Zwift from attaching to the WAN. Make sure these are all entered on the same line. I've wrapped them here for readibility:
    netsh advfirewall firewall add rule name="Single User Zwift" 
      dir=out action=block 
      program="C:\Program Files (x86)\Zwift\ZwiftApp.exe" 
      description="Run Zwiftin Single-User Mode (no riders or NPCs)" 
      enable=yes localip=, 
      remoteip= remoteport=3022 protocol=udp

    Now you can ride on Zwift with no other riders at all.

  3. To delete the rule we just created, if needed. You can either choose to leave it in place and enable/disable it as you see fit later, or just remove it by using the following syntax:
    netsh advfirewall firewall delete rule name=SingleUserZwift 

Apple OS X

  1. Set the rule to drop all incoming rider data:
    # These next 3 lines are all one single command, but wrapped here for clarity
    (sudo pfctl -sr 2>/dev/null; echo "block drop quick on en0 \
    proto udp from to port = 3022") \
    | sudo pfctl -f - 2>/dev/null
  2. Validate that the rule is in the list of rules to be executed:
    $ sudo pfctl -s rules -v
    No ALTQ support in kernel
    ALTQ related functions disabled
    block drop quick on en0 inet proto udp from to port = 3022
      [ Evaluations: 1480      Packets: 0         Bytes: 0           States: 0     ]
      [ Inserted: uid 0 pid 80892 ]
  3. Enable the rule we just created:
    $ sudo pfctl -e
    No ALTQ support in kernel
    ALTQ related functions disabled
    pf enabled
  4. Removing the rule we just created, to restore our configuration:
    $ sudo pfctl -vF rules
    No ALTQ support in kernel
    ALTQ related functions disabled
    rules cleared
Solo, Firewall, Offline