How do I determine my Frames Per Second (FPS) in Zwift?

Checking your Zwift FPS

Many riders want to know what their FPS is in Zwift, so they can tune their game to maximum performance and efficiency.

As of the 1/19 update of the Zwift Desktop application, you can push your graphics to 4k UHD (2160p) mode for higher-end GPUs.

The easiest way to check your Zwift FPS is to take your Zwift log file and drop it onto the Zwift Logfile Analyzer, to produce a graph that looks like the one at the top of this article.

You can also make a 1-line change to your Zwift profile configuration file to show the FPS on-screen, so you don't have to rely on third-party apps like "FRAPS" or "Open Broadcaster Software" (aka "OBS") to show it for you. Check your Zwift Log.txt file for an entry near the top that specifies which profile you're using. That should look like this: 

   [21:26:35] Using ultra graphics profile

Then go into your Zwift data directory and edit that profile's configuration file to add this line: 

   set gShowFPS=1

When you start up Zwift again, you should see something that looks like this:

Showing FPS natively in Zwift

If you're not sure where to find your Zwift log files, there's another KB article that describes where each relevant piece of Zwift data resides on your system:

Below are two additional methods you can use to calculate your FPS for both Windows and Mac platforms. Use whichever one works best for you:

Using Windows PowerShell (Windows Only)

This PowerShell snipped was contributed by Nicholas Rodie

$input_path = $env:USERPROFILE + ‘\Documents\Zwift\Logs\Log.txt’
Get-Content  $input_path -wait | where { $_ -match "fps"} | % {$_ -Replace ",(.*)", ""}

Using Perl (Mac or Cygwin on Windows)

This Perl snippet was written by David A. Desrosiers (aka "setuid" in-game)

use strict;
use warnings;

use Env qw(PATH HOME);
my $zwiftlog = "$HOME/Documents/Zwift/Logs/Log.txt";

open(my $in, '<', $zwiftlog) or die "$!";

my ($total, $count) = (0,0);

while (my $line = <$in>) {
    if ($line =~ m/FPS\s+?\d+/) {
        my ($fps) = (split(/\s+/, $line))[2];
        $fps =~ s/,//;
        $total += $fps;
        $count += 1;

my $average = $total / $count;
my $rounded = sprintf("%.2f", $average);

printf "Average FPS (%s samples) is: %f\n", $count, $rounded;
framerate, fps, Perl, Mac, Windows, GPU, ultra.txt, medium.txt, basic.txt