pingdotgg / pingdotgg/t3code

[Bug]: AppImage fails to launch on Ubuntu 26.04 — missing libfuse2, EPIPE crash, and instance-lock conflict

Open
#4,465 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
23k
Forks
5.9k
Avg merge
11h 14m
Merged PRs (30d)
357

Description

Area

apps/desktop

Steps to reproduce
  1. Download T3-Code-0.0.28-x86_64.AppImage from GitHub Releases on a clean Ubuntu 26.04 (GNOME / Wayland) system.
  2. Double-click the AppImage — nothing happens because the file lacks execute permission and the DE doesn't know how to handle AppImages by default.
  3. Run chmod +x on the file and try again — still nothing, because libfuse2 is not installed by default on Ubuntu 24.04+ (only libfuse3 is present).
  4. Install libfuse2 via sudo apt install libfuse2 and launch from a terminal with ./T3-Code-0.0.28-x86_64.AppImage --no-sandbox.
  5. The app opens a window briefly (~1 second) then crashes with a JavaScript error dialog: "write EPIPE" at console.log in effect.js:2863.
  6. Close all instances, then launch with setsid ... >/dev/null 2>&1 < /dev/null & (detached, stdout to /dev/null) — the app starts successfully.
  7. While one instance is running, launch another — the second instance creates a window then immediately closes with no visible error (the log shows desktop.clerk.configure interrupted via requestSingleInstanceLockelectronApp.quit).
Expected behavior
  • Double-clicking the AppImage in a file manager should either launch the app or present a clear error message.
  • The app should not crash when launched from a terminal where stdout is piped or disconnected.
  • A second instance should either bring the first instance's window to the foreground or show a clear message that another instance is already running.
Actual behavior
  • No desktop integration: AppImage does not register as an executable; requires manual chmod +x.
  • Missing dependency: libfuse2 is not listed as a dependency anywhere; the error message only appears when run from a terminal (GUI double-click shows nothing).
  • EPIPE crash: The app crashes when stdout is a closed or disconnected pipe, because console.log calls in the Effect runtime throw an unhandled EPIPE error in the main process.
  • Silent instance-lock quit: A second instance opens its window briefly then silently quits, leaving the user confused. No dialog, no notification, no focus-stealing to the existing window.
Impact

Major degradation — blocks first-time launch entirely for users on modern Ubuntu without manual intervention. The EPIPE crash also makes the app fragile when launched via scripts, desktop files, or terminal pipelines.

Version or commit

T3-Code-0.0.28-x86_64.AppImage

Environment
  • OS: Ubuntu 26.04 LTS (Resolute Raccoon)
  • Kernel: 7.0.0-27-generic
  • Desktop: GNOME (Wayland session)
  • Display: 1536x864 @ 1.25x scale
  • GPU: Intel HD Graphics 620 (Kaby Lake-U GT2)
  • libfuse2: not installed by default
Logs or stack traces

EPIPE crash (when launched from terminal):

Uncaught Exception:
Error: write EPIPE
    at afterWriteDispatched (node:internal/stream_base_commons:159:15)
    at writeGeneric (node:internal/stream_base_commons:150:3)
    at Socket._writeGeneric (node:net:1025:11)
    at Socket._write (node:net:1037:8)
    at writeOrBuffer (node:internal/streams/writable:570:12)
    at _write (node:internal/streams/writable:499:10)
    at Writable.write (node:internal/streams/writable:508:10)
    at console.value (node:internal/console/constructor:313:16)
    at console.log (node:internal/console/constructor:416:26)
    at Object.log (file:///tmp/.mount_T3-CodbsEOVo/resources/app.asar/node_modules/effect/dist/internal/effect.js:2863:5)

Instance-lock conflict (from desktop.trace.ndjson):

{"exit":{"_tag":"Interrupted","cause":"InterruptError: All fibers interrupted without error\n    at desktop.clerk.configure (...)\n    at desktop.startup (...)\n    at desktop.app (...)\n  [cause]: InterruptCause: The fiber was interrupted by:\n      at fiber (#1)"}}
Workaround
  1. chmod +x T3-Code-0.0.28-x86_64.AppImage
  2. sudo apt install libfuse2
  3. Launch detached from terminal to avoid EPIPE:
    setsid ./T3-Code-0.0.28-x86_64.AppImage --no-sandbox >/dev/null 2>&1 < /dev/null &
    
  4. Ensure no other T3 Code instance is running before launching.
  5. For desktop integration, manually create a .desktop file at ~/.local/share/applications/t3-code.desktop.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in apps/desktop by reproducing the AppImage launch commands and then trace the Electron startup path around requestSingleInstanceLock, desktop.startup, and desktop.clerk.configure. Use the EPIPE stack trace at effect.js:2863 and desktop.trace.ndjson to separate the launch failures. Done means a clean Ubuntu launch gives a clear dependency or integration result, disconnected stdout does not crash the app, and a second instance clearly focuses the first or reports that it is already running.

Written by the indexing model from the issue text.

Assessment

Tech stack
electron, linux, typescript, ubuntu
Domain
desktop, operating-systems, release
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.