Skip to content

fix(flet pack): Windows taskbar shortcut pointing to wrong .exe#6403

Open
ndonkoHenri wants to merge 2 commits intorelease/v0.85.0from
fix-flet-pack
Open

fix(flet pack): Windows taskbar shortcut pointing to wrong .exe#6403
ndonkoHenri wants to merge 2 commits intorelease/v0.85.0from
fix-flet-pack

Conversation

@ndonkoHenri
Copy link
Copy Markdown
Contributor

@ndonkoHenri ndonkoHenri commented Apr 10, 2026

  • Taskbar fix: When a packed Flet app runs on Windows, it spawns flet.exe (the Flutter client) as a child process. Windows associates the taskbar entry with the child's executable path (~/.flet/client/.../flet.exe), so pinning the app creates a shortcut to the bare client. The fix sets a Windows AppUserModelID on flet.exe via the FLET_APP_USER_MODEL_ID environment variable, so Windows associates the taskbar entry with the parent application instead. Resolves Blank White Screen When Launching Flet App from Taskbar After Initial Launch #5151.
    Screenshot 2026-04-10 at 2 13 23 PM

  • Pack bundling fix: flet pack was copying the extracted client files into the PyInstaller bundle, but at runtime ensure_client_cached() looks for an archive (flet-windows.zip / flet-linux-*.tar.gz). The archive was never found, so the app always fell back to downloading from GitHub on first launch — wasteful for released versions, broken for unreleased ones. macOS already re-packed correctly; Windows and Linux now do the same.

Testable CI artifacts: https://github.com/flet-dev/flet/actions/runs/24243238835

Summary by Sourcery

Ensure packed Flet desktop apps bundle and launch the correct client archives across platforms and integrate with Windows taskbar pinning behavior.

Bug Fixes:

  • Fix Windows taskbar pinning so packed Flet apps are associated with the parent executable instead of the cached flet.exe client.
  • Ensure flet pack bundles the desktop client as an archive (zip/tar.gz) that matches ensure_client_cached() expectations on Windows and Linux, avoiding fallback network downloads.

Enhancements:

  • Expose a public get_artifact_filename() helper for determining the platform-specific desktop client archive name.
  • Improve pack command behavior by compressing patched client binaries into platform-appropriate archives before PyInstaller runs.
  • Clarify desktop client and environment-variable documentation strings in flet_desktop.

Copy link
Copy Markdown
Contributor

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We've reviewed this pull request using the Sourcery rules engine

@ndonkoHenri ndonkoHenri changed the title Fix flet pack fix(flet pack): Windows taskbar shortcut pointing to wrong .exe Apr 10, 2026
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR improves flet pack-produced desktop apps by (1) ensuring the bundled Flutter client archive is actually discoverable at runtime (avoiding first-run downloads), and (2) fixing Windows taskbar pin/shortcut behavior by setting an AppUserModelID for the spawned flet.exe process (resolving #5151).

Changes:

  • Expose and use a shared artifact naming function so flet pack can bundle the exact archive name ensure_client_cached() expects.
  • Re-compress the patched client directory into a platform-appropriate archive during flet pack (Windows .zip, Linux .tar.gz; macOS already repacks).
  • Add Windows AppUserModelID plumbing: Python sets FLET_APP_USER_MODEL_ID, and the Windows runner reads it and calls SetCurrentProcessExplicitAppUserModelID().

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

File Description
sdk/python/packages/flet-desktop/src/flet_desktop/init.py Adds get_artifact_filename() and sets FLET_APP_USER_MODEL_ID in the child process env on Windows.
sdk/python/packages/flet-cli/src/flet_cli/commands/pack.py Re-compresses the copied flet/ client directory into the runtime-expected archive format/name during packaging.
client/windows/runner/main.cpp Reads FLET_APP_USER_MODEL_ID and sets the process AppUserModelID to fix taskbar association/pinning.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +12 to 14
from flet_desktop import get_artifact_filename


Copy link

Copilot AI Apr 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

from flet_desktop import get_artifact_filename is executed at module import time, but handle() only installs/ensures flet-desktop later via ensure_flet_desktop_package_installed(). In an environment where flet-desktop isn't installed yet, flet pack will fail before it can run the installer. Consider moving the flet_desktop import into handle() (after the ensure call) or importing lazily only inside the Linux branch with a clear error if unavailable.

Suggested change
from flet_desktop import get_artifact_filename
def get_artifact_filename(*args, **kwargs):
from flet_desktop import get_artifact_filename as _get_artifact_filename
return _get_artifact_filename(*args, **kwargs)

Copilot uses AI. Check for mistakes.
@FeodorFitsner
Copy link
Copy Markdown
Contributor

Add changelog record.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Blank White Screen When Launching Flet App from Taskbar After Initial Launch

3 participants