What changed in Anki from 25 to 26
3 releases numbered after 25.09.4 up to and including 26.08.1, stable releases only. 25.09.4 and 26.08.1 are the newest stable releases of 25 and 26 we track; this page follows them as new ones ship.
- 2 remove or deprecate something
43 changes across 3 releases
- An experimental rework of the editor can be enabled from Preferences > Experiments
- A new Experiments section has been added to the Preferences screen for experimental features
- Updates can be installed using Tools>Check For Updates
- Standard MSI installer provided for Windows
- Windows ARM64 build available
- Python API docs available at dev-docs.ankiweb.net
- Support for tag:nc:... syntax for case-insensitive tag searches
- Syntax for multi-card cloze deletions
- Update to fsrs-rs 6.6.1, bringing performance improvements
- Bump minimum required macOS version to 13.0
- Strip FSRS parameters from deck configs on export without scheduling
- Replace terminal-based launcher with standard installation process
- Installation no longer requires network access
- macOS builds now require macOS 13 or later
- Linux x86_64 build now requires glibc 2.35+
- Linux aarch64 build now requires glibc 2.39+
- Minimum supported Python version is now 3.10
- Qt updated to 6.11
- User and developer documentation unified under single website
- Treat newlines as term breaks in search queries
- FSRS memory state updates faster through batched calculations
- Require three left-clicks to unlock FSRS parameter editing
- Fix broken custom study and unbury links in the congrats screen
- Fix broken OK button in help modals
- Fix some add-on editor buttons not working after multiple clicks
- Fix errors after add-on webviews are deleted
- Fix some inline styles not being filtered out in editor image pastes
- Fix all-users MSI installation failing to detect existing installation
- Do not block MSI install if registry points to a deleted old elevated install
- Build Linux fcitx5 plugin against the bundled Qt as a potential fix for startup crashes
- Avoid interval FSRS regressions from fuzz
- Check Database now fixes incorrect last review time entries in cards
- Fix Anki reporting that a full sync is required for new empty collections
- Do not modify collection if preferences haven't changed
- Follow Anki's language preference in webview and native form controls
- Fix note editor jumps html focus
- Fix text input refocuses when list item shortcuts are pressed
- FSRS short-term schedule now respected when using default parameters
- Per deck retention now applied when card is moved to filtered deck
- Desired retention refreshes when switching deck option presets
Original release notes, newest first
The list above is our reading of these notes; the originals from Ankitects are here, one fold per release.
26.08.1
What Changed
- Fix broken custom study / unbury links in the congrats screen by @abdnh in https://github.com/ankitects/anki/pull/5278
- Fix broken OK button in help modals by @abdnh in https://github.com/ankitects/anki/pull/5279
Full Changelog: https://github.com/ankitects/anki/compare/26.08...26.08.1
26.08
Installing
- If you're on 26.05+, you can also install this update using Tools > Check for Updates.
- The update feature in versions 25.07 to 25.09 cannot be used to update to this release. Please see https://forums.ankiweb.net/t/an-important-note-about-updating-to-26-05/70139
What's Changed
Changes since Beta 2
- Fix some add-on editor buttons not working after multiple clicks by @abdnh in https://github.com/ankitects/anki/pull/5220
- Fix errors after add-on webviews are deleted by @aps-amboss in https://github.com/ankitects/anki/pull/5234
- Fix some inline styles not being filtered out in editor image pastes by @abdnh in https://github.com/ankitects/anki/pull/5236
- Remove unused plaintext paste handling in the editor by @abdnh in https://github.com/ankitects/anki/pull/5237
New Features
- Update to fsrs-rs 6.6.1, bringing performance improvements. By @asukaminato0721 in https://github.com/ankitects/anki/pull/4956
- An experimental rework of the editor by @abdnh in https://github.com/ankitects/anki/pull/4029 can be enabled from Preferences>Experiments. The main goal is to make it possible to integrate the editor into mobile clients. May affect addon compatibility.
- A new Experiments section has been added to the Preferences screen. This is intended to bring experimental features such as the new editor early to users for testing and feedback. By @Luc-Mcgrady in https://github.com/ankitects/anki/pull/5057
Other Notable Changes
- Bump minimum required macOS version to 13.0 by @abdnh in https://github.com/ankitects/anki/pull/5010
- Fix all-users MSI installation failing to detect existing installation by @abdnh in https://github.com/ankitects/anki/pull/5038
- Do not block MSI install if registry points to a deleted old elevated install by @abdnh in https://github.com/ankitects/anki/pull/5054
- Build Linux fcitx5 plugin against the bundled Qt as a potential fix for startup crashes in 26.05. By @xiaohan484 in https://github.com/ankitects/anki/pull/5142
- Remove the uv launcher and old packaging code by @abdnh in https://github.com/ankitects/anki/pull/5019
- Strip FSRS parameters from deck configs on export without scheduling by @chrislongros in https://github.com/ankitects/anki/pull/4721
- Avoid interval FSRS regressions from fuzz by @Tfc538 in https://github.com/ankitects/anki/pull/4826
- Check Database now fixes incorrect last review time entries in cards by @user1823 in https://github.com/ankitects/anki/pull/4648
- Improve FSRS optimal parameters message by @Expertium in https://github.com/ankitects/anki/pull/5181
- Fix Anki reporting that a full sync is required for new empty collections by @abdnh in https://github.com/ankitects/anki/pull/5112
- Do not modify collection if preferences haven't changed by @abdnh in https://github.com/ankitects/anki/pull/5135
- Follow Anki's language preference in webview and native form controls by @iDavi in https://github.com/ankitects/anki/pull/4935
- Fix note editor jumps html focus by @Yuukidiv in https://github.com/ankitects/anki/pull/4687
- Fix text input refocues when list item shortcuts are pressed by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/5007
- Fix empty card detection when template uses special field conditionals by @marcusl07 in https://github.com/ankitects/anki/pull/4807
- Fix image occlusion masks lost when adding notes in rare cases. By @LTimothy in https://github.com/ankitects/anki/pull/5155
- Fix text labels in image occlusion notes breaking if they contain special characters. By @iamllama in https://github.com/ankitects/anki/pull/5206
- Fix Card Info not updating on repeat by @DespicableGoose in https://github.com/ankitects/anki/pull/5115
- Do not close deck config screen when optimizing all presets by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4981
- Clean up FindDuplicatesDialog's webview on close to prevent theme-change crash by @LTimothy in https://github.com/ankitects/anki/pull/5143
Other Improvements
- Correct "1 tags" to "1 tag" by @Arthur-Milchior in https://github.com/ankitects/anki/pull/4967
- Prevent error when merging a notetype with duplicate fields in rare cases. By @krMaynard in https://github.com/ankitects/anki/pull/5070
- Set minimum height for deck options by @nikosavola in https://github.com/ankitects/anki/pull/5062
- Improve support of newlines in browser search by @jcznk in https://github.com/ankitects/anki/pull/5045
- Normalize whitespace in search query parser by @user1823 in https://github.com/ankitects/anki/pull/4853
- Cache FSRS config flags in CardQueues to avoid per-answer DB reads by @user1823 in https://github.com/ankitects/anki/pull/4755
- Use fsrs config bool for set due date by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4792
- Fix race condition in media sync handling by @helmutcarter in https://github.com/ankitects/anki/pull/4635
- Omit empty "Error details:" line from network errors by @criticalAY in https://github.com/ankitects/anki/pull/5120
Documentation Changes
- Remove duplicate intro in README by @abdnh in https://github.com/ankitects/anki/pull/5003
- Use "Getting started" as manual index page by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/5013
- Set up Prettier for formatting Mintlify website by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/5020
- Add translation support for docs website by @abdnh in https://github.com/ankitects/anki/pull/5052
- Fix relative links in docs by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/5048
- Re-add missing doc pages by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/5049
- Replace certain doc pages with redirects by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/5065
Development Changes
- Add unit tests for notetype service layer by @fernandolins in https://github.com/ankitects/anki/pull/5014
- Add unit and integration tests for search service by @fernandolins in https://github.com/ankitects/anki/pull/5024
- Fix failing syncserver Docker build by @konstantintutsch in https://github.com/ankitects/anki/pull/5021
- Bump rust builder and base image for syncserver by @RedPine404 in https://github.com/ankitects/anki/pull/5036
- Add hook system tests (closes #4931) by @roostwp07 in https://github.com/ankitects/anki/pull/5023
- Add service-layer unit tests for scheduler and cards (#4924) by @fernandolins in https://github.com/ankitects/anki/pull/5042
- Bump complexipy by @abdnh in https://github.com/ankitects/anki/pull/5058
- Do not fail CI if Complexipy fails by @abdnh in https://github.com/ankitects/anki/pull/5060
- Disable MSI compression on debug build by @abdnh in https://github.com/ankitects/anki/pull/5063
- Fix flaky scheduler test by @krMaynard in https://github.com/ankitects/anki/pull/5030
- Use built-in --healthcheck instead of wget in Dockerfile by @jeankhawand in https://github.com/ankitects/anki/pull/5044
- Update allowed origins for recent Chromium by @abdnh in https://github.com/ankitects/anki/pull/5080
- Move complexipy out of Ninja checks by @abdnh in https://github.com/ankitects/anki/pull/5082
- Add basic tests for sound module and mpv binary (closes #5016) by @roostwp07 in https://github.com/ankitects/anki/pull/5066
- Clean up bot noise when linked issue is added by @fernandolins in https://github.com/ankitects/anki/pull/5089
- Bump Rust dependencies for advisories by @fernandolins in https://github.com/ankitects/anki/pull/5090
- Strengthen test coverage for audio playback by @fernandolins in https://github.com/ankitects/anki/pull/5087
- Skip MpvManager test on Linux by @abdnh in https://github.com/ankitects/anki/pull/5094
- Increase mpv timeout in test by @abdnh in https://github.com/ankitects/anki/pull/5098
- Use rust-lld on Windows by @user1823 in https://github.com/ankitects/anki/pull/4650
- Handle cross-repo refs and exempt org members from linked-issue check by @fernandolins in https://github.com/ankitects/anki/pull/5113
- Fix flaky e2e editor tests caused by premature webServer readiness by @fernandolins in https://github.com/ankitects/anki/pull/5116
- Add core FTL strings for browse card-row status chips in AnkiMobile by @ianoff in https://github.com/ankitects/anki/pull/5111
- Fix invalid GHA permission in check-linked-issue.yml by @abdnh in https://github.com/ankitects/anki/pull/5118
- Add new translation string for "No Updates available" by @abdnh in https://github.com/ankitects/anki/pull/5122
- Disallow Qt translation strings in Rust/TS code by @abdnh in https://github.com/ankitects/anki/pull/5127
- Fix advisory RUSTSEC-2026-0204 by @abdnh in https://github.com/ankitects/anki/pull/5129
- Update Briefcase by @abdnh in https://github.com/ankitects/anki/pull/5138
- Use prebuilt binaries for cargo-llvm-cov and cargo-nextest by @iamllama in https://github.com/ankitects/anki/pull/5141
- Normalize GitHub noreply emails for all contributors by @abdnh in https://github.com/ankitects/anki/pull/5159
- Fix some issues in the sync_translations.py script by @abdnh in https://github.com/ankitects/anki/pull/5161
- Bump ammonia and spin for cargo deny check by @iamllama in https://github.com/ankitects/anki/pull/5192
- Run CI checks on arm linux, intel mac, and arm windows by @fernandolins in https://github.com/ankitects/anki/pull/5102
- Re-verify PR state before auto-closing to prevent race conditions by @fernandolins in https://github.com/ankitects/anki/pull/5213
- Add browse chip search strings for AnkiMobile by @ianoff in https://github.com/ankitects/anki/pull/5137
New Contributors
- @konstantintutsch made their first contribution in https://github.com/ankitects/anki/pull/5021
- @RedPine404 made their first contribution in https://github.com/ankitects/anki/pull/5036
- @roostwp07 made their first contribution in https://github.com/ankitects/anki/pull/5023
- @krMaynard made their first contribution in https://github.com/ankitects/anki/pull/5030
- @nikosavola made their first contribution in https://github.com/ankitects/anki/pull/5062
- @iDavi made their first contribution in https://github.com/ankitects/anki/pull/4935
- @helmutcarter made their first contribution in https://github.com/ankitects/anki/pull/4635
- @marcusl07 made their first contribution in https://github.com/ankitects/anki/pull/4807
- @ianoff made their first contribution in https://github.com/ankitects/anki/pull/5111
- @criticalAY made their first contribution in https://github.com/ankitects/anki/pull/5120
- @LTimothy made their first contribution in https://github.com/ankitects/anki/pull/5143
- @DespicableGoose made their first contribution in https://github.com/ankitects/anki/pull/5115
- @xiaohan484 made their first contribution in https://github.com/ankitects/anki/pull/5142
- @aps-amboss made their first contribution in https://github.com/ankitects/anki/pull/5234
Full Changelog: https://github.com/ankitects/anki/compare/26.05...26.08
26.05
What's Changed
New Installer
This release replaces the terminal-based launcher introduced in 25.07 with a more standard installation process:
- Anki no longer shows a terminal on installation/update.
- Installation no longer requires network access.
- Updates can be installed using Tools>Check For Updates.
- A standard MSI installer is provided for Windows.
- A Windows ARM64 build is available.
- The macOS builds require macOS 13 or later.
- The Linux x86_64 build requires glibc 2.35+.
- The Linux aarch64 build requires glibc 2.39+.
- The minimum supported Python version is now 3.10 (The official builds still ship Python 3.13).
- Qt has been updated to 6.11
Note: The Tools>Upgrade/Downgrade option in 25.07+ cannot be used to upgrade to this version due to packaging changes.
By @abdnh @andrewsanchez @fernandolins @Luc-Mcgrady @iamllama in https://github.com/ankitects/anki/pull/4629
Documentation Improvements
- All user/developer documentation is now unified under a single website deployed from the main repo. The different docs repos will be archived and existing issues moved soon. By @andrewsanchez @Luc-Mcgrady @abdnh in https://github.com/ankitects/anki/pull/4882
- Python API docs can now be viewed in dev-docs.ankiweb.net. By @andrewsanchez in https://github.com/ankitects/anki/pull/4579
FSRS/Scheduling Changes
- Rework the efficiency ratio graph in FSRS Help Me Decide by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4452
- Require three left-clicks to unlock FSRS parameter editing by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4372
- Speed up FSRS memory state updates by batching calculations by @DanielPechersky in https://github.com/ankitects/anki/pull/4335
- Improve performance of
reviews_for_fsrsfunction by @L-M-Sherlock in https://github.com/ankitects/anki/pull/4339 - Fix/first and latest review dates should only consider entries with a rating. by @L-M-Sherlock in https://github.com/ankitects/anki/pull/4360
- Fix/Ensure fuzz doesn't go backward during rescheduling by @user1823 in https://github.com/ankitects/anki/pull/4364
- Fix/Per deck retention not used when card is moved to filtered deck by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4413
- Restore retrievability SQL fix that was accidentally reverted by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4424
- Fix/rounded corners on FSRS Simulator modal by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4535
- Fix FSRS short-term schedule being ignored when using default parameters by @L-M-Sherlock in https://github.com/ankitects/anki/pull/4412
- Use quantiles for FSRS retrievability stat ranges by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4425
- Make descending retrievability a pure R sort by @user1823 in https://github.com/ankitects/anki/pull/4400
- Don't reschedule suspended cards by @L-M-Sherlock in https://github.com/ankitects/anki/pull/4453
- Apply deck-specific load balancer settings to filtered deck study by @MoamenAbdelsattar in https://github.com/ankitects/anki/pull/4574
- Prioritize previously-attempted cards in the intraday learning queue by @user1823 in https://github.com/ankitects/anki/pull/4393
- Improve sibling dispersal in the load balancer, including across presets by @jakeprobst in https://github.com/ankitects/anki/pull/4640
- Fix desired retention not refreshing when switching deck option presets by @barisayyildiz in https://github.com/ankitects/anki/pull/4610
- Improve FSRS invalid parameters error message with FAQ link by @AmandaSternberg-creator in https://github.com/ankitects/anki/pull/4342
- Clarify ambiguous "this value" wording in desired retention tooltip by @Expertium in https://github.com/ankitects/anki/pull/4647
- Expose
setParameterUnlockClickTimeoutMsfor FSRS parameter unlock timeout by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4810 - Export last_interval to Python by @user1823 in https://github.com/ankitects/anki/pull/4365
- Expose card decay and desired retention to the custom scheduler by @user1823 in https://github.com/ankitects/anki/pull/4880
- Remove broken retention rate help link in stats by @Hannanilsenn in https://github.com/ankitects/anki/pull/4329
Other Notable Changes
- Show saved custom colours in the image-occlusion fill tool colour picker on mobile by @iamllama in https://github.com/ankitects/anki/pull/4348
- Add support for
tag:nc:...(case-insensitive) tag searches by @iamllama in https://github.com/ankitects/anki/pull/4344 - Treat newlines as term breaks in search queries by @eliasjlara in https://github.com/ankitects/anki/pull/4336
- Add syntax for multi-card cloze deletions by @tfpgh in https://github.com/ankitects/anki/pull/4333
- Remember image-occlusion translucency toggle between sessions by @dspilleb in https://github.com/ankitects/anki/pull/4366
- Fix "Restore to Default" picking the wrong template for basic notetype variants by @arold0 in https://github.com/ankitects/anki/pull/4382
- Let the "Limit to" spin box grow with its content in the filtered deck dialog by @jcznk in https://github.com/ankitects/anki/pull/4398
- Fix unescaped HTML in correct type-in answers by @Eltaurus-Lt in https://github.com/ankitects/anki/pull/4407
- Always show text boxes on image-occlusion cards during review by @jariji in https://github.com/ankitects/anki/pull/4387
- Fix FindDuplicates dialog size exceeding screen bounds by @Nechaiter in https://github.com/ankitects/anki/pull/4426
- Fall back to Apple Samantha for TTS on macOS when no requested voice matches by @leedoughty in https://github.com/ankitects/anki/pull/4420
- Allow variable field counts per row when CSV import uses a notetype column by @iamllama in https://github.com/ankitects/anki/pull/4421
- Improve handling of media files differing only in letter case by @iamllama in #4355 #4851 #4860 #4861 #4852
- Keep non-breaking spaces outside cloze deletions when wrapping text by @leedoughty in https://github.com/ankitects/anki/pull/4446
- Start decoding images immediately by @SelfishPig in https://github.com/ankitects/anki/pull/4471
- Revert ForceDarkMode change that interfered with Anki's native dark theme by @GithubAnon0000 in https://github.com/ankitects/anki/pull/4483
- Apply the nightMode class to the editor in dark mode so custom HTML styles correctly by @leedoughty in https://github.com/ankitects/anki/pull/4473
- Auto-select the relevant note type in the Manage Note Types dialog after add/rename by @Arthur-Milchior in https://github.com/ankitects/anki/pull/4479
- Fix field rename by matching on the old name rather than field position by @Arthur-Milchior in https://github.com/ankitects/anki/pull/4488
- Allow horizontal scrolling on the deck options screen so AnkiDroid handles large font sizes by @defkorean in https://github.com/ankitects/anki/pull/4501
- Fix
{{#Tags}}conditional not triggering card generation by @Yuukidiv in https://github.com/ankitects/anki/pull/4533 - Silence console spam from image decoding errors during preload by @SelfishPig in https://github.com/ankitects/anki/pull/4534
- Add note type and GUID column headers to deleted.txt for easier reimport by @hnvy in https://github.com/ankitects/anki/pull/4454
- Apply Ctrl/Cmd+W window-closing shortcut globally to all dialogs by @beyondcompute in https://github.com/ankitects/anki/pull/4475
- Fix overlapping date ranges in graphs when "all history" is selected by @JMannervik in https://github.com/ankitects/anki/pull/4430
- Add a preference to disable the startup add-on update check by @SecretX33 in https://github.com/ankitects/anki/pull/4478
- Add
dir="auto"to cards so text direction no longer depends on the UI language by @MoamenAbdelsattar in https://github.com/ankitects/anki/pull/4428 - Accept images with capitalized extensions in the Browse "Attach" dialog by @miggazElquez in https://github.com/ankitects/anki/pull/4474
- Re-enable WindowsRT TTS player on Windows 11 by @abdnh in https://github.com/ankitects/anki/pull/4512
- Fix HTML editor collapsing after toggling sticky fields and adding a note by @Yuukidiv in https://github.com/ankitects/anki/pull/4566
- Fix image occlusion editor layout for right-to-left languages by @MoamenAbdelsattar in https://github.com/ankitects/anki/pull/4594
- Speed up tag autocomplete by using the Rust backend's complete_tag() by @user1823 in https://github.com/ankitects/anki/pull/4626
- Detect cloze fields nested inside conditionals during card generation by @maskady in https://github.com/ankitects/anki/pull/4651
- Prompt to save unsaved changes when closing or switching debug console scripts by @Arthur-Milchior in https://github.com/ankitects/anki/pull/4625
- Roll back the sidebar tag name when the backend rejects a rename by @chrislongros in https://github.com/ankitects/anki/pull/4718
- Improve word wrapping on the Deck Options screen for narrow viewports by @defkorean in https://github.com/ankitects/anki/pull/4558
- Update to mpv 0.41.0 by @abdnh in https://github.com/ankitects/anki/pull/4913
- Bundle Fcitx plugin on Linux by @abdnh in https://github.com/ankitects/anki/pull/4886
- Install required Linux system dependencies in install.sh by @abdnh in https://github.com/ankitects/anki/pull/4895
- Render sync server messages as rich text by @timarnoldev in https://github.com/ankitects/anki/pull/4560
Other Improvements
- Fix progress bar overflow crash when one-way uploads exceed 2 GB by @matbe766 in https://github.com/ankitects/anki/pull/4354
- Fix fatal error from rapidly double-clicking the Add button by @arold0 in https://github.com/ankitects/anki/pull/4377
- Use the native
crypto.randomUUID()instead of a custom UUID implementation by @leedoughty in https://github.com/ankitects/anki/pull/4384 - Credit Arabic translation contributor in the About window by @hnvy in https://github.com/ankitects/anki/pull/4720
- Tighten
Collection.add_notestype annotation so single-pass iterables aren't accepted by @jfly in https://github.com/ankitects/anki/pull/4758 - Set a friendly process job name for mpv on Windows by @abdnh in https://github.com/ankitects/anki/pull/4438
- Add Rust unit tests for the card-generation logic by @Yuukidiv in https://github.com/ankitects/anki/pull/4551
- Add punctuation, convert raw URLs to markdown links in READMEs by @oliolioli in https://github.com/ankitects/anki/pull/4570
- Reorder and comment .ftl files in UI order to help translators by @RolfMaster in https://github.com/ankitects/anki/pull/4514
- Show tooltips for truncated sidebar items in the Browse window by @nav1s in https://github.com/ankitects/anki/pull/4385
- Stop showing an error toast when saving an image-occlusion note twice on mobile by @iamllama in https://github.com/ankitects/anki/pull/4458
- Render
<br>as a line break in card template error messages instead of literal text by @leedoughty in https://github.com/ankitects/anki/pull/4451 - Use a true minus sign instead of a hyphen in the deck browser by @GithubAnon0000 in https://github.com/ankitects/anki/pull/4437
- Fix sync login dialog ignoring a freshly-set custom sync server URL by @ranjitodedra in https://github.com/ankitects/anki/pull/4396
- Add plural forms to unit labels next to spin boxes in the Custom Study dialog by @RolfMaster in https://github.com/ankitects/anki/pull/4520
- Don't expose collection.media.db2 over the API by @dae in https://github.com/ankitects/anki/pull/4653
- Update media sync progress dialog correctly after an error occurs in https://github.com/ankitects/anki/pull/4486
- Disable the Custom Study OK button when the selected deck is empty by @tunamayo04 in https://github.com/ankitects/anki/pull/4463
- Warn the user when renaming a profile would exceed the OS path length limit in https://github.com/ankitects/anki/pull/4552
- Fix regex error by @chiragjagga in https://github.com/ankitects/anki/pull/4837
- Preserve browser focus after note export by @Tfc538 in https://github.com/ankitects/anki/pull/4845
- Avoid loading unused cacert.pem by @abdnh in https://github.com/ankitects/anki/pull/4858
- Strip HTML from note type names in Empty Cards dialog by @abdnh in https://github.com/ankitects/anki/pull/4902 - Thanks to Tatsu Taki from JPCERT/CC Vulnerability Coordination Group for the report
- Parameterize inputs of prop:cd* queries by @abdnh in https://github.com/ankitects/anki/pull/4905 - Thanks to Michael Chesang (Threat Lance Security) for the report
- Validate add-on zip entries by @abdnh in https://github.com/ankitects/anki/pull/4901 - Thanks to aboykin and Michael Chesang (Threat Lance Security) for the reports
- Repaint UI after answer reveal to reduce glitches on cards with images by @abdnh in https://github.com/ankitects/anki/pull/4970
Developer Improvements
- The release build process is now fully automated using GitHub Actions. By @andrewsanchez @abdnh @fernandolins in https://github.com/ankitects/anki/pull/4632
- Migrate CI from BuildKite to GitHub Actions. By @andrewsanchez @abdnh @fernandolins in https://github.com/ankitects/anki/pull/4593
- Update to Rust 1.92 by @abdnh in https://github.com/ankitects/anki/pull/4461
- Add Dependabot config with monthly grouped updates by @fernandolins in https://github.com/ankitects/anki/pull/4726
- Update PyCharm docs by @abdnh in https://github.com/ankitects/anki/pull/4389
- Update VS Code config by @abdnh in https://github.com/ankitects/anki/pull/4397
- Treat proto/i18n's implicit outputs as inputs by @iamllama in https://github.com/ankitects/anki/pull/4439
- Respect .python-version when generating pyenv by @iamllama in https://github.com/ankitects/anki/pull/4436
- Add more required packages to Linux build guide by @user1823 in https://github.com/ankitects/anki/pull/4432
- Only run cargo-deny if there are dependency changes by @abdnh in https://github.com/ankitects/anki/pull/4644
- Remove old GPG public key by @dae in https://github.com/ankitects/anki/pull/4707
- Raise dependabot open-pull-requests-limit to 3 by @fernandolins in https://github.com/ankitects/anki/pull/4746
- Add release-age controls for uv and Yarn dependencies by @fernandolins in https://github.com/ankitects/anki/pull/4761
- docs: add contributing guidelines for add-ons, linked issues, and AI-assisted PRs by @fernandolins in https://github.com/ankitects/anki/pull/4782
- Add pre-commit for automated pre-push checks by @fernandolins in https://github.com/ankitects/anki/pull/4660
- Add a standardized pull request template by @fernandolins in https://github.com/ankitects/anki/pull/4655
- Exclude BackendFrontendService from write_python_interface by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4410
- Add regression test for #1909 (media check long filenames) by @bds124 in https://github.com/ankitects/anki/pull/4476
- Update docker build command for syncserver by @CYPHER0041 in https://github.com/ankitects/anki/pull/4562
- Exclude more folders from build actions by @abdnh in https://github.com/ankitects/anki/pull/4561
- Add Windows quick start guide for new contributors by @DaniSilvaCodes in https://github.com/ankitects/anki/pull/4466
- Update Windows developer docs by @user1823 in https://github.com/ankitects/anki/pull/4662
- Ignore Fluent message errors in TypeScript by @abdnh in https://github.com/ankitects/anki/pull/4494
- Drop QDialog argument from grade_now() to make it add-on friendly by @abdnh in https://github.com/ankitects/anki/pull/4459
- Wrap previewer type field syntax replacement in separate method by @DaedalusIndigo in https://github.com/ankitects/anki/pull/4563
- Document that
add_deckrequires refetching the deck to see its new ID by @jfly in https://github.com/ankitects/anki/pull/4760 - Update security.md by @andrewsanchez in https://github.com/ankitects/anki/pull/4790
- Add missing PyPI metadata to anki package by @fernandolins in https://github.com/ankitects/anki/pull/4817
- Fix beta/rc suffix handling in int_version() by @abdnh in https://github.com/ankitects/anki/pull/4828
- Prevent Windows elevation errors when running ninja_gen's update binaries by @abdnh in https://github.com/ankitects/anki/pull/4848
- Fix
atomic_renameto work with single-component relative paths by @jfly in https://github.com/ankitects/anki/pull/4773 - Add Python test coverage by @fernandolins in https://github.com/ankitects/anki/pull/4841
- Add Rust test coverage by @fernandolins in https://github.com/ankitects/anki/pull/4842
- Add TypeScript test coverage by @fernandolins in https://github.com/ankitects/anki/pull/4843
- Add test coverage docs by @fernandolins in https://github.com/ankitects/anki/pull/4844
- Add tests for build_installer.py by @abdnh in https://github.com/ankitects/anki/pull/4868
- Add Playwright end-to-end test infrastructure by @fernandolins in https://github.com/ankitects/anki/pull/4864
- Cache coverage baseline from main for regression checks by @fernandolins in https://github.com/ankitects/anki/pull/4875
- Replace print() logging in pylib with Python logging by @davidsauerwein in https://github.com/ankitects/anki/pull/4666
- Avoid broad warnings filter by @abdnh in https://github.com/ankitects/anki/pull/4900
- Enforce linked issue requirement on PRs by @fernandolins in https://github.com/ankitects/anki/pull/4910
- Fail PR if line coverage regresses by @fernandolins in https://github.com/ankitects/anki/pull/4876
- Import some modules lazily by @abdnh in https://github.com/ankitects/anki/pull/4831
- Add hash script for GitHub Actions by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4991
- Add unit tests for CSV export and import-export service layer by @fernandolins in https://github.com/ankitects/anki/pull/4976
- Add tests for attribute and tag stripping in HTML filter by @leedoughty in https://github.com/ankitects/anki/pull/4965
- Add unit tests for learning and relearning state transitions by @fernandolins in https://github.com/ankitects/anki/pull/4963
- Replace deprecated global map-get/map-merge with sass:map namespace by @fernandolins in https://github.com/ankitects/anki/pull/4955
- Remove unused Bootstrap imports from _button-mixins.scss by @fernandolins in https://github.com/ankitects/anki/pull/4953
- Integrate Complexipy for Python complexity analysis by @abdnh in https://github.com/ankitects/anki/pull/4942 and https://github.com/ankitects/anki/pull/4987
- Consolidated security dependency updates (Dependabot batch) by @fernandolins in https://github.com/ankitects/anki/pull/4934
- Add just recipes for run, web-watch, rebuild-web, and clean, and add AGENTS.md by @fernandolins in https://github.com/ankitects/anki/pull/4943
- Expand contributing guide with PR process and test requirements by @fernandolins in https://github.com/ankitects/anki/pull/4946
- Prevent duplicate 'missing linked issue' comments on PR edits by @fernandolins in https://github.com/ankitects/anki/pull/4937
- Use commit SHAs for GitHub Actions dependencies by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4916
- Use PowerShell to run just commands on Windows by @abdnh in https://github.com/ankitects/anki/pull/4921
- Exclude github-actions[bot] from contributor check by @abdnh in https://github.com/ankitects/anki/pull/4923
New Contributors
- @Hannanilsenn made their first contribution in https://github.com/ankitects/anki/pull/4329
- @eliasjlara made their first contribution in https://github.com/ankitects/anki/pull/4336
- @tfpgh made their first contribution in https://github.com/ankitects/anki/pull/4333
- @dspilleb made their first contribution in https://github.com/ankitects/anki/pull/4366
- @matbe766 made their first contribution in https://github.com/ankitects/anki/pull/4354
- @AmandaSternberg-creator made their first contribution in https://github.com/ankitects/anki/pull/4342
- @arold0 made their first contribution in https://github.com/ankitects/anki/pull/4377
- @nav1s made their first contribution in https://github.com/ankitects/anki/pull/4385
- @ranjitodedra made their first contribution in https://github.com/ankitects/anki/pull/4396
- @Eltaurus-Lt made their first contribution in https://github.com/ankitects/anki/pull/4407
- @jariji made their first contribution in https://github.com/ankitects/anki/pull/4387
- @Nechaiter made their first contribution in https://github.com/ankitects/anki/pull/4426
- @SelfishPig made their first contribution in https://github.com/ankitects/anki/pull/4471
- @bds124 made their first contribution in https://github.com/ankitects/anki/pull/4476
- @tunamayo04 made their first contribution in https://github.com/ankitects/anki/pull/4463
- @defkorean made their first contribution in https://github.com/ankitects/anki/pull/4501
- @RolfMaster made their first contribution in https://github.com/ankitects/anki/pull/4514
- @Yuukidiv made their first contribution in https://github.com/ankitects/anki/pull/4533
- @JMannervik made their first contribution in https://github.com/ankitects/anki/pull/4430
- @SecretX33 made their first contribution in https://github.com/ankitects/anki/pull/4478
- @DanielPechersky made their first contribution in https://github.com/ankitects/anki/pull/4335
- @MoamenAbdelsattar made their first contribution in https://github.com/ankitects/anki/pull/4428
- @DaedalusIndigo made their first contribution in https://github.com/ankitects/anki/pull/4563
- @miggazElquez made their first contribution in https://github.com/ankitects/anki/pull/4474
- @oliolioli made their first contribution in https://github.com/ankitects/anki/pull/4570
- @DaniSilvaCodes made their first contribution in https://github.com/ankitects/anki/pull/4466
- @chrislongros made their first contribution in https://github.com/ankitects/anki/pull/4668
- @CYPHER0041 made their first contribution in https://github.com/ankitects/anki/pull/4562
- @maskady made their first contribution in https://github.com/ankitects/anki/pull/4651
- @jfly made their first contribution in https://github.com/ankitects/anki/pull/4758
- @barisayyildiz made their first contribution in https://github.com/ankitects/anki/pull/4610
- @chiragjagga made their first contribution in https://github.com/ankitects/anki/pull/4837
- @Tfc538 made their first contribution in https://github.com/ankitects/anki/pull/4845
- @davidsauerwein made their first contribution in https://github.com/ankitects/anki/pull/4666
- @timarnoldev made their first contribution in https://github.com/ankitects/anki/pull/4560
Full Changelog: https://github.com/ankitects/anki/compare/25.09.4...26.05