-
Notifications
You must be signed in to change notification settings - Fork 0
Install Guide Wine
This guide sets up Affinity by Canva (and Affinity V2 apps) on Linux by installing Wine directly, rather than through Lutris, Bottles, Heroic, or RUM. It is the most manual method, and the one with the most troubleshooting coverage.
- Why This Guide
- Requirements
- Installation Steps
- Troubleshooting
- Optional Enhancements After Installation
- Advanced: Optional Wine Source Patch
- Known Issues
- Uninstall
- Verified Environments
- Credits
Affinity apps need Windows Runtime (WinRT) APIs. Older Wine versions lack these APIs. You need Wine 10.17 or newer to fix a missing file that previously blocked the installer. A separate helper DLL and metadata file then provide the actual WinRT functionality.
Thank you Wanesty for being the first person to discover this update. See also her guide for installing and running Affinity with Wine.
- Wine 10.17 or newer (mainline or devel build)
- Winetricks
- curl
- About 10 GB of free disk space
- An internet connection
Note
As an alternative to these manual steps, try the experimental Affinity On Linux installer script to streamline installation under Wine.
Pick the instructions for your distribution.
Official Fedora mirrors often mix Wine versions. Use WineHQ's own repository to get the correct 10.17+ package.
-
Install curl and add the WineHQ repository.
sudo dnf install curl -y sudo rm -f /etc/yum.repos.d/winehq.repo sudo tee /etc/yum.repos.d/winehq.repo <<'EOF' [winehq-devel] name=WineHQ packages for Fedora 41 baseurl=https://dl.winehq.org/wine-builds/fedora/41/ enabled=1 gpgcheck=0 EOF sudo dnf makecache sudo dnf install winehq-devel -y
-
If installing
winetricksviadnffails, or tries to downgrade Wine, use the manual Winetricks install instead. This works on any distro, including Nobara.
sudo pacman -S --needed wine winetricks curl
# or, on AUR-based distros:
# yay -S wine winetrickssudo dpkg --add-architecture i386
sudo mkdir -pm755 /etc/apt/keyrings
sudo wget -O /etc/apt/keyrings/winehq.asc https://dl.winehq.org/wine-builds/winehq.key
sudo sh -c 'echo "deb [signed-by=/etc/apt/keyrings/winehq.asc] https://dl.winehq.org/wine-builds/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/winehq.list'
sudo apt update
sudo apt install --install-recommends winehq-devel winetricks curl -ywine --versionThis should return wine-10.17 or newer.
A WINEPREFIX is a self-contained fake Windows install that Wine uses. Create a dedicated one for Affinity.
export WINEPREFIX="$HOME/.affinity"
wineboot --initWarning
You might need to replace $HOME/ with your full home folder path, for example /home/YourUsername/, so it points to an absolute path. This matters if your shell doesn't follow standard POSIX rules.
Install the core components Affinity depends on, using Winetricks.
winetricks --unattended --force remove_mono vcrun2022 dotnet48 corefonts win11Note
The .NET 4.8 installation is large. It can take 10 to 20 minutes.
If you run into issues later, you may also want these winetricks components:
renderer=vulkandxvk-
tahoma(fixes pixelated fonts)
Note
- Affinity apps are available here: Affinity by Canva, Version 2, Archived.
- Make sure your installation file is in
~/Downloads. -
$HOMEmay not resolve correctly on your distro. Use your full path if needed.
WINEPREFIX="$HOME/.affinity" wine "$HOME/Downloads/Affinity x64.exe"This command installs Affinity by Canva (V3). If you are installing V2 instead, Photo 2, Designer 2, and Publisher 2 each ship as their own separate .exe installer. Download each app you want, then repeat the command above once per .exe, pointing it at the matching downloaded file, all against the same $WINEPREFIX. Run each installer file only once.
Follow the normal installation prompts.
After installation finishes, check your Wine version:
- Wine 11 or newer: skip straight to Step 8.
- Older than Wine 11: continue to Step 5.
These files add the Windows Runtime metadata support Affinity expects.
cd /tmp
curl -L -o Windows.winmd https://github.com/microsoft/windows-rs/raw/master/crates/libs/bindgen/default/Windows.winmd
curl -L -o wintypes.dll https://github.com/ElementalWarrior/wine-wintypes.dll-for-affinity/raw/refs/heads/master/wintypes_shim.dll.soIf your download ends with .dll.so, rename it:
mv /tmp/wintypes.dll.so /tmp/wintypes.dll 2>/dev/null || truemkdir -p "$WINEPREFIX/drive_c/windows/system32/winmetadata"
cp /tmp/Windows.winmd "$WINEPREFIX/drive_c/windows/system32/winmetadata/"
cp /tmp/wintypes.dll "$WINEPREFIX/drive_c/Program Files/Affinity/Affinity/"If you installed Photo 2, Designer 2, or Publisher 2 separately, copy wintypes.dll into each of their directories too.
WINEPREFIX="$HOME/.affinity" winecfgIn the Libraries tab:
- Type
wintypesunder "New override for library". - Click Add, then Edit, and choose Native (Windows).
- Click Apply, then OK.
WINEPREFIX="$HOME/.affinity" wine "$WINEPREFIX/drive_c/Program Files/Affinity/Affinity/Affinity.exe"Adjust the drive_c/Program Files path if you are launching Photo 2, Designer 2, or Publisher 2 instead.
At the start of Step 4, the installer may show a dialog titled "Setup is not recommended for the following reasons: A native installer exists for this CPU type", with Ignore and Close buttons. This is a false positive. The installer's CPU/OS check misfires under Wine, and treats Wine as a platform with its own native (non-x64) installer available. Click Ignore, and installation proceeds normally.
wine: could not load ntdll.so: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found
This has mainly been reported by users of the experimental script installer, not this manual guide, because it bundles its own Wine build against a newer GLIBC than some distros ship. If you hit this while following the manual steps above, your distro's Wine package is likely too new (or too old) for your system's GLIBC. Update your distro, or fall back to your distro's own winehq-* package instead of any bundled build. See General Known Issues for more detail.
If you are on a distro-packaged (native) Wine 11.7 install, and Affinity or the installer complains about missing .NET 3.5, this is a known issue (#130) without a confirmed fix yet. If you hit it, try installing the dotnet35 winetricks component in addition to dotnet48 from Step 3, and report back on the issue thread with your results.
Root cause confirmed on a KDE Plasma 6.7.4 Wayland session: this is KDE bug 459373, "Maximized XWayland windows leave pixel gaps when using certain fractional scaling factors." Wine's window runs as an XWayland client, and KWin's maximize sizing breaks specifically at fractional display scales (125%, 135%, 145%, 150%, 175%) that don't divide evenly into your monitor's native resolution. It does not happen at integer scales (100%, 200%, 300%).
Workaround: switch to a scale factor that divides your native resolution evenly. For example, on a 2560x1600 panel, 150% leaves a large crop (2560 / 1.5 = 1706.67, not a whole number), while 160% does not (2560 / 1.6 = 1600 exactly). Change this in System Settings → Display & Monitor, or from a terminal: kscreen-doctor output.<name>.scale.<factor> (find <name> with kscreen-doctor -o). This was fixed upstream in Plasma 6.2.0 for the general case, but a smaller residual edge sliver can still appear on some maximizes even at a "good" scale factor. It is far less severe than the crop at a bad fractional scale. This same KWin/XWayland/fractional-scaling interaction is very likely the underlying cause of #129 (title bar not showing when maximized) and #126 (cursor offset on GNOME with display scaling) on other desktop environments.
Do not switch Wine to its native Wayland driver (wine reg add "HKEY_CURRENT_USER\Software\Wine\Drivers" /v Graphics /d wayland /f) to work around this. As of Wine 11.15, winewayland.drv does not correctly manage Affinity's floating dockable panel windows: they detach from the main window with no borders, and the canvas area breaks. Stick with the default X11/XWayland driver.
There is a second, separate bug layered on top of the scaling one. Even with the scale fixed, clicking Affinity's own Maximize button (its title bar draws its own custom chrome, not KDE's) can still compute an undersized target window, confirmed by measuring the actual X11 window geometry (xwininfo) before and after. Clicking Maximize is not reliable, including after a full logout/login (which rules out stale compositor state as the cause). Instead, manually drag the window's border out to the screen edges once (xwininfo confirms this reaches the true full physical resolution minus the taskbar strip). Afterward, the restore/un-maximize toggle keeps that correct size, so you only need to do the manual drag once per session. A real fix, rather than this workaround, would need either a Wine-side patch to whatever work-area API Affinity's custom maximize logic queries, or a Harmony runtime patch via an AffinityPluginLoader/WineFix-style plugin. Not attempted yet.
If Edit → Settings (or another dialog) opens with a blank white content area, this is a Wine dialog repaint bug: the dialog's initial paint never fires. Scroll the mouse wheel over the blank area, or resize the dialog slightly, to force a redraw. The content then appears correctly.
Fixed. Root cause fully traced via a decompiled managed stack trace: Serif.Affinity.Application.ProcessCommandLineArguments has a branch, only reached for an unrelated affinity-open-file: argument, that calls the WinRT type Windows.ApplicationModel.DataTransfer.SharedStorageAccessManager. Wine has no implementation of that type, and the .NET CLR resolves every type referenced anywhere in a method's body when it JITs that method, not just the branch actually taken. So any call into ProcessCommandLineArguments throws System.TypeLoadException and crashes the app, including the unrelated affinity:// OAuth callback path, which is handled by the exact same method (forwarded from the second Affinity.exe instance the browser launches, over a named pipe, to the already-running instance).
Fixed by LoginFix, a community AffinityPluginLoader plugin. See that page for the full explanation and build/install steps. No custom Wine build needed, confirmed working on stock distro Wine 11.15.
Separately (and unrelated to sign-in): if Affinity's main window fails to create its Direct3D device at startup at all (Log.txt shows Attempting to create Direct3D device on default adapter followed by DisplayConfigGetDeviceInfo error: 87 and DXRenderer.cpp(1014): error 0x80004001), that's Wine's NtUserDisplayConfigGetDeviceInfo not implementing the SDR white level query. See Advanced: Optional Wine Source Patch below for a small, tested Wine source patch.
If the Fedora/Nobara package manager fails, or tries to remove Wine:
-
Download a local copy of winetricks.
cd ~ curl -L -o winetricks https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks chmod +x winetricks
-
Use your local copy instead of the system command.
WINEPREFIX="$HOME/.affinity" ~/winetricks remove_mono WINEPREFIX="$HOME/.affinity" ~/winetricks --force dotnet48
-
Optional: install it globally.
sudo mv ~/winetricks /usr/local/bin/winetricks
See Related Projects: AffinityPluginLoader & WineFix for what these do and full credit to their author, Noah C3. This community plugin greatly improves runtime stability, and fixes the "Preferences not saving" issue on Linux.
Quick install, replacing paths dynamically so these commands adapt to your prefix and Affinity directory:
# Define Wine prefix
export WINEPREFIX="$HOME/.affinity"
cd "$WINEPREFIX/drive_c/Program Files/Affinity/Affinity/"
# 1.) Download & extract AffinityPluginLoader + WineFix bundle
curl -L -o /tmp/affinitypluginloader-plus-winefix.tar.xz \
https://github.com/noahc3/AffinityPluginLoader/releases/latest/download/affinitypluginloader-plus-winefix.tar.xz
tar -xf /tmp/affinitypluginloader-plus-winefix.tar.xz -C .
# 2.) Replace launcher for compatibility
mv "Affinity.exe" "Affinity.real.exe"
mv "AffinityHook.exe" "Affinity.exe"Your existing launchers still work: wine .../Affinity.exe now automatically loads AffinityPluginLoader and WineFix.
Build and drop in LoginFix the same way, into the same apl/plugins/ folder as WineFix.dll:
cp "$WINEPREFIX/drive_c/Program Files/Affinity/Affinity/AffinityPluginLoader.dll" \
path/to/AffinityOnLinux/Guides/Wine/LoginFix/
cd path/to/AffinityOnLinux/Guides/Wine/LoginFix
dotnet build -c Release
cp bin/Release/net48/win-x64/LoginFix.dll \
"$WINEPREFIX/drive_c/Program Files/Affinity/Affinity/apl/plugins/"This requires the .NET SDK installed on your Linux system, not inside the Wine prefix. See Related Projects: LoginFix for the full explanation of what it fixes.
Run Affinity as before:
WINEPREFIX="$HOME/.affinity" wine "$WINEPREFIX/drive_c/Program Files/Affinity/Affinity/Affinity.exe"- You should now see Affinity Plugin Loader output in your terminal log on startup.
- Preferences and settings should now save correctly on Linux.
Note
- Updates to Affinity may overwrite
Affinity.exe. If that happens, re-extract theaffinitypluginloader-plus-winefix.tar.xzbundle. - Sign-in used to be unreliable under Wine. Installing LoginFix alongside WineFix fixes the underlying crash, confirmed working on stock Wine 11.15.
- Always download from Noah C3's official GitHub releases.
See Tips and Tweaks: Desktop and Dock Icon Setup for pinning Affinity to your dock, taskbar, or application panel. Those steps are the same regardless of install method.
This section covers an optional, tested Wine source patch for a separate device-creation crash. It is not required for most users, and requires building Wine yourself from source.
Affinity creates a Direct3D device on startup, and queries DISPLAYCONFIG_DEVICE_INFO_GET_SDR_WHITE_LEVEL (the display's SDR reference white level, used for HDR/wide-gamut color pipeline setup) through DisplayConfigGetDeviceInfo. Wine doesn't implement that query (FIXME: Unimplemented packet type 11, in NtUserDisplayConfigGetDeviceInfo in sysparams.c), returns an error, and Affinity's own error handling treats that as fatal for device creation (DXRenderer.cpp(1014): error 0x80004001, Not implemented). This was confirmed via Affinity's own Log.txt.
This is unrelated to the Canva sign-in crash fixed by LoginFix, which is entirely inside Affinity's own process and needs no Wine changes. This patch addresses a separate device-creation failure, independently confirmed by testing with and without it.
The patch touches dlls/win32u/sysparams.c, and is tested against Wine 11.15. It sets SDRWhiteLevel to 1000 (documented as 80 nits, the standard SDR reference white level) for every query, regardless of actual monitor calibration. This is good enough to unblock device creation, but is not a real per-monitor implementation.
Building Wine from source needs a full build toolchain, ./configure, and make. Expect 15 to 40+ minutes, even on a fast machine. Most users should not need to do this; it's documented here for reference, and as a candidate to submit upstream to WineHQ.
cd wine-11.15
patch -p1 < wine-11.15-sdr-white-level.patch
./configure --enable-win64
make -j$(nproc)The patch file itself is at Guides/Wine/wine-11.15-sdr-white-level.patch in the project repository.
See General Known Issues for issues that affect Affinity on Linux across install methods, and the Troubleshooting section above for issues specific to this manual Wine setup.
See Install Guide: Uninstall Wine for removing Wine, Affinity, and their associated files from your system.
- Wine 10.17 (mainline / devel)
- ✅ Affinity 3.x (64-bit)
- ✅ Affinity 2.x (64-bit)
- ✅ Fedora 42
- ✅ Nobara 42
- ✅ Arch 2025.03
- ✅ Ubuntu
- ElementalWarrior — creator of wine-wintypes.dll-for-affinity
- WineHQ Team — added WinRT metadata support (MR #8367)
- Microsoft — provider of Windows.winmd metadata
-
Guide revision & testing
- Wanesty for finding this update
- GameDirection/InterfaceAS for testing and submitting the guide
- And of course the AffinityOnLinux community
- Noah C3 — creator of AffinityPluginLoader and WineFix
- Harmony library by Pardeike
Start Here
Install Guides
- Wine
- ↳ Uninstalling
- ↳ Wine in Docker 🟨
- Lutris
- ↳ OpenCL
- Heroic
- Bottles
- Rum
- ↳ Installer GUI
⚠️ - Script Installer
Fixes & Tweaks
- Settings Not Saving
- Panels & Dock Layout
- Login Solution and Scripts
- Tips and Tweaks
⚠️ General Known Issues
Related Projects
Reference
Community & Status