Skip to content

Evaluate BeeWare Briefcase for Anki packaging and distribution #4557

@abdnh

Description

@abdnh

Context

The migration from PyOxidizer to the UV-based launcher (#3081, #4074) has created significant UX regressions despite solving critical technical problems. Users report that the terminal-based installation process appears "virus-like" and creates confusion, particularly for non-technical users. The offline installer request (#4241) has 29 upvotes, and the GUI launcher request (#4152) has 18 upvotes.

BeeWare Briefcase discussion #2316 contains a proof of concept demonstrating that Briefcase can package Anki. In a meeting with Russell Keith-Magee (Briefcase creator), @dae, and the AnkiHub team, Russell estimated implementation could be completed in as little as one day.

Goal

Determine whether Briefcase can produce production-ready native installers (MSI/DMG/DEB) for all supported Anki platforms while preserving or improving upon current functionality.

Definition of Done

We have validated that Briefcase either can or cannot meet Anki's packaging requirements on all supported platforms by answering these questions:

  1. Binary dependency handling
    • Confirm Briefcase correctly installs and bundles rsbridge (PyO3/Rust extension)
    • Verify PyQt6 and all binary dependencies work across Windows/macOS/Linux
    • Test platform-specific wheels
  2. Native installer generation
    • Windows: Generate MSI installer (or confirm directory output works with existing NSIS wrapper)
    • macOS: Generate signed and notarized DMG with proper .app bundle
    • Linux: Generate DEB package (DEB preferred over AppImage/Flatpak for compatibility)
  3. Startup performance
    • Measure cold start time vs. current launcher
    • Document any performance regression and evaluate mitigations (zip stdlib, PYC precompilation)
  4. Process identity
    • Determine if Briefcase-packaged app appears as "Anki" (not "Python") in Task Manager/Dock
    • If not, document an approach to preserve launcher entrypoint while using Briefcase for packaging
  5. Offline capability
    • Confirm installer is fully offline-capable (no runtime dependency downloads) - is this what we want/need?
    • Validate total installer size is acceptable
  6. Auto-update compatibility
    • Document whether the existing Tools > Upgrade/Downgrade mechanism can be preserved - If not, outline required changes to update architecture
  7. Build pipeline integration
    • Confirm Briefcase can be integrated into existing BuildKite CI/CD
    • Document platform-specific build requirements (Briefcase cannot cross-compile)

Non-Goals

Migrating Anki's GUI to Toga

Mobile platform support via Briefcase

Success Criteria

Briefcase is feasible if all seven validation points pass or have documented, acceptable workarounds.

Briefcase is not feasible if any blocker exists that cannot be resolved within a reasonable implementation timeline (e.g., unacceptable startup time regression with no mitigation path).

Related Issues

#3081 - PyOxidizer abandonment

#4074 - UV launcher implementation

#4151 - Python integration in launcher

#4152 - GUI launcher (18 upvotes)

#4241 - Offline installer request (29 upvotes)

#4144 - Process identity (Task Manager/Dock naming)

#4556 - Revisiting the launcher

References

Briefcase discussion with Anki PoC

Briefcase documentation - Packaging external apps

Metadata

Metadata

Assignees

No one assigned

    Labels

    launcherRelated to Anki's installer/launcher (qt/launcher)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions