Run the real Figma Desktop app on Linux — not a browser wrapper, not a web app, but the actual Electron-based desktop client with full functionality.
This project extracts the official Figma Desktop Windows installer, patches it for Linux compatibility, and packages it as an AppImage, .deb, or .rpm. You get everything the Windows/macOS client has: system tray icon, figma:// protocol handling, MCP server support, native window frames, and offline file opening.
Every other "Figma for Linux" project is just a browser window pretending to be a desktop app. This one is different:
| Feature | This project | Browser wrappers |
|---|---|---|
| Full desktop Electron client | Yes | No |
| System tray icon | Yes | No |
figma:// URL protocol handler |
Yes | No |
MCP server (127.0.0.1:3845/mcp) |
Yes | No |
Native .fig file opening |
Yes | No |
| Dark mode detection | Yes | Varies |
| Figma i18n locales (7 languages) | Yes | No |
| Desktop notifications | Yes | Browser-level |
| Auto desktop integration | Yes | Manual |
| Allow duplicate tabs (same file in multiple tabs) | Yes | No |
The build script performs a multi-stage pipeline:
- Extract — Downloads (or uses a local copy of)
FigmaSetup.exe, unpacks the Squirrel/NuGet package to reachapp.asar - Patch — Applies Linux-specific fixes:
- Enables native window frames (Figma ships with
frame:falsefor custom titlebar) - Stubs Windows/macOS native modules (
bindings.node,desktop_rust.node) with JS equivalents - Fixes
handleCommandLineArgsto findfigma://URLs in Linux's argv layout - Hides the Electron menu bar while keeping the native frame
- Enables native window frames (Figma ships with
- Package — Bundles a matching Electron binary + patched
app.asarinto your chosen format - Integrate — On first launch, the AppImage automatically registers a
.desktopfile andfigma://URI handler
Grab the latest AppImage from the Releases page — no build step required:
chmod +x figma-desktop-*.AppImage
./figma-desktop-*.AppImageOn first launch the AppImage automatically:
- Creates a
.desktopentry in~/.local/share/applications/ - Registers itself as the
figma://URL handler - Copies the Figma icon to your icon theme
After that, Figma appears in your application menu like any other app.
- Node.js 20+ (or the script installs it locally)
- p7zip — for extracting the Windows installer
- ImageMagick — for icon conversion
- wget — for downloading the installer
The build script auto-detects missing dependencies and installs them via
apt(Debian/Ubuntu) ordnf(Fedora/RHEL).
git clone https://github.com/IliyaBrook/figma-linux.git
cd figma-linux
# Build an AppImage (default)
./build.sh
# Run it
chmod +x figma-desktop-*.AppImage
./figma-desktop-*.AppImage# Build a .deb package (Debian/Ubuntu)
./build.sh --build deb
# Build an .rpm package (Fedora/RHEL)
./build.sh --build rpm
# Build an AppImage (explicit)
./build.sh --build appimage
# Use a previously downloaded installer (skip download)
./build.sh --exe /path/to/FigmaSetup.exe
# Keep intermediate build files for debugging
./build.sh --clean no# Debian/Ubuntu
sudo apt install ./figma-desktop_*.deb
# Fedora/RHEL
sudo dnf install ./figma-desktop-*.rpmmake build # Build AppImage (default)
make build-deb # Build .deb
make build-rpm # Build .rpm
make run # Run the built AppImage
make run-debug # Run with FIGMA_DEBUG=1 (logs to stdout)
make clean # Remove all build artifacts
make url # Print the latest Figma download URLsWhen Figma Desktop is running, it exposes an MCP (Model Context Protocol) server at:
http://127.0.0.1:3845/mcp
This is the same MCP endpoint available in the Windows/macOS clients. You can connect any MCP-compatible tool (Claude Code, Cursor, VS Code extensions, etc.) to interact with the running Figma instance — inspect documents, export assets, run code generation, and more.
The launcher handles both X11 and Wayland:
| Environment | Behavior |
|---|---|
| X11 | Works out of the box |
| Wayland (default) | Uses XWayland for compatibility |
| Wayland (native) | Set FIGMA_USE_WAYLAND=1 for native Wayland |
# Force native Wayland mode
FIGMA_USE_WAYLAND=1 ./figma-desktop-*.AppImageThis build includes enhancements not available in the official Figma Desktop client:
In the official Figma client, clicking a file that's already open simply switches to the existing tab — there's no way to open the same file in two tabs side by side. This build adds a "Allow Duplicate Tabs" toggle in the system tray menu.
How to use: Right-click the Figma icon in the system tray and check "Allow Duplicate Tabs". Now clicking any file (from Home, Starred, Recents, or anywhere) will always open it in a new tab, even if it's already open. Uncheck to restore the default behavior.
This is useful when you need to view different pages or sections of the same file simultaneously.
Logs are written to ~/.cache/figma-desktop-linux/launcher.log.
# Run with debug output to terminal
FIGMA_DEBUG=1 ./figma-desktop-*.AppImage
# Or via Make
make run-debugSetting FIGMA_DEBUG=1 enables verbose logging to stdout and automatically opens DevTools for the tray notification window (Feed).
Figma Desktop includes built-in DevTools accessible via keyboard shortcuts (menu bar: Help → Troubleshooting):
| Shortcut | What it opens |
|---|---|
Ctrl+Alt+I |
DevTools for the active tab (editor, files — main Figma content) |
Shift+Ctrl+Alt+I |
DevTools for the shell (window frame, tab bar, sidebar) |
Tip: The menu bar is hidden by default. Press
Altto toggle it and access Help → Troubleshooting for additional debug options including saving debug info, network logs, and performance logs.
figma-desktop-linux/
build.sh # Main orchestrator
Makefile # Build/run shortcuts
get-url-x64.sh # Print latest Figma download URLs
scripts/
frame-fix-wrapper.js # BrowserWindow monkey-patch for native frames
figma-native-stub.js # JS stubs for Windows/macOS native modules
launcher-common.sh # Shared X11/Wayland detection logic
build-appimage.sh # AppImage packaging
build-deb-package.sh # Debian packaging
build-rpm-package.sh # RPM packaging
frame:!1/frame:falsein BrowserWindow options replaced withframe:truetitleBarStyle:"hidden"replaced with"default"require("./bindings.node")redirected tofigma-native-stub.js(40+ stubbed methods)require("./desktop_rust.node")redirected to stubhandleCommandLineArgsrewritten to scan all argv entries (Linux passes CLI flags before the app path)package.jsonmain entry updated to loadframe-fix-wrapper.jsbefore the original entry pointopenFileTabdefault parameter patched to support the "Allow Duplicate Tabs" toggle via system tray
- No auto-updates — The Squirrel updater is Windows-only. Rebuild to update to a new version.
- No eyedropper tool — Requires native screen capture (
bindings.node), which is stubbed. - x86_64 only — Figma's Windows installer is x86_64-only.
This project provides build tooling only. Figma Desktop is proprietary software owned by Figma, Inc. By using this project you agree to Figma's Terms of Service.