Skip to content

New Windows Installer using PyInstaller #161

@rtibbles

Description

@rtibbles

What problem are we solving?

The current Kolibri Windows deployment relies on an outdated C++ installer that requires a separate Python environment setup on the host system. This approach creates challenges in maintainability, user experience, and cross-platform compatibility. The existing system:

  • Requires users to have the correct Python environment locally - to support this we bundle a Python installer, but this is limited to Python 3.8 to provide backwards compatibility for Windows 7
  • Has numerous performance issues that are seemingly unique to Windows (and potentially attributable to being executed within the C++ wrapper)
  • Causes errors that mean that Kolibri logs are filled with errors, and little meaningfully useful information

Why this? Why now?

  • Technical debt reduction: The current C++ Windows installer is outdated and difficult to maintain, creating growing technical debt that impedes future development.
  • Improved user experience: Windows users represent a significant portion of the Kolibri user base, and they deserve a more reliable, performant, and easier-to-install experience.
  • Unified codebase: The existing macOS app (kolibri-app) provides a foundation that can be extended to Windows, allowing for consolidated development efforts.
  • Cross-platform sustainability: Creating a consistent application architecture across platforms will simplify future development and maintenance for Learning Equality.

Outcomes

Specific needs that are being addressed, and how we will know when the project is done

  • A fully functional Kolibri Windows application that replaces the legacy installer while maintaining and improving all its core functionalities:
    • Runs independently of the host system's Python environment
    • Utilizes Microsoft Edge WebView2 for app-style rendering in a webview, when available
    • Offers to launch in default web browser when app-style rendering not available
    • Features a system tray icon with appropriate functionality
    • Can operate as a Windows Service for background operation
  • A native Windows installer (.exe) created with InnoSetup that:
    • Correctly installs all application files
    • Integrates WebView2 installation
    • Registers the Kolibri server as a Windows service
    • Creates appropriate shortcuts
    • Provides clean uninstallation
  • An automated build pipeline (GitHub Actions workflow) that produces both the executable bundle and installer package
  • Documentation for users and developers on the new Windows application

Constraints

Budgets, deadlines, technical limitations, and other constraints

  • Timeline: 12-week development cycle as defined by Google Summer of Code 2025 schedule (June 2 - August 31)
  • Technical limitations:
    • Must maintain compatibility with systems that may not have internet access during installation
    • Must function properly on a wide range of Windows versions (7 - 11)
    • Application size constraints (minimize as much as possible for distribution in low-bandwidth areas)
  • Integration requirements:
    • Must leverage the existing kolibri-app codebase rather than creating a completely new solution
    • Must ensure the development of the Windows app doesn’t break MacOS app

Out of scope

  • Linux/GNOME application development (focus is on Windows only)
  • Addressing performance issues within Kolibri itself (as opposed to application wrapper issues)
  • Supporting obsolete Windows versions (pre-Windows 7)

Sub-issues

Metadata

Metadata

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions