{"id":13710365,"url":"https://github.com/netbrain/zwift","last_synced_at":"2026-01-16T22:58:56.400Z","repository":{"id":41438005,"uuid":"469443995","full_name":"netbrain/zwift","owner":"netbrain","description":"Easily zwift on linux","archived":false,"fork":false,"pushed_at":"2025-12-30T15:36:09.000Z","size":1720,"stargazers_count":539,"open_issues_count":18,"forks_count":49,"subscribers_count":16,"default_branch":"master","last_synced_at":"2026-01-03T09:52:30.060Z","etag":null,"topics":["docker","linux","podman","wine","winetricks","zwift"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/netbrain.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["netbrain"]}},"created_at":"2022-03-13T17:29:26.000Z","updated_at":"2026-01-01T23:59:15.000Z","dependencies_parsed_at":"2023-12-15T08:29:33.245Z","dependency_job_id":"2958b466-d63f-413e-8c1e-245939591f47","html_url":"https://github.com/netbrain/zwift","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/netbrain/zwift","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netbrain%2Fzwift","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netbrain%2Fzwift/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netbrain%2Fzwift/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netbrain%2Fzwift/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/netbrain","download_url":"https://codeload.github.com/netbrain/zwift/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netbrain%2Fzwift/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28487028,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T22:54:02.790Z","status":"ssl_error","status_checked_at":"2026-01-16T22:50:10.344Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","linux","podman","wine","winetricks","zwift"],"created_at":"2024-08-02T23:00:55.033Z","updated_at":"2026-01-16T22:58:56.394Z","avatar_url":"https://github.com/netbrain.png","language":"Shell","readme":"# Zwift\n\n[![Zwift updater][zwift-updater-src]][zwift-updater-href]\n[![image-href][image-pulls-src]][image-href]\n[![image-href][image-version-src]][image-href]\n[![image-href][image-size-src]][image-href]\n\nHello fellow zwifters, here is a docker image for running zwift on linux. It uses the companion app by zwift for linking up\nsmart trainers and other bluetooth devices (ant devices are not supported via the companion app). The reason why I made this\nsolution was so I could run multiple zwift instances on one machine at the same time.\n\nThe container comes pre-installed with zwift, so no setup is required, simply pull and run. It should also now support all\nmanner of graphics cards that have gl rendering.\n\nIf you find this image useful, then feel free to\n[add me on zwift](https://www.zwift.com/eu/athlete/4e3c5880-1edd-4c5d-a1b8-0974ce3874f0) and give me a ride on from time to\ntime.\n\n![example.gif](https://raw.githubusercontent.com/netbrain/zwift/master/example.gif)\n\n## Prerequisites\n\n- [Docker](https://docs.docker.com/get-docker) or [Podman](https://podman.io/getting-started/installation)\n- [nvidia-container-toolkit](https://github.com/NVIDIA/nvidia-container-toolkit) if you have nvidia proprietary driver\n- ATI, Intel and Nouveau drivers should work out of the box\n\n\u003e :warning: **Podman Support 4.3 and Later.**: Podman before 4.3 does not support `--userns=keep-id:uid=xxx,gid=xxx` and will\n  not start correctly, this impacts Ubuntu 22.04 and related builds such as PopOS 22.04. See Podman Section below.\n\n## Install\n\n```console\nsudo bash -c \"$(curl -fsSL https://raw.githubusercontent.com/netbrain/zwift/master/bin/install.sh)\"\n```\n\nThis will put the `zwift.sh` script on your `$PATH`, add a desktop icon to `/usr/local/share/applications`.\n\nNOTE: Icon may not show until logging off and back in.\n\n## RUN\n\nAfter installation, simply run:\n\n```console\nzwift\n```\n\nNOTE: You might want to disable video screenshots ([#75](https://github.com/netbrain/zwift/issues/75))\n\nIf `dbus` is available through a unix socket, the screensaver will be inhibited every 30 seconds to prevent `xscreensaver` or\nother programs listening on the bus from inhibiting the screen.\n\n## Configuration options\n\n| Key                         | Default                    | Description                                                                                                                            |\n|-----------------------------|----------------------------|----------------------------------------------------------------------------------------------------------------------------------------|\n| `USER`                      | `$USER`                    | Used in creating the zwift volume `zwift-$USER`                                                                                        |\n| `IMAGE`                     | `docker.io/netbrain/zwift` | The image to use                                                                                                                       |\n| `VERSION`                   | `latest`                   | The image version/tag to use                                                                                                           |\n| `DONT_CHECK`                |                            | If set, don't check for updated `zwift.sh`                                                                                             |\n| `DONT_PULL`                 |                            | If set, don't pull for new image version                                                                                               |\n| `DRYRUN`                    |                            | If set, print the full container run command and exit                                                                                  |\n| `INTERACTIVE`               |                            | If set, force `-it` and use `--entrypoint bash` for debugging                                                                          |\n| `CONTAINER_TOOL`            |                            | Defaults to podman if installed, else docker                                                                                           |\n| `CONTAINER_EXTRA_ARGS`      |                            | Extra args passed to docker/podman (`--cups=1.5`)                                                                                      |\n| `ZWIFT_USERNAME`            |                            | If set, try to login to zwift automatically                                                                                            |\n| `ZWIFT_PASSWORD`            |                            | If set, try to login to zwift automatically                                                                                            |\n| `ZWIFT_WORKOUT_DIR`         |                            | Set the workouts directory location                                                                                                    |\n| `ZWIFT_ACTIVITY_DIR`        |                            | Set the activities directory location                                                                                                  |\n| `ZWIFT_LOG_DIR`             |                            | Set the logs directory location                                                                                                        |\n| `ZWIFT_SCREENSHOTS_DIR`     |                            | Set the screenshots directory location, recommended to set `ZWIFT_SCREENSHOTS_DIR=$(xdg-user-dir PICTURES)/Zwift`                      |\n| `ZWIFT_OVERRIDE_GRAPHICS`   |                            | If set, override the default zwift graphics profiles                                                                                   |\n| `ZWIFT_OVERRIDE_RESOLUTION` |                            | If set, change game resolution (2560x1440, 3840x2160, ...)                                                                             |\n| `ZWIFT_FG`                  |                            | If set, run the process in fg instead of bg (`-d`)                                                                                     |\n| `ZWIFT_NO_GAMEMODE`         |                            | If set, don't run game mode                                                                                                            |\n| `WINE_EXPERIMENTAL_WAYLAND` |                            | If set, try to use experimental wayland support in wine 9                                                                              |\n| `NETWORKING`                | `bridge`                   | Sets the type of container networking to use.                                                                                          |\n| `ZWIFT_UID`                 | current users id           | Sets the UID that Zwift will run as (docker only)                                                                                      |\n| `ZWIFT_GID`                 | current users group id     | Sets the GID that Zwift will run as (docker only)                                                                                      |\n| `DEBUG`                     |                            | If set enabled debug of zwift script `set -x`                                                                                          |\n| `VGA_DEVICE_FLAG`           |                            | Override GPU/device flags for container (`--gpus=all`)                                                                                 |\n| `PRIVILEGED_CONTAINER`      | `0`                        | If set, container will run in privileged mode, SELinux label separation will be disabled (`--privileged --security-opt label=disable`) |\n\nThese environment variables can be used to alter the execution of the zwift bash script.\n\nShort note on NVIDIA Container Toolkit device flags:\n\n- Podman: prefer setting `VGA_DEVICE_FLAG=\"--device=nvidia.com/gpu=all\"` (CDI device request).\n- Docker: prefer setting `VGA_DEVICE_FLAG=\"--gpus=all\"`. If Docker ≥ 25 is configured with CDI\n  (`nvidia-ctk runtime configure --enable-cdi`), `VGA_DEVICE_FLAG=\"--device=nvidia.com/gpu=all\"` also works.\n\nIf you're running Docker with CDI and zwift fails to launch, try the long form `VGA_DEVICE_FLAG=\"--device=nvidia.com/gpu=all\"`\n(instead of `\"--gpus=all\"`).\n\nSee \u003chttps://github.com/netbrain/zwift/issues/208\u003e for context.\n\nExamples:\n\n- `DONT_PULL=1 zwift` will prevent docker/podman pull before launch\n- `DRYRUN=1 zwift` will print the underlying container run command and exit (no container is started)\n- `INTERACTIVE=1 zwift` will force foreground `-it` and set `--entrypoint bash` for step-by-step debugging inside the container\n- `CONTAINER_TOOL=docker zwift` will launch zwift with docker even if podman is installed\n- `CONTAINER_EXTRA_ARGS=--cpus=1.5` will pass `--cpus=1.5` as extra argument to docker/podman (will use at most 1.5 CPU cores,\n   this is useful on laptops to avoid overheating and subsequent throttling of the CPU by the system).\n- `USER=Fred zwift` perfect if your neighbor fred want's to try zwift, and you don't want to mess up your zwift config.\n- `NETWORKING=host zwift` will use host networking which may be needed to have zwift talk to wifi enabled trainers.\n- `ZWIFT_UID=123 ZWIFT_GID=123 zwift` will run zwift as the given uid and gid. By default zwift runs with the uid and gid of\n  the user that started the container. You should not need to change this except in rare cases. NOTE: This does not work in\n  wayland only X11.\n- `WINE_EXPERIMENTAL_WAYLAND=1 zwift` This will start zwift using Wayland and not XWayland. It will start full screen windowed.\n\nYou can also set these in `$HOME/.config/zwift/config` or `$HOME/.config/zwift/$USER-config` to be sourced by the `zwift.sh`\nscript on execution.\n\n## How can I persist my login information so i don't need to login on every startup?\n\nTo authenticate through Zwift automatically simply add the following file `$HOME/.config/zwift/config`:\n\n```text\nZWIFT_USERNAME=username\nZWIFT_PASSWORD=password\n```\n\nWhere `username` is your zwift account email, and `password` your zwift account password, respectively.\n\nThe credentials will be used to authenticate before launching the zwift app, and the user should be logged in automatically in\nthe game.\n\nNOTE: This will be loaded by `zwift.sh` in cleartext as environment variables into the container.\n\nAlternatively, instead of saving your password in the file, you can save your password in the secret service keyring like so:\n\n```text\nsecret-tool store --label \"Zwift password for ${ZWIFT_USERNAME}\" application zwift username ${ZWIFT_USERNAME}\n```\n\nIn this case the username should still be saved in the config file and the password will be read upon startup from the keyring\nand passed as a secret into the container (where it is an environment variable).\n\n\u003e :warning: **Do Not Quote the variables or add spaces**: The ID and Password are read as raw format so if you put\n  `ZWIFT_PASSWORD=\"password\"` it tries to use `\"password\"` and not just `password`, same for `''`.  In addition do not add a\n  space to the end of the line it will be sent as part of the password or username. This applies to `ZWIFT_USERNAME` and\n  `ZWIFT_PASSWORD`.\n\nNOTE: You can also add other environment variable from the table to make starting easier:\n\n```text\nZWIFT_USERNAME=username\nZWIFT_PASSWORD=password\n\nZWIFT_WORKOUT_DIR=~/.config/zwift/workouts\nWINE_EXPERIMENTAL_WAYLAND=1\n```\n\n## Podman Support\n\nWhen running Zwift with podman, the user and group in the container is 1000 (user). To access the resources on the host we need\nto map the container id 1000 to the host id using `uidmap` and `gidmap`.\n\nFor example if the host uid/gid is 1001/1001 then we need to map the host resources from `/run/user/1001` to the container\nresource `/run/user/1000` and map the user and group id's the same. This had to be done manually on the host podman start using\n`--uidmap` and `--gidmap` (not covered here).\n\nFrom Podman 4.3 this became automatic by providing the Container UID/GID and podman automatically sets up this mapping.\n\nNOTE: Using ZWIFT_UID/GID will only work if the user starting podman has access to the `/run/user/$ZWIFT_UID` resources and does\nnot work the same way as in Docker so is not supported.\n\n## Where are the saves and why do I get a popup can't write to Document Folder?\n\nThis is a hang up from previous versions, mainly with podman. delete the volumes and after re-creation it should work fine.\n\n```text\npodman volume rm zwift-xxxxx\n```\n\nor\n\n```text\ndocker volume rm zwift-xxxxx\n```\n\nNOTE: if you see a weird volume e.g. `zwift-naeva` it is a hang up from the past, delete it.\n\n## I sometimes get a popup Not responding why?\n\nFor Gnome it is just timing out before zwift responds, just extend the timeout.\n\n```text\ngsettings set org.gnome.mutter check-alive-timeout 60000\n```\n\n## The container is slow to start, why?\n\nIf your `$(id -u)` or `$(id -g)` is not equal to 1000 then this would cause the zwift container to re-map all files (`chown`,\n`chgrp`) within the container so there is no uid/gid conflicts. So if speed is a concern of yours, consider changing your user\nto match the containers uid and gid using `usermod` or contribute a better solution for handling uid/gid remapping in containers\n:smiley:\n\n## How do I connect my trainer, heart rate monitor, etc?\n\nYou can [use your phone as a bridge](https://support.zwift.com/using-the-zwift-companion-app-Hybn8qzPr).\n\nFor example, your Wahoo Kickr and Apple Watch connect to the Zwift Companion app on your iPhone; then the Companion app connects\nover wifi to your PC running Zwift.\n\n## How can I add custom .zwo files?\n\nYou can map the zwift Workout folder using the environment variable `ZWIFT_WORKOUT_DIR`, for example if your workout directory\nis in `$HOME/zwift_workouts` then you would provide the environment variable `ZWIFT_WORKOUT_DIR=$HOME/zwift_workouts`.\n\nYou can add this variable into `$HOME/.config/zwift/config` or `$HOME/.config/zwift/$USER-config`.\n\nThe workouts folder will contain subdirectories e.g. `$HOME/.config/zwift/workouts/393938`. The number is your internal zwift\nid and you store you zwo files in the relevant folder. There will usually be only one ID, however if you have multiple zwift\nlogins it may show one subdirectory for each, to find the ID you can use the following link:\n\nWebpage for finding internal ID: \u003chttps://www.virtualonlinecycling.com/p/zwiftid.html\u003e\n\nNOTES:\n\n- Any workouts created already will be copied into this folder on first start\n- To add a new workout just copy the zwo file to this directory\n- Deleting files from the directory will not delete them, they will be re-added when re-starting zwift, you must delete from the\n  zwift menu\n\n## How can I access/modify the graphics settings?\n\nBy default, zwift assigns a graphics profile based on your graphics card. This profile can be either basic, medium, high, or\nultra. This profile determines the level of detail and the quality of the textures you get in game. It is not possible to change\nwhich graphics profile the game uses. When the default options of the profile aren't optimal (for example when zwift doesn't\nrecognize your graphics card and you only get the `medium` profile or when your cpu is the bottleneck and your fps is on the low\nside because zwift assigned the ultra profile), it is possible to manually tweak the graphics settings by setting\n`ZWIFT_OVERRIDE_GRAPHICS=1`, and editing the settings in the `$HOME/.config/zwift/graphics.txt` or\n`$HOME/.config/zwift/$USER-graphics.txt` file as you see fit. To find out which profile zwift assigned, you can upload your\nzwift log to \u003chttps://zwiftalizer.com\u003e.\n\nThe default settings for the different profiles are:\n\n| key                  | description                                            | basic        | medium       | high         | ultra         |\n|----------------------|--------------------------------------------------------|--------------|--------------|--------------|---------------|\n| `res`                | texture resolution (independent from game resolution)  | 1024x576(0x) | 1280x720(0x) | 1280x720(0x) | 1920x1080(0x) |\n| `sres`               | shadow resolution                                      | 512x512      | 1024x1024    | 1024x1024    | 2048x2048     |\n| `gSSAO`              | enable high-quality lighting and shadows               | 0            | 0            | 1            | 1             |\n| `gFXAA`              | enable anti-aliasing                                   | 1            | 1            | 1            | 1             |\n| `gSunRays`           | enable sun rays (default 1)                            | 0            | 0            |              |               |\n| `gHeadLight`         | enable bike headlights (default 1)                     | 0            | 0            |              |               |\n| `gFoliagePercent`    | reduce/increase auto-generated foliage (default 1.0)   | 0.5          | 0.5          |              |               |\n| `gSimpleReflections` | lower quality reflections (default 0)                  | 1            | 1            |              |               |\n| `gLODBias`           | lower polygon count (higher value is lower, default 0) | 1            | 1            |              |               |\n| `gShowFPS`           | display fps in the top left corner (default 0)         |              |              |              |               |\n\nThe number in parentheses after the texture resolution (for example `(0x)` after `1920x1080`) is the anti-aliasing setting. This\nnumber can be modified to for example `1920x1080(4x)` or `1920x1080(8x)` to increase anti-aliasing.\n\nExample `$HOME/.config/zwift/graphics.txt` (settings from the ultra profile, with in-game fps counter enabled):\n\n```text\nres 1920x1080(0x)\nsres 2048x2048\nset gSSAO=1\nset gFXAA=1\nset gShowFPS=1\n```\n\nStart zwift with the `ZWIFT_OVERRIDE_GRAPHICS=1 zwift` command to use the settings from the graphics.txt file.\n\nYou can find more information about these settings in this [Zwift Insider](https://zwiftinsider.com/config-file-tweaks/)\narticle. Note that this is an older article and as such some of the information in it is outdated. The default values of the\ndifferent profiles have changed to what is in the table listed above and for example the `aniso` setting does not exist anymore.\n\n\u003e :warning: **Before using ZWIFT_OVERRIDE_GRAPHICS**: This option requires that the `$HOME/.config/zwift/graphics.txt` file\nexists. If a `graphics.txt` does not exist and the `ZWIFT_OVERRIDE_GRAPHICS` option is used, it will be created automatically\nthe first time zwift is launched.\n\nAside from the graphics profile which is assigned by zwift and cannot be changed, there is also the in-game setting to change\nthe display resolution. Changing this resolution does not change the graphics profile and as such does not affect the quality of\nthe textures, shadows, and other graphics options. It only affects the resolution of the game itself. Which resolutions are\navailable in the zwift in-game setting is dependent on the graphics profile assigned based on your graphics card. If zwift does\nnot recognize your graphics card or you have a WQHD or UHD display and zwift does not offer the higher resolutions, it is\npossible to manually override the game resolution by setting the `ZWIFT_OVERRIDE_RESOLUTION` option. For example to force zwift\nto use UHD you can launch it using `ZWIFT_OVERRIDE_RESOLUTION=3840x2160 zwift`.\n\nThe full list of available resolutions is:\n\n| name   | resolution | pixels    |\n|--------|------------|-----------|\n| Low    | 576p       | 720x576   |\n| Medium | 720p       | 1280x720  |\n| High   | 1080p      | 1920x1080 |\n| Ultra  | 1440p      | 2560x1440 |\n| 4k UHD | 2160p      | 3840x2160 |\n\n\u003e :warning: **Before using ZWIFT_OVERRIDE_RESOLUTION**: This option requires that the `prefs.xml` file exists. Make sure to\n  launch zwift at least once so it creates the `prefs.xml` file before using the `ZWIFT_OVERRIDE_RESOLUTION` option.\n\n## How can I build the image myself?\n\n```console\n./bin/build-image.sh\n```\n\n## How can I fetch the image from docker hub?\n\n\u003chttps://hub.docker.com/r/netbrain/zwift\u003e\n\n```console\ndocker pull netbrain/zwift:$VERSION # or simply latest\n```\n\n## How can I update Zwift?\n\nThe `zwift.sh` script will update zwift by checking for new image versions on every launch, however if you are not using this\nthen you will have to pull `netbrain/zwift:latest` from time to time in order to be on the latest version.\n\nThere is a github action in place that will update zwift on a scheduled basis and publish new versions to docker hub.\n\n## How can I install this on NixOS?\n\nTo use the NixOS module, configure your flake.nix:\n\n```nix\n{\n  inputs = {\n    nixpkgs.url = \"github:NixOS/nixpkgs/nixos-unstable\";\n    zwift.url = \"github:netbrain/zwift\";\n  };\n\n  outputs = { nixpkgs, zwift, ... }: {\n    nixosConfigurations.\"«hostname»\" = nixpkgs.lib.nixosSystem {\n      system = \"x86_64-linux\";\n      modules = [ zwift.nixosModules.zwift ./configuration.nix ];\n    };\n  };\n}\n```\n\nThen enable and configure the module in your NixOS configuration. The configuration options are written analog to the\nenvironment variables in camelCase:\n\n```nix\n{\n  programs.zwift = {\n    # Enable the zwift module and install required dependencies\n    enable = true;\n    # The Docker image to use for zwift\n    image = \"docker.io/netbrain/zwift\";\n    # The zwift game version to run\n    version = \"1.67.0\";\n    # Container tool to run zwift (e.g., \"podman\" or \"docker\")\n    containerTool = \"podman\";\n    # If true, do not pull the image (use locally cached image)\n    dontPull = false;\n    # If true, skip new version check\n    dontCheck = false;\n    # If true, print the container run command and exit\n    dryRun = false;\n    # If set, launch container with \"-it --entrypoint bash\" for debugging\n    interactive = false;\n    # Extra args passed to docker/podman (e.g. \"--cpus=1.5\")\n    containerExtraArgs = \"\";\n    # Zwift account username (email address)\n    zwiftUsername = \"user@example.com\";\n    # Zwift account password\n    zwiftPassword = \"xxxx\";\n    # Directory to store zwift workout files\n    zwiftWorkoutDir = \"/var/lib/zwift/workouts\";\n    # Directory to store zwift activity files\n    zwiftActivityDir = \"/var/lib/zwift/activities\";\n    # Directory to store zwift log files\n    zwiftLogDir = \"/var/lib/zwift/logs\";\n    # Directory to store zwift screenshots\n    zwiftScreenshotsDir = \"/var/lib/zwift/screenshots\";\n    # Run zwift in the foreground (set true for foreground mode)\n    zwiftFg = false;\n    # Disable Linux GameMode if true\n    zwiftNoGameMode = false;\n    # Enable Wine's experimental Wayland support if using Wayland\n    wineExperimentalWayland = false;\n    # Networking mode for the container (\"bridge\" is default)\n    networking = \"bridge\";\n    # User ID for running the container (usually your own UID)\n    zwiftUid = \"1000\";\n    # Group ID for running the container (usually your own GID)\n    zwiftGid = \"1000\";\n    # GPU/device flags override (Docker: \"--gpus=all\", Podman/CDI: \"--device=nvidia.com/gpu=all\")\n    vgaDeviceFlag = \"--device=nvidia.com/gpu=all\";\n    # Enable debug output and verbose logging if true\n    debug = false;\n    # If set, run container in privileged mode (\"--privileged --security-opt label=disable\")\n    privilegedContainer = false;\n  };\n}\n```\n\n## Sponsors 💖\n\nThese are our really cool sponsors!\n\n\u003c!-- markdownlint-disable line-length --\u003e\n\u003c!-- cSpell:disable --\u003e\n\u003c!-- sponsors --\u003e\u003ca href=\"https://github.com/altheus\"\u003e\u003cimg src=\"https:\u0026#x2F;\u0026#x2F;github.com\u0026#x2F;altheus.png\" width=\"60px\" alt=\"User avatar: \" /\u003e\u003c/a\u003e\u003ca href=\"https://github.com/nowave7\"\u003e\u003cimg src=\"https:\u0026#x2F;\u0026#x2F;github.com\u0026#x2F;nowave7.png\" width=\"60px\" alt=\"User avatar: \" /\u003e\u003c/a\u003e\u003ca href=\"https://github.com/cmuench\"\u003e\u003cimg src=\"https:\u0026#x2F;\u0026#x2F;github.com\u0026#x2F;cmuench.png\" width=\"60px\" alt=\"User avatar: Christian Münch\" /\u003e\u003c/a\u003e\u003ca href=\"https://github.com/nibbles-bytes\"\u003e\u003cimg src=\"https:\u0026#x2F;\u0026#x2F;github.com\u0026#x2F;nibbles-bytes.png\" width=\"60px\" alt=\"User avatar: \" /\u003e\u003c/a\u003e\u003ca href=\"https://github.com/saltymedic\"\u003e\u003cimg src=\"https:\u0026#x2F;\u0026#x2F;github.com\u0026#x2F;saltymedic.png\" width=\"60px\" alt=\"User avatar: \" /\u003e\u003c/a\u003e\u003ca href=\"https://github.com/ZachS\"\u003e\u003cimg src=\"https:\u0026#x2F;\u0026#x2F;github.com\u0026#x2F;ZachS.png\" width=\"60px\" alt=\"User avatar: Jethro Zach Solomon\" /\u003e\u003c/a\u003e\u003ca href=\"https://github.com/SvenHaedrich\"\u003e\u003cimg src=\"https:\u0026#x2F;\u0026#x2F;github.com\u0026#x2F;SvenHaedrich.png\" width=\"60px\" alt=\"User avatar: Sven Hädrich\" /\u003e\u003c/a\u003e\u003ca href=\"https://github.com/relief-melone\"\u003e\u003cimg src=\"https:\u0026#x2F;\u0026#x2F;github.com\u0026#x2F;relief-melone.png\" width=\"60px\" alt=\"User avatar: Relief.Melone\" /\u003e\u003c/a\u003e\u003ca href=\"https://github.com/pdelagrave\"\u003e\u003cimg src=\"https:\u0026#x2F;\u0026#x2F;github.com\u0026#x2F;pdelagrave.png\" width=\"60px\" alt=\"User avatar: Pierre Delagrave\" /\u003e\u003c/a\u003e\u003ca href=\"https://github.com/sphexator\"\u003e\u003cimg src=\"https:\u0026#x2F;\u0026#x2F;github.com\u0026#x2F;sphexator.png\" width=\"60px\" alt=\"User avatar: Kristoffer T.\" /\u003e\u003c/a\u003e\u003ca href=\"https://github.com/fliesentischsound\"\u003e\u003cimg src=\"https:\u0026#x2F;\u0026#x2F;github.com\u0026#x2F;fliesentischsound.png\" width=\"60px\" alt=\"User avatar: Robin\" /\u003e\u003c/a\u003e\u003ca href=\"https://github.com/Trawnick\"\u003e\u003cimg src=\"https:\u0026#x2F;\u0026#x2F;github.com\u0026#x2F;Trawnick.png\" width=\"60px\" alt=\"User avatar: \" /\u003e\u003c/a\u003e\u003ca href=\"https://github.com/PlombiP\"\u003e\u003cimg src=\"https:\u0026#x2F;\u0026#x2F;github.com\u0026#x2F;PlombiP.png\" width=\"60px\" alt=\"User avatar: \" /\u003e\u003c/a\u003e\u003ca href=\"https://github.com/iter59\"\u003e\u003cimg src=\"https:\u0026#x2F;\u0026#x2F;github.com\u0026#x2F;iter59.png\" width=\"60px\" alt=\"User avatar: \" /\u003e\u003c/a\u003e\u003c!-- sponsors --\u003e\n\u003c!-- cSpell:enable --\u003e\n\u003c!-- markdownlint-enable line-length --\u003e\n\n## Contributors ✨\n\nThanks go to these wonderful people:\n\n[![Contributors](https://contrib.rocks/image?repo=netbrain/zwift)](https://github.com/netbrain/zwift/graphs/contributors)\n\n### Contribute 👋\n\nIf you would like to contribute, then please by all means I'll accept PRs. A good starting point would be to see if there's\nany open issues that you feel capable of doing. Let me know if I can help with anything.\n\n### Show and tell 🙌\n\nCheck out our [Show and tell](https://github.com/netbrain/zwift/discussions/categories/show-and-tell) category in discussions\nand see how other people are using this solution, feel free to contribute your own tips and tricks :smiley:\n\n## Alternative's to this repository\n\n- Install zwift using wine directly or a framework like `lutris`. You will however have to manage installation and updates\n  yourself\n- Use [`scrcpy`](https://github.com/Genymobile/scrcpy) to mirror android device to your linux screen\n  - [Enable developer options on your android device](https://developer.android.com/studio/debug/dev-options#enable)\n  - Pair your computer to the device using `adb pair`\n    [documentation](https://developer.android.com/studio/command-line/adb#wireless-android11-command-line)\n    - `./srccpy.sh adb pair ip:port`  [see my container solution](https://github.com/netbrain/dockerfiles/tree/master/scrcpy)\n  - Mirror the android device screen onto your linux screen using `scrcpy`.\n    - `./srccpy.sh scrcpy --tcpip=ip:port`\n  - If you require sound as well, there's also a [`sndcpy`](https://github.com/rom1v/sndcpy) project (doesn't support wireless\n    though, but the aforementioned can be modified to use usb)\n- Using [`redroid`](https://hub.docker.com/r/redroid/redroid) to install zwift apk onto a android emulator (not tested)\n- Using a virtual machine with pci passthrough\n  - \u003chttps://looking-glass.io/\u003e\n  - \u003chttps://wiki.archlinux.org/title/PCI_passthrough_via_OVMF\u003e\n  - \u003chttps://github.com/VGPU-Community-Drivers/vGPU-Unlock-patcher\u003e (if you have a nvidia card you can eat your cake, and have\n    it too by creating `vgpus` for vms that leverage the host gpu, no dedicated gpu required)\n\n## ⭐ Star History (for fun and giggles)\n\n[![Star History Chart](https://api.star-history.com/svg?repos=netbrain/zwift\u0026type=Date)](https://star-history.com/#netbrain/zwift\u0026Date)\n\n[zwift-updater-src]:https://github.com/netbrain/zwift/actions/workflows/zwift_updater.yaml/badge.svg\n[zwift-updater-href]:https://github.com/netbrain/zwift/actions/workflows/zwift_updater.yaml\n[image-version-src]:https://img.shields.io/docker/v/netbrain/zwift/latest?logo=docker\u0026logoColor=white\n[image-pulls-src]:https://badgen.net/docker/pulls/netbrain/zwift?icon=docker\u0026label=pulls\n[image-size-src]:https://badgen.net/docker/size/netbrain/zwift?icon=docker\u0026label=size\n[image-href]:https://hub.docker.com/r/netbrain/zwift/tags\n","funding_links":["https://github.com/sponsors/netbrain"],"categories":["Training tools","Training \u0026 Fitness"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetbrain%2Fzwift","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnetbrain%2Fzwift","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetbrain%2Fzwift/lists"}