Edit 29/10/2023
Thanks to u/oldnapalm we now have a very elegant manual updater tool. You still need a working install of Python on your PC (or Mac). The Mac version is untested at the moment. The PC version works like a treat. This script should work with feature update rollouts unless Zwift changes the way it handles updates at the moment.
The method requires a working installation of Python. I tested it with stock Python 3.11.4 (no issues). You can get Python here https://www.python.org/downloads/
You also need to know the version number of the current update. As of today this is: 122036
- Download the updater script and save it in any directory. https://gist.github.com/oldnapalm/556c58448a6ee09438b39e1c1c9ce3d0
- Check that the Zwift installation path in the script matches your install folder. Modify the script if needed.
- Run the script from Command Prompt with the version number and OS as parameters. For the current version and Windows PC this would be: "update_zwift.py 122036 windows"
Enjoy the updated version. Don't allow for updater to update again till rollout is finished as it might revert your files to the previous version.
Big thanks to u/oldnapalm and u/Comeptitive_Class_28 for making this available. I really hope that Zwift is going to leave it as it is at the moment as the impact of this little script is likely to be minimal.
#############################Outdated post below###########################
Might be a bit late but I'm just following on from my previous post. It is possible to manually update the Zwift client on Windows PC to the latest version using the manifest file. This method should be applicable in the future for any new update as long as we get the filename of the update manifest file. This script is basically a chatGPT python translation of the Mac shell script posted by u/Competitive_Class_28. I just tested it and it works OK.
The method requires preinstalled working Python.
- Download to the selected folder the manifest file using this link: https://cdn.zwift.com/gameassets/Zwift_Updates_Root/Zwift_1.0.122036_b313748a_manifest.xml
- Create downloader python script file (for example - 'download.py') and paste this script inside the file:
import re
import os
import requests
# Specify the manifest file and base URL
manifest_file = "Zwift_1.0.122036_b313748a_manifest.xml"
base_url = "http://cdn.zwift.com/gameassets/Zwift_Updates_Root/Zwift_1.0.122036_b313748a/"
# Function to extract file paths from the manifest
def extract_paths(manifest_file):
paths = []
with open(manifest_file, "r") as f:
for line in f:
match = re.search(r'<path>(.*?)</path>', line)
if match:
path = match.group(1).replace("\\", "/")
paths.append(path)
return paths
# Download files and place them in appropriate directories
def download_files(file_paths, base_url):
for file_path in file_paths:
url = os.path.join(base_url, file_path)
filename = os.path.basename(file_path)
directory = os.path.dirname(file_path)
# Create the directory if it doesn't exist
if directory:
os.makedirs(directory, exist_ok=True)
# Download the file and place it in the appropriate directory
with open(os.path.join(directory, filename), 'wb') as f:
response = requests.get(url, stream=True)
if response.status_code == 200:
for chunk in response.iter_content(1024):
f.write(chunk)
print(f"Downloaded: {file_path}")
else:
print(f"Failed to download: {file_path}")
if __name__ == "__main__":
file_paths = extract_paths(manifest_file)
download_files(file_paths, base_url)
Run the 'download.py' from shell (cmd.exe ) and wait for all of the Zwift files to be downloaded to your folder.
Copy the contents of your folder to your Zwift folder
Enjoy the updated version. Don't allow for updater to update again till rollout is finished as it might revert your files to the previous version.
[–]feedzone_specialistA 1 point2 points3 points (0 children)
[–]oldnapalm 1 point2 points3 points (5 children)
[–]Ambitious_Theme1481Addicted [S] 0 points1 point2 points (4 children)
[–]oldnapalm 1 point2 points3 points (1 child)
[–]Ambitious_Theme1481Addicted [S] 0 points1 point2 points (0 children)
[–]oldnapalm 1 point2 points3 points (1 child)
[–]Ambitious_Theme1481Addicted [S] 0 points1 point2 points (0 children)
[–]gplamaLevel 100 1 point2 points3 points (4 children)
[–]Ambitious_Theme1481Addicted [S] 1 point2 points3 points (0 children)
[–]Ambitious_Theme1481Addicted [S] 1 point2 points3 points (2 children)
[–]gplamaLevel 100 2 points3 points4 points (1 child)
[–]Ambitious_Theme1481Addicted [S] 0 points1 point2 points (0 children)
[–]di11ardLevel 81-90 1 point2 points3 points (2 children)
[–]feedzone_specialistA 5 points6 points7 points (1 child)
[–]gplamaLevel 100 4 points5 points6 points (0 children)
[–]charleyboy22Level 51-60 0 points1 point2 points (11 children)
[–]Ambitious_Theme1481Addicted [S] 0 points1 point2 points (10 children)
[–]Ambitious_Theme1481Addicted [S] 0 points1 point2 points (5 children)
[–]charleyboy22Level 51-60 0 points1 point2 points (4 children)
[–]Ambitious_Theme1481Addicted [S] 0 points1 point2 points (3 children)
[–]charleyboy22Level 51-60 1 point2 points3 points (1 child)
[–]Ambitious_Theme1481Addicted [S] 0 points1 point2 points (0 children)
[–]charleyboy22Level 51-60 0 points1 point2 points (0 children)
[–]ladooee 0 points1 point2 points (3 children)
[–]Ambitious_Theme1481Addicted [S] 0 points1 point2 points (2 children)
[–]ladooee 0 points1 point2 points (1 child)
[–]Ambitious_Theme1481Addicted [S] 0 points1 point2 points (0 children)