Skip to content

deno desktop: Linux launcher fails to find runtime .so when output basename contains dots #35971

Description

@tianalemesle

Version: Deno 2.9.2

Description

On Linux, deno desktop builds that use an output basename containing dots fail at launch with:

No runtime library found. Set LAUFEY_RUNTIME_PATH or use --runtime <path>

The runtime .so is present in the bundle, but the webview launcher looks for the wrong filename.

Steps to reproduce

  1. Create a Vite + Vue project (or any deno desktop project).
  2. Build for Linux with an output name that contains dots:
deno desktop --target x86_64-unknown-linux-gnu --output "./out/my-app.AppImage" .

Example basename: template-deno2.9.2-desktop-vue3-vite8

  1. Run the produced AppImage or launcher binary:
./out/my-app.AppImage

Expected behavior

The app should start and load its bundled runtime library automatically.

Actual behavior

The launcher exits immediately with:

No runtime library found. Set LAUFEY_RUNTIME_PATH or use --runtime <path>

Root cause (observed)

The Linux webview launcher appears to derive the runtime library path from the executable basename by treating everything after the last dot as a file extension.

Launcher binary Looks for Actual runtime file
template-deno2.9 template-deno2.so template-deno2.9.so
test-myapp test-myapp.so test-myapp.so

When the output basename is template-deno2.9.2-desktop-vue3-vite8, Deno also truncates the launcher name to template-deno2.9, which then resolves to template-deno2.so instead of template-deno2.9.so.

Workarounds

  1. Use a dot-free output basename (e.g. template-deno292-desktop-vue3-vite8).
  2. Pass the runtime explicitly:
./template-deno2.9 --runtime ./template-deno2.9.so
  1. Set LAUFEY_RUNTIME_PATH to the correct .so path.

Environment

  • OS: Linux (Pop!_OS / Ubuntu-based)
  • Deno: 2.9.2 (stable, release, x86_64-unknown-linux-gnu)
  • Target: x86_64-unknown-linux-gnu
  • Backend: webview (default)
  • Output format: AppImage (also affects plain app directory builds)

Additional context

The launcher uses /proc/self/exe to locate itself and then searches for a sibling .so with the basename stripped at the last dot. This breaks for version numbers or identifiers embedded in the app name (e.g. myapp.v1.2.3, deno2.9.2-...).

Relevant launcher strings include ./libruntime.so, --runtime, LAUFEY_RUNTIME_PATH, and No runtime library found. Set LAUFEY_RUNTIME_PATH or use --runtime <path>.


EDIT: posted with wrong account, subsequent replies will be made by @KaKi87. Thanks

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions