CodeNomad/dev-docs
Pascal André a6c19d19d7
fix(tauri): leave the display stack to the host in the Linux AppImage (#1138)
The Tauri AppImage showed a black window on up-to-date Linux systems
(#1136: Arch, sway, AMD, Mesa 26.2). WebKit aborted with "Could not create
surfaceless EGL display: EGL_BAD_ALLOC", and no WebKit or GDK variable
helped.

Tauri CLI 2.11.5's linuxdeploy copied the build runner's display stack
into the image: Ubuntu 24.04's libwayland-client, -cursor, -egl and
-server, libxkbcommon, libxcb-render and -shm, libXau and libXdmcp.
AppRun puts usr/lib first on the library path, so the host's Mesa EGL
loaded the stale libwayland-client and failed even on the surfaceless
platform. This is tauri-apps/tauri#15976, fixed upstream in CLI 2.12.1.
On a current Arch userland (Mesa 26.2.5, wayland 1.26), `eglinfo -p
surfaceless` initializes with the host libraries and fails with the
1.0.0 image's bundled ones, or with its libwayland-client alone.

Packaging:
- The Tauri CLI moves to ^2.12.4.
- The Linux job defines APPIMAGE_HOST_LIBRARIES once (wayland,
  xkbcommon, xcb, X11, Xau, Xdmcp, EGL, GL, gbm, drm). It is passed to
  linuxdeploy as LINUXDEPLOY_EXCLUDED_LIBRARIES, because 2.12.4's own
  excludelist still deploys GDK's display libraries.
- The AppImage verification step rejects an image that bundles any of
  them.

Runtime, because the 2.12 GTK hook leaves GDK_BACKEND unset and exports
mount-scoped module paths:
- main() sets GDK_BACKEND=x11,wayland unless the session sets it. This
  keeps the XWayland windowing that the F11 X11 key grab needs, with a
  Wayland fallback.
- appimage_environment.rs drops variables inside the mount (byte-wise,
  plus the lossy spelling of the Node-serialized shell snapshot) and the
  mount's path-list entries. GIO_MODULE_DIR, unlike GIO_EXTRA_MODULES,
  replaces the host's module directory. It applies to children that
  outlive the mount: the backend (and through it the shared OpenCode
  service), the editors CodeNomad opens, and link handlers.
- Links open through external_open.rs. On Linux it uses the opener
  plugin's launchers with the host environment, detached; elsewhere it
  delegates to the plugin. The renderer reaches it through a new
  open_external_url command (http, https, mailto). The windows hold that
  command instead of opener:allow-open-url.
- The plugin's injected click handler is off. Its replacement,
  lib/native/external-link-clicks.ts, takes the same decisions in the
  application and Preferences windows and in trusted same-origin SideCar
  documents. Opaque previews and panel extensions stay fenced.
- The unused @tauri-apps/plugin-opener npm dependency is dropped.

Validation:
- Ubuntu 24.04: the Linux crate compiles, and the appimage_* tests
  (path lists, non-UTF-8 entries and mounts, lossy snapshot) and the
  capability test pass.
- The inventory check accepts GTK, WebKit and GLib, and rejects flat,
  multiarch, dangling-symlink and GLES copies.
- Browser tests drive the real link handler (target="_blank", Ctrl,
  Shift, nested, mailto; plain, Alt, tel and custom schemes untouched)
  and the real SideCarView and preview frames in a stubbed Tauri window.
  Each fails without its fix.
- The UI own-tsconfig and root typechecks pass.
2026-10-25 15:45:34 +01:00
..
architecture.md docs(previews): describe how root-relative preview resources resolve (#1132) 2026-10-24 21:29:54 +02:00
BROWSER_AUTOMATION.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
BROWSER_DEVICE_EMULATION.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
CACHE_REFRESH_CONVENTIONS.md fix(transcript): keep streaming live across shared-stream reconnects (#1088) 2026-10-21 23:34:37 +02:00
COMPOSER.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
DESKTOP_DATA_PROFILES.md feat(settings): manage desktop data profiles and drop the startup question (#1123) 2026-10-24 09:46:30 +02:00
FILES_PANEL.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
HOTKEYS.md fix(transcript): jump between user messages with Alt+Up/Down, also from the composer (#1087) 2026-10-21 20:36:02 +02:00
INDEX.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
MISSIONS.md fix(missions): give mission roots OpenCode session identifiers (#1133) 2026-10-25 02:10:47 +02:00
MISSIONS_AUTONOMY.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
MISSIONS_RECURRING.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
MISSIONS_RECURRING_QUALIFICATION.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
NATIVE_INTERRUPTION_UX.md fix(forms): keep a live global Form's location for its reply (#1127) 2026-10-24 13:34:31 +02:00
OPENCODE_COMPATIBILITY.md chore(opencode): qualify and recommend runtime 2.1.4 (#1126) 2026-10-24 13:34:36 +02:00
OPENCODE_RUNTIME_SETUP.md fix(opencode): explain why OpenCode 2 cannot be installed beside an older command (#1093) 2026-10-22 13:49:20 +02:00
PALETTE_SOURCES.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
PANEL_EXTENSIONS.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
PLUGIN_CONTROLS.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
PROJECTS.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
PROVIDER_ACCOUNTS.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
REMOTE_CONTROL.md feat(remote-control): serve web previews to paired devices (#1131) 2026-10-24 20:25:25 +02:00
RUNTIME_MAINTENANCE.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
SESSION_ENVIRONMENT.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
SESSION_HISTORY_NAVIGATION.md fix(timeline): mirror every transcript block in order and keep clicks on the clicked marker (#1086) 2026-10-22 05:32:43 +02:00
SESSION_HISTORY_QUERIES.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
SESSION_PRUNING_RPC.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
SESSION_PRUNING_SAFETY.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
SESSION_RECOVERY.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
SETTINGS.md fix(notifications): show Windows system notifications and keep their permission (#1109) 2026-10-23 04:03:26 +02:00
solidjs-llms.txt update blank session cleanup code for now session store logic 2025-11-27 20:18:22 -05:00
TAURI_UPDATER.md fix(tauri): leave the display stack to the host in the Linux AppImage (#1138) 2026-10-25 15:45:34 +01:00
TEXT_DISPLAY_BOUNDS.md fix(transcript): keep streaming reasoning rendering past the display bound (#1106) 2026-10-23 11:48:13 +02:00
TRANSCRIPT.md fix(transcript): load large tool images on demand instead of inline (#1118) 2026-10-23 23:38:00 +02:00
UI_CONVENTIONS.md fix(titlebar): show the hexagon logo at 20 px (#1116) 2026-10-23 21:59:53 +02:00
UI_SHELL.md feat(remote-control): serve web previews to paired devices (#1131) 2026-10-24 20:25:25 +02:00
USER_HELP.md docs(agents): keep AGENTS.md to universal rules and agent docs to the current state (#1082) 2026-10-21 16:59:43 +02:00
WORKTREE_SESSION_PLACEMENT.md fix(worktrees): omit a checkout mid-removal instead of failing the whole inventory (#1089) 2026-10-21 22:24:01 +02:00