- JavaScript 80.9%
- Python 7.1%
- CSS 4.9%
- HTML 4.3%
- NSIS 2.8%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| build | ||
| scripts | ||
| src | ||
| .gitignore | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
Furcord for Windows
A dedicated Windows desktop client for Furcord (https://app.furcord.org).
Why Electron
- Reliability: Furcord is a modern web app that depends on a current Chromium (notifications, voice and video, WebSockets, clipboard). Electron bundles its own Chromium, so behavior is identical on every Windows 10/11 PC.
- Tauri was considered. It gives a smaller installer, but it uses the system WebView2 runtime. Its notification, download and screen-share support differs more from Chrome, and its updater needs signing keys from day one. Electron costs a larger installer (roughly 80-100 MB) in exchange for fewer compatibility surprises.
- Updates and installer:
electron-builderproduces the NSIS installer andelectron-updaterhandles updates from any static HTTPS host. - Platform: Windows x64 only. ARM64 Windows 11 runs x64 apps through emulation, so a separate ARM64 build is not needed. 32-bit is not supported.
Project layout
package.json version, scripts, electron-builder + installer config
src/config.js app URL, allowed hosts, window defaults
src/main.js window, navigation policy, permissions, downloads, menu
src/windowState.js remembers window size, position, maximized state
src/updater.js automatic updates (electron-updater)
src/error/ "Unable to connect to Furcord." page with Retry
build/icon.ico multi-size Windows icon (16-256 px)
build/icon.png 512 px PNG used for the window icon
build/installer*.bmp installer / uninstaller sidebar branding
build/installer.nsh adds the optional desktop-shortcut checkbox
build/source/ original logo
scripts/make-icons.py regenerates all icon assets from the original logo
How it works
main.jsopens one window onhttps://app.furcord.orgwithcontextIsolation,sandbox, and nonodeIntegration. There is no preload script, so the remote site gets no extra APIs.- Only hostnames in
allowedHostsstay in the app. Any otherhttp(s)/mailtolink opens in the default browser, and other schemes are ignored. - Permissions are granted only to the Furcord origin and only for notifications, microphone/camera, fullscreen, clipboard write, and pointer lock.
- Downloads use the normal Windows "Save As" dialog. Screen sharing asks which screen to share.
- Sessions use Electron's default persistent profile in
%APPDATA%\Furcord, so cookies and local storage survive restarts. The app stores no passwords. Cookies that Furcord sets without an expiry date are session cookies and are dropped on exit by Chromium. If login does not persist, Furcord must set an expiry on its auth cookie or keep the token in local storage. - If the site cannot be reached (offline, DNS, TLS, or HTTP 502/503/504), a local error page appears. It retries automatically every 10 seconds and when the network returns.
- Closing the window quits the app, so no background process is left behind.
Development PC prerequisites
- Windows 10 or 11, 64-bit.
- Node.js LTS (includes npm):
winget install OpenJS.NodeJS.LTS. Restart PowerShell afterwards. - Python 3 with Pillow only if you want to regenerate icons:
pip install pillow. - Enable Developer Mode (Settings > System > For developers), or run PowerShell as Administrator for the first installer build. electron-builder unpacks tools that contain symlinks, which fails without one of these.
Commands
cd C:\Dev\furcord
npm install # once
npm run dev # Development: run the app from source
npm run build # Production build: unpacked app at dist\win-unpacked\Furcord.exe
npm run dist # Installer build: dist\Furcord-Setup.exe
Installer
NSIS via electron-builder. It installs to C:\Program Files\Furcord for all users (UAC prompt), lets the user change the folder, creates the Start Menu shortcut, registers the uninstaller under Installed Apps (publisher "Furcord", the Furcord icon, the version from package.json), and offers an unchecked "Create a desktop shortcut" box on the final page. It needs no other software. Uninstalling removes the app and shortcuts but keeps %APPDATA%\Furcord (user data).
The installer is unsigned unless you add a code-signing certificate. Windows SmartScreen will warn ("Windows protected your PC > More info > Run anyway") until you sign it. See "Code signing" below.
Automatic updates
The app checks 15 seconds after launch and every 4 hours. Updates download silently; the user is asked to restart, or the update installs the next time Furcord closes.
Hosting required: any static HTTPS location, with no GitHub involved. The feed URL is build.publish[0].url in package.json (currently https://updates.furcord.org/desktop/). It is baked into each build, so decide on it before you hand out version 1.0.0. Example Caddy site:
updates.furcord.org {
root * /srv/furcord-updates
file_server
header /desktop/latest.yml Cache-Control "no-cache"
}
Releasing an update
- Raise
"version"inpackage.json(for example1.0.1). - Run
npm run dist. - Upload these three files from
dist\to/srv/furcord-updates/desktop/:latest.yml,Furcord-Setup.exe,Furcord-Setup.exe.blockmap. Uploadlatest.ymllast.
Installed apps with a lower version then update themselves. The first update after 1.0.0 will show a UAC prompt because the install is per-machine. To install per-user instead (no UAC on updates, location %LOCALAPPDATA%\Programs\Furcord), set "perMachine": false in the nsis block.
Updates are verified by the SHA-512 in latest.yml served over HTTPS. Signing the installer adds publisher verification and removes SmartScreen warnings.
Code signing (optional)
Buy a Windows code-signing certificate (or use Azure Trusted Signing), then follow the electron-builder code signing docs for win.signtoolOptions. Once builds are signed, you may also set win.publisherName so the updater checks the publisher. Do not set it on unsigned builds, because updates would then fail.
Changing things later
- Version:
versioninpackage.json. - Site URL or allowed domains:
src/config.js. - Logo: replace
build/source/Furcord-logo.png, runnpm run icons, and replacesrc/error/logo.pngif desired.
Known limitations
- Screen sharing offers whole screens only (no per-window picker), and does not capture system audio.
- This project has not been built or run on Windows by its author; follow the test checklist below on your first build.
Test checklist
- Installer shows the Furcord icon and sidebar; installs to
C:\Program Files\Furcord - Furcord launches and
https://app.furcord.orgloads, with no browser chrome - Exe, taskbar, Start Menu and window title bar show the Furcord icon; title says Furcord
- Log in; fully quit (check Task Manager); relaunch: still logged in
- Furcord links stay in the app; external links (docs, terms, other sites) open in the default browser
- A file download shows the Save As dialog and saves correctly
- Notifications appear, if Furcord requests them
- Copy/paste, right-click menu, Ctrl+/Ctrl- zoom work
- Disconnect from the network and relaunch: error screen with Retry; reconnecting recovers
- Resize and maximize, close, reopen: size and maximized state restored
- Start Menu shortcut works; Desktop shortcut works if selected on the finish page
- Settings > Apps > Installed apps lists Furcord 1.0.0, publisher Furcord, with the icon
- Update test: publish 1.0.1 to your update host and confirm the 1.0.0 app updates
- Uninstall removes the app and shortcuts; reinstall works; no
Furcord.exeprocesses remain