Files
anki/docs/build.md
Andrew Sanchez 5a9b54e938 Briefcase Installer (#4629)
migrates Anki Desktop packaging from the legacy
NSIS/uv-based installer to [BeeWare
Briefcase](https://briefcase.readthedocs.io/). This branch integrates
work from many related issues and PRs to deliver cross-platform native
installers (MSI on Windows, .app on macOS, PyInstaller on Linux) with
code signing, notarization, and file association support.

## Integrated PRs

- #4585 — Set up Briefcase
- #4596 — Add Briefcase icons
- #4598 — Handle Briefcase file associations
- #4601 — Add Briefcase app permissions
- #4609 — Customize Briefcase's MSI installer
- #4616 — Set up Briefcase code signing and notarization
- #4618 — Fix Briefcase packaging for x86 Macs
- #4623 — Customize Briefcase's Linux template
- #4627 — List required Debian packages for Briefcase installer
- #4630 — Update Briefcase's Windows template
- #4631 — Rewrite Linux install/uninstall scripts for PyInstaller
- #4638 — Use PyInstaller on Linux
- #4645 — Update installer docs
- #4654 — Disable Briefcase's universal builds for macOS
- #4672 — Deal with existing NSIS installations in MSI installer
- #4676 — Remove duplicate Briefcase icons
- #4677 — Tweak Linux scripts for new installer
- #4709 — Add anki-console.bat to Briefcase's Windows package

## Related Issues

- #4557 — Evaluate BeeWare Briefcase for Anki packaging and distribution
- #4678 — Support native Windows ARM64 builds for Briefcase
- #4688 — Linux installer: migrate to PyInstaller and rewrite install
scripts
- #4689 — Investigate startup performance with Briefcase
- #4690 — Specify required Linux system packages for Briefcase
- #4691 — Investigate Windows ARM64 support with Briefcase
- #4692 — Test on Linux ARM with Briefcase
- #4693 — Separate ARM and Intel macOS releases
- #4694 — Update developer documentation for Briefcase installer
- #4695 — Support upgrade/downgrade with the Briefcase installer
- #4696 — Update user documentation for new installer
- #4702 — Update Briefcase's Windows template with upstream security fix
and OS version check
- #4703 — Follow-up tweaks to Linux install/uninstall scripts

## Related PRs

- #4619 — Enable Windows ARM64 support
- #4632 — Release action

---------

Co-authored-by: Abdo <abdo@abdnh.net>
Co-authored-by: Andrew Sanchez <andrewsanchez@users.noreply.github.com>
Co-authored-by: Fernando Lins <1887601+fernandolins@users.noreply.github.com>
2026-05-05 17:29:18 -04:00

1.6 KiB

The build system

Basic use

Basic use is described in development.md.

Architecture

The build/ folder is made up of 4 packages:

  • build/configure defines the actions and inputs/outputs of the build graph - this is where you add new build steps or modify existing ones. The defined actions are converted at build time to a build.ninja file that Ninja executes.
  • build/ninja_gen is a library for writing a build.ninja file, and includes various rules like "build a Rust crate" or "run a command".
  • build/archives is a helper to download/checksum/extract a dependency as part of the build process.
  • build/runner serves a number of purposes:
    • it's the entrypoint to the build process, taking care of generating the build file and then invoking Ninja
    • it wraps executable invocations in the build file, swallowing their output if they exit successfully
    • it provides a few helpers for multi-step processes that can't be easily described in a cross-platform manner thanks to differences on Windows.

Tracing build problems

If you run into trouble with the build process:

  • You can see the executed commands with e.g. ./ninja pylib -v
  • You can see the output of successful commands by defining N2_OUTPUT_SUCCESS=1
  • You can see what's triggering a rebuild of a target with e.g. ./ninja qt/anki -d explain.
  • You can browse the build graph via e.g. ./ninja -- -t browse wheels
  • You can profile build performance with https://discourse.cmake.org/t/profiling-build-performance/2443/3.

Packaging considerations

See this page.