Skip to content

Story: define an official signed Windows installer distribution #1

Description

@inayayousfi

Problem

The current release flow publishes a Windows standalone ZIP, but there is no official signed Windows installer story yet.

That leaves a few gaps:

  • Windows Defender SmartScreen and "unknown publisher" friction for end users
  • no first-class install/update/uninstall path
  • no documented certificate/signing pipeline
  • a weaker foundation for deeper Windows integration work around accessibility/UI automation and related platform APIs

Why this matters

Axidev OSK is already targeting Windows as a supported desktop platform. An official installer and code-signing story would make the project feel like a real Windows application instead of a loose archive download.

It should also improve the path toward Windows-specific accessibility and UI-facing APIs where proper packaging, signing, and trust matter in practice, while reducing SmartScreen friction for normal installs.

Scope

Define and implement the official Windows distribution approach, including installer format, signing approach, release automation, and user-facing install documentation.

This issue should cover the story at the product/release level, not just "generate a different artifact".

Packaging and runtime architecture context

Axidev OSK is currently shipped as a Python desktop application with a native input stack underneath it, not as a single self-contained native codebase.

Relevant packaging/runtime facts for this story:

  • the top-level app package is axidev-osk, a Python package with the CLI entrypoint axidev-osk = axidev_osk.app:main
  • the UI/runtime is primarily Python plus PySide6
  • keyboard/input integration is not pure Python: the app depends on the vendored axidev-io-python package, which wraps native axidev-io C sources
  • on Windows, that native layer uses normal Python extension tooling and Win32 libraries
  • on Linux, the native layer depends on system libinput, libudev, and xkbcommon, and those are intentionally expected to remain dynamically linked from the host system
  • Linux input features also depend on host permissions such as /dev/uinput access and relevant /dev/input/event* access
  • current standalone release artifacts are built with scripts/build_standalone.py, which uses PyInstaller to bundle the Python runtime, the app package, and the Python/native dependency stack into a ZIP archive
  • the current release flow publishes standalone ZIP artifacts for Windows and Linux, not a native installer/repository format for each platform yet
  • licensing/compliance files for the vendored native stack are already carried into the standalone bundle and need to stay accounted for in any new packaging path

This issue should evaluate trade-offs against that runtime architecture explicitly so someone can reason about the packaging design without first reading the build scripts or code.## Acceptance criteria

  • document the current packaging/runtime architecture, including Python runtime, native dependency stack, and artifact shape, so trade-offs can be reviewed without reading the code first
  • choose and document the official Windows installer format and distribution approach
  • choose and document the signing model for both the app binary and installer artifact
  • integrate signing and installer production into the release pipeline
  • publish a signed Windows installer as a release artifact
  • document install, update, uninstall, and upgrade behavior
  • document SmartScreen expectations and any remaining reputation caveats
  • document how this packaging story affects or enables future accessibility/UI-automation/API integration work on Windows

Notes

Implementation could end up using MSI, MSIX, WiX, Inno Setup, NSIS, or another Windows-native path, but the issue should not assume the answer before the tradeoffs are evaluated.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions