Anki is a smart spaced repetition flashcard program https://apps.ankiweb.net
Find a file
xiaohan484 f13c15aef0
fix: build bundled fcitx5 plugin against the bundled Qt (#5142)
## Linked issue (required)

Fixes #5110

## Summary / motivation (required)

CI builds the fcitx5 plugin against one Qt but ships it inside PyQt6's
Qt — a
version mismatch that crashes Anki on startup for every fcitx5 user.

**Root cause:** the plugin subclasses `QPlatformInputContext`, a Qt
private API
with no ABI guarantee across minor versions. Built against Qt 6.2.4
headers but
run inside Qt 6.11.0, it dereferences a misplaced member and SIGSEGVs on
first
focus.

**Solution:** build the plugin against the same Qt as the bundled
`pyqt6-qt6`
and install it where the packaging step (`qt/tools/build_installer.py`)
looks.
The per-flag reasoning is in the commit message.

## Steps to reproduce (required, use N/A if not applicable)

1. On a Linux desktop configured to use fcitx5 as the input method,
install the
   official Anki 26.05 release.
2. Launch Anki normally.
3. It dies with SIGSEGV on startup, as soon as the main window takes
focus.

## How to test (required)

### Checklist (minimum)

- [x] I ran `./ninja check` or an equivalent relevant check locally.
- [ ] I added or updated tests when the change is non-trivial or
behavior changed.

### Details

`release.yml` is `workflow_dispatch`-only, so it can't run on the PR. I
reproduced its build step locally: rebuilt the plugin against Qt 6.11.0
(confirmed the `Qt_6.11` ELF tag and a clean `dlopen(RTLD_NOW)`),
dropped it into
an Anki 26.05 bundle, and typed Chinese and Japanese without the crash.

## Risk / compatibility / migration (optional)

1. Fixes `build-linux-x86` only. `build-linux-arm-installer` installs a
prebuilt
`fcitx5-frontend-qt6` from apt, built against Ubuntu's Qt rather than
the
bundled 6.11.0 — the same class of mismatch. I have no arm hardware to
confirm
   or fix it, so it's left for a follow-up.
2. Adds an `aqtinstall` step (~1.5 GB Qt download) to the Linux release
build.
3. **Not validated on CI.** `release.yml` is `workflow_dispatch`-only,
so an
external contributor can't run it; only its build step is reproduced
locally
   (see How to test). **Please confirm it in a real release build.**

## UI evidence (required for visual changes; otherwise N/A)

N/A

## Scope

- [x] This PR is focused on one change (no unrelated edits).
2026-07-15 16:19:30 +03:00
.cargo Use rust-lld on Windows (#4650) 2026-07-06 23:16:36 +08:00
.config Drop workspace-hack in favor of workspace deps 2023-06-23 17:41:31 +10:00
.cursor/rules Make URL schemes dialog more ergonomic (#4002) 2025-05-15 16:17:33 +10:00
.github fix: build bundled fcitx5 plugin against the bundled Qt (#5142) 2026-07-15 16:19:30 +03:00
.idea.dist Update PyCharm docs (#4389) 2025-10-27 19:27:50 +07:00
.vscode.dist fix: Update allowed origins for recent Chromium (#5080) 2026-06-30 19:29:03 +03:00
build chore(ci): use prebuilt binaries for cargo-llvm-cov and cargo-nextest (#5141) 2026-07-15 16:06:13 +03:00
cargo chore: bump fsrs version (#4956) 2026-07-03 10:45:00 +01:00
docs fix(syncserver): use built-in --healthcheck instead of wget (#5044) 2026-06-26 14:02:47 +03:00
docs-site docs(chore): Replace certain pages with redirects (#5065) 2026-06-25 17:41:57 +03:00
ftl feat: Experimental options in preferences (#5057) 2026-07-13 16:16:42 +03:00
proto feat: Experimental options in preferences (#5057) 2026-07-13 16:16:42 +03:00
pylib feat: Experimental options in preferences (#5057) 2026-07-13 16:16:42 +03:00
python Build and publish dev docs (#4579) 2026-03-31 08:26:59 -04:00
qt feat: Experimental options in preferences (#5057) 2026-07-13 16:16:42 +03:00
rslib fix: prevent panic when merging a notetype with duplicate fields (#5070) 2026-07-15 06:29:30 +08:00
tools ci: Normalize GitHub noreply emails for all contributors (#5159) 2026-07-15 16:18:16 +03:00
ts fix: broken tags editor in legacy editor (#5151) 2026-07-15 15:32:31 +03:00
.complexipy.toml chore: Integrate Complexipy for complexity analysis (#4942) 2026-06-04 19:29:37 +03:00
.deny.toml chore: Fix advisory RUSTSEC-2026-0204 (#5129) 2026-07-09 13:04:37 +03:00
.dockerignore Add distroless Dockerfile and implement internal health check (#3366) 2024-08-29 17:05:33 +07:00
.dprint.json Prototype unified Mintlify docs site (#4882) 2026-06-12 16:27:33 +03:00
.eslintrc.cjs Shift editor control to TypeScript (#4029) 2026-07-03 21:56:43 +03:00
.gitattributes try again to improve GitHub's language stats 2021-01-20 13:20:45 +10:00
.gitignore chore: Integrate Complexipy for complexity analysis (#4942) 2026-06-04 19:29:37 +03:00
.gitmodules Briefcase Installer (#4629) 2026-05-05 17:29:18 -04:00
.mypy.ini Briefcase Installer (#4629) 2026-05-05 17:29:18 -04:00
.pre-commit-config.yaml chore: Run complexipy-diff as part of ninja check (#4987) 2026-06-10 21:04:15 +03:00
.prettierrc Switch back to Prettier for Svelte formatting 2025-01-13 15:53:55 +11:00
.python-version feat: Distribute compiled sources in Briefcase bundle (#4856) 2026-05-18 17:47:03 +03:00
.readthedocs.yaml Build and publish dev docs (#4579) 2026-03-31 08:26:59 -04:00
.ruff.toml Switch to Ruff (#4119) 2025-06-29 14:38:35 +07:00
.rustfmt-empty.toml Move away from Bazel (#2202) 2022-11-27 15:24:20 +10:00
.rustfmt.toml Move ascii_percent_encoding into a separate repo 2023-04-12 08:45:23 +10:00
.version chore: Sync with the 26.05 branch (#5041) 2026-06-19 16:36:51 +03:00
.yarnrc.yml chore: add release-age controls for uv and Yarn dependencies (#4761) 2026-04-30 13:38:42 -03:00
AGENTS.md chore: Updates just recipes and add AGENTS.md (#4943) 2026-06-03 12:02:18 -03:00
Cargo.lock chore: Fix advisory RUSTSEC-2026-0204 (#5129) 2026-07-09 13:04:37 +03:00
Cargo.toml chore: bump fsrs version (#4956) 2026-07-03 10:45:00 +01:00
check Add a shortcut to auto-format before running checks 2023-07-02 09:59:05 +10:00
CLAUDE.md chore: Updates just recipes and add AGENTS.md (#4943) 2026-06-03 12:02:18 -03:00
CONTRIBUTORS fix: build bundled fcitx5 plugin against the bundled Qt (#5142) 2026-07-15 16:19:30 +03:00
justfile chore: Move complexipy out of Ninja checks (#5082) 2026-07-01 17:48:06 +03:00
LICENSE Drop Pauker and SuperMemo importers from legacy importer 2025-06-27 16:10:12 +07:00
ninja Migrate build system to uv (#4074) 2025-06-19 14:03:16 +07:00
package.json chore(deps): consolidated security updates (Dependabot batch) (#4934) 2026-06-03 15:10:39 -03:00
playwright.config.ts fix(ci): fix flaky e2e editor tests caused by premature webServer readiness (#5116) 2026-07-07 10:20:43 +03:00
pyproject.toml chore: Bump complexipy (#5058) 2026-06-23 17:19:15 +03:00
README.md docs: Remove duplicate intro in README (#5003) 2026-06-15 17:18:27 +03:00
release.just fix: Use Powershell to run just commands on Windows (#4921) 2026-06-01 16:49:39 +03:00
run fix: Update allowed origins for recent Chromium (#5080) 2026-06-30 19:29:03 +03:00
run.bat fix: Update allowed origins for recent Chromium (#5080) 2026-06-30 19:29:03 +03:00
rust-toolchain.toml Update to Rust 1.92 (#4461) 2026-01-11 18:50:16 +07:00
SECURITY.md Update security.md. (#4790) 2026-05-11 13:04:24 -04:00
tsconfig.json Shift editor control to TypeScript (#4029) 2026-07-03 21:56:43 +03:00
uv.lock chore: Update Briefcase (#5138) 2026-07-11 20:56:00 +03:00
yarn Do JS license output from top-level script 2026-02-11 14:26:53 +07:00
yarn.bat Switch to SvelteKit (#3077) 2024-03-31 09:16:31 +01:00
yarn.lock chore(deps): consolidated security updates (Dependabot batch) (#4934) 2026-06-03 15:10:39 -03:00

Anki

Build Status Documentation

This repo contains the source code for the computer version of Anki.

About

Anki is a spaced repetition program. Please see the website to learn more.

Getting Started

Contributing

Want to contribute to Anki? Check out the Contribution Guidelines.

For more information on building and developing, please see Development.

Contributors

The following people have contributed to Anki: CONTRIBUTORS

Anki Betas

If you'd like to try development builds of Anki but don't feel comfortable building the code, please see Anki betas.

License

Anki's license: LICENSE