Use your locally installed Linux fonts in Figma (web) — no official installers, no manual uploads.
Figma ships a "Font Installer" / "Font Helper" for macOS and Windows, but not for Linux. This project fills that gap: a small local server that speaks the same protocol Figma expects, so fonts installed on your machine show up in the Figma web app.
This is an independent, community-built tool. See CREDITS.md.
In Figma (browser) on Linux you may see:
Want to use local fonts? To see them here, you'll need to download Figma's font installer or desktop app.
There is no Linux font installer, so local fonts never appear.
Figma probes http://127.0.0.1:<port> for a local font server. We implement
that server. Key detail discovered: modern Figma first calls
GET /figma/version as a handshake — if that returns 404, Figma reports
"Couldn't connect" and never proceeds. Implementing that one endpoint makes
everything work.
| Method | Path | Purpose |
|---|---|---|
GET |
/figma/version |
Handshake → {"version":4} |
GET |
/figma/font-files |
List all local fonts (Figma format) |
GET |
/figma/font-file?file=/abs/path.ttf |
Serve a font file |
GET |
/ , /health |
Status (our addition) |
Listens on 127.0.0.1: 44950, 44951, 44952, 18412, 44900, 44910
(Figma probes several ports).
Fonts are read from: ~/.fonts, ~/.local/share/fonts, /usr/share/fonts
(recursive). Metadata is parsed with fontkit.
sudo dpkg -i figma-font-bridge_4.0.0_all.debSelf-contained (dependencies bundled). Sets up a systemd user service that
auto-starts on login. Requires nodejs (>= 16).
Uninstall:
sudo dpkg -r figma-font-bridgegit clone https://github.com/siinmedia/linux-figma.git
cd linux-figma/companion
npm install
node index.jsmkdir -p ~/.config/systemd/user
cp systemd/figma-font-bridge.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now figma-font-bridgeThe bridge only serves fonts that are already installed on your system. It does not download fonts for you. So install your fonts first, then restart the service.
Pick either location (.ttf, .otf, .ttc, .woff, .woff2 all work):
# Per-user (recommended — no sudo needed)
mkdir -p ~/.local/share/fonts
cp /path/to/YourFont*.ttf ~/.local/share/fonts/
# System-wide (all users)
sudo cp /path/to/YourFont*.ttf /usr/share/fonts/truetype/After copying fonts, rebuild the fontconfig cache so other apps see them:
fc-cache -f -vVerify your font is now known to the system:
fc-list | grep -i "Your Font"The bridge watches your font directories and rescans automatically — just install the font and it appears within a few seconds. No restart needed.
Check it was found:
curl -s http://127.0.0.1:44950/figma/font-files | grep -o "Your Font" | head -1Auto-rescan watches
~/.fonts,~/.local/share/fontsand/usr/share/fonts. It also re-checks every 60s as a fallback. To force a manual restart anyway:systemctl --user restart figma-font-bridge
mkdir -p ~/.local/share/fonts
unzip font-pack.zip -d ~/.local/share/fonts/
fc-cache -f
# bridge picks them up automatically (auto-rescan)rm ~/.local/share/fonts/YourFont.ttf
fc-cache -f
# bridge drops it automatically (auto-rescan)Note: Auto-rescan means you normally never need to restart the service after adding or removing fonts. If a font still does not appear, check
journalctl --user -u figma-font-bridge | grep rescan.
- Make sure the server is running:
systemctl --user status figma-font-bridge curl http://127.0.0.1:44950/figma/version # → {"version":4} - Open figma.com in a Chromium-based browser and reload the page.
- Select a text layer → open the font dropdown → your local fonts appear.
Nothing to do — the bridge auto-rescans. If you want to force it anyway:
systemctl --user restart figma-font-bridgejournalctl --user -u figma-font-bridge -fSee packaging/ and the helper script:
./packaging/build-deb.shOutput: figma-font-bridge_<version>_all.deb.
- Figma web app →
GET http://127.0.0.1:44950/figma/version - We reply
{"version":4}→ Figma continues. - Figma →
GET /figma/font-files→ we return every parsed font face. - Figma →
GET /figma/font-file?file=...for each font it wants to render.
CORS is set to Access-Control-Allow-Origin: https://www.figma.com plus
Access-Control-Allow-Private-Network: true (required for localhost access
from a public site).
linux-figma/
├── companion/ # The font server (Node.js)
│ ├── index.js
│ └── package.json
├── systemd/ # systemd user unit
│ └── figma-font-bridge.service
├── packaging/ # Debian packaging
│ ├── control # Package metadata
│ ├── postinst # Install script (enables service, no npm needed)
│ ├── prerm # Uninstall script (disables + removes unit)
│ └── build-deb.sh # Build reproducible .deb (self-contained)
├── CREDITS.md # Attribution for reused protocol knowledge/code
├── LICENSE # MIT
├── RELEASE.md # Release notes & upload instructions
└── README.md
- The server binds to
127.0.0.1only (not reachable from the network). /figma/font-fileonly serves files inside the configured font directories.- No telemetry, no network calls except serving local font bytes.
Protocol knowledge and prior art come from the community project Figma-Linux/figma-linux-font-helper by Roman Chugunov. See CREDITS.md for full attribution.
Figma is a trademark of Figma, Inc. This project is not affiliated with Figma.