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 #5220
- Fix errors after add-on webviews are deleted by @aps-amboss in #5234
- Fix some inline styles not being filtered out in editor image pastes by @abdnh in #5236
- Remove unused plaintext paste handling in the editor by @abdnh in #5237
New Features
- Update to fsrs-rs 6.6.1, bringing performance improvements. By @asukaminato0721 in #4956
- An experimental rework of the editor by @abdnh in #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 #5057
Other Notable Changes
- Bump minimum required macOS version to 13.0 by @abdnh in #5010
- Fix all-users MSI installation failing to detect existing installation by @abdnh in #5038
- Do not block MSI install if registry points to a deleted old elevated install by @abdnh in #5054
- Build Linux fcitx5 plugin against the bundled Qt as a potential fix for startup crashes in 26.05. By @xiaohan484 in #5142
- Remove the uv launcher and old packaging code by @abdnh in #5019
- Strip FSRS parameters from deck configs on export without scheduling by @chrislongros in #4721
- Avoid interval FSRS regressions from fuzz by @Tfc538 in #4826
- Check Database now fixes incorrect last review time entries in cards by @user1823 in #4648
- Improve FSRS optimal parameters message by @Expertium in #5181
- Fix Anki reporting that a full sync is required for new empty collections by @abdnh in #5112
- Do not modify collection if preferences haven't changed by @abdnh in #5135
- Follow Anki's language preference in webview and native form controls by @iDavi in #4935
- Fix note editor jumps html focus by @Yuukidiv in #4687
- Fix text input refocues when list item shortcuts are pressed by @Luc-Mcgrady in #5007
- Fix empty card detection when template uses special field conditionals by @marcusl07 in #4807
- Fix image occlusion masks lost when adding notes in rare cases. By @LTimothy in #5155
- Fix text labels in image occlusion notes breaking if they contain special characters. By @iamllama in #5206
- Fix Card Info not updating on repeat by @DespicableGoose in #5115
- Do not close deck config screen when optimizing all presets by @Luc-Mcgrady in #4981
- Clean up FindDuplicatesDialog's webview on close to prevent theme-change crash by @LTimothy in #5143
Other Improvements
- Correct "1 tags" to "1 tag" by @Arthur-Milchior in #4967
- Prevent error when merging a notetype with duplicate fields in rare cases. By @krMaynard in #5070
- Set minimum height for deck options by @nikosavola in #5062
- Improve support of newlines in browser search by @jcznk in #5045
- Normalize whitespace in search query parser by @user1823 in #4853
- Cache FSRS config flags in CardQueues to avoid per-answer DB reads by @user1823 in #4755
- Use fsrs config bool for set due date by @Luc-Mcgrady in #4792
- Fix race condition in media sync handling by @helmutcarter in #4635
- Omit empty "Error details:" line from network errors by @criticalAY in #5120
Documentation Changes
- Remove duplicate intro in README by @abdnh in #5003
- Use "Getting started" as manual index page by @Luc-Mcgrady in #5013
- Set up Prettier for formatting Mintlify website by @Luc-Mcgrady in #5020
- Add translation support for docs website by @abdnh in #5052
- Fix relative links in docs by @Luc-Mcgrady in #5048
- Re-add missing doc pages by @Luc-Mcgrady in #5049
- Replace certain doc pages with redirects by @Luc-Mcgrady in #5065
Development Changes
- Add unit tests for notetype service layer by @fernandolins in #5014
- Add unit and integration tests for search service by @fernandolins in #5024
- Fix failing syncserver Docker build by @konstantintutsch in #5021
- Bump rust builder and base image for syncserver by @RedPine404 in #5036
- Add hook system tests (closes #4931) by @roostwp07 in #5023
- Add service-layer unit tests for scheduler and cards (#4924) by @fernandolins in #5042
- Bump complexipy by @abdnh in #5058
- Do not fail CI if Complexipy fails by @abdnh in #5060
- Disable MSI compression on debug build by @abdnh in #5063
- Fix flaky scheduler test by @krMaynard in #5030
- Use built-in --healthcheck instead of wget in Dockerfile by @jeankhawand in #5044
- Update allowed origins for recent Chromium by @abdnh in #5080
- Move complexipy out of Ninja checks by @abdnh in #5082
- Add basic tests for sound module and mpv binary (closes #5016) by @roostwp07 in #5066
- Clean up bot noise when linked issue is added by @fernandolins in #5089
- Bump Rust dependencies for advisories by @fernandolins in #5090
- Strengthen test coverage for audio playback by @fernandolins in #5087
- Skip MpvManager test on Linux by @abdnh in #5094
- Increase mpv timeout in test by @abdnh in #5098
- Use rust-lld on Windows by @user1823 in #4650
- Handle cross-repo refs and exempt org members from linked-issue check by @fernandolins in #5113
- Fix flaky e2e editor tests caused by premature webServer readiness by @fernandolins in #5116
- Add core FTL strings for browse card-row status chips in AnkiMobile by @ianoff in #5111
- Fix invalid GHA permission in check-linked-issue.yml by @abdnh in #5118
- Add new translation string for "No Updates available" by @abdnh in #5122
- Disallow Qt translation strings in Rust/TS code by @abdnh in #5127
- Fix advisory RUSTSEC-2026-0204 by @abdnh in #5129
- Update Briefcase by @abdnh in #5138
- Use prebuilt binaries for cargo-llvm-cov and cargo-nextest by @iamllama in #5141
- Normalize GitHub noreply emails for all contributors by @abdnh in #5159
- Fix some issues in the sync_translations.py script by @abdnh in #5161
- Bump ammonia and spin for cargo deny check by @iamllama in #5192
- Run CI checks on arm linux, intel mac, and arm windows by @fernandolins in #5102
- Re-verify PR state before auto-closing to prevent race conditions by @fernandolins in #5213
- Add browse chip search strings for AnkiMobile by @ianoff in #5137
New Contributors
- @konstantintutsch made their first contribution in #5021
- @RedPine404 made their first contribution in #5036
- @roostwp07 made their first contribution in #5023
- @krMaynard made their first contribution in https://github.com/ankitects/anki/p...
26.08b2
Pre-release
Notable Changes
- Fix broken tags editor in the note editor. By @iamllama in #5151
- Build Linux fcitx5 plugin against the bundled Qt as a potential fix for startup crashes in 26.05. By @xiaohan484 in #5142
- Prevent error when merging a notetype with duplicate fields in rare cases. By @krMaynard in #5070
- Fix image occlusion masks lost when adding notes in rare cases. By @LTimothy in #5155
- Lazy-load MathJax in the reviewer. By @BrayanDSO in #5171
- Fix text labels in image occlusion notes breaking if they contain special characters. By @iamllama in #5206
Other Changes
- CI: Use prebuilt binaries for cargo-llvm-cov and cargo-nextest by @iamllama in #5141
- CI: Normalize GitHub noreply emails for all contributors by @abdnh in #5159
- CI: Fix some issues in the sync_translations.py script by @abdnh in #5161
- CI: Bump ammonia and spin for cargo deny check by @iamllama in #5192
New Contributors
- @xiaohan484 made their first contribution in #5142
Full Changelog: 26.08b1...26.08b2
26.08b1
Pre-release
What's Changed
New Features
- Update to fsrs-rs 6.6.1, bringing performance improvements. By @asukaminato0721 in #4956
- Strip FSRS parameters from deck configs on export without scheduling by @chrislongros in #4721
- An experimental rework of the editor by @abdnh in #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 #5057
Other Changes
- Fix all-users MSI installation failing to detect existing installation by @abdnh in #5038
- Bump minimum required macOS version to 13.0 by @abdnh in #5010
- Do not block install if registry points to a deleted old elevated install by @abdnh in #5054
- Avoid interval FSRS regressions from fuzz by @Tfc538 in #4826
- Fix note editor jumps html focus by @Yuukidiv in #4687
- Remove duplicate intro in README by @abdnh in #5003
- Use "Getting started" as manual index page by @Luc-Mcgrady in #5013
- Remove the uv launcher and old packaging code by @abdnh in #5019
- Set up Prettier for formatting Mintlify website by @Luc-Mcgrady in #5020
- Add unit tests for notetype service layer by @fernandolins in #5014
- Add unit and integration tests for search service by @fernandolins in #5024
- Correct "1 tags" to "1 tag" by @Arthur-Milchior in #4967
- Move add_dynamic_styling_and_props_then_show to _on_load_finished by @Luc-Mcgrady in #4993
- Fix failing syncserver Docker build by @konstantintutsch in #5021
- Bump rust builder and base image for syncserver by @RedPine404 in #5036
- Fix relative links in docs by @Luc-Mcgrady in #5048
- Re-add missing doc pages by @Luc-Mcgrady in #5049
- Fix text input refocues when list item shortcuts are pressed by @Luc-Mcgrady in #5007
- Add translation support for docs website by @abdnh in #5052
- Add hook system tests (closes #4931) by @roostwp07 in #5023
- Add service-layer unit tests for scheduler and cards (#4924) by @fernandolins in #5042
- Bump complexipy by @abdnh in #5058
- Dont close deck config screen when optimizing all presets by @Luc-Mcgrady in #4981
- Replace certain doc pages with redirects by @Luc-Mcgrady in #5065
- Do not fail CI if Complexipy fails by @abdnh in #5060
- Disable MSI compression on debug build by @abdnh in #5063
- Fix flaky scheduler test by @krMaynard in #5030
- Use built-in --healthcheck instead of wget in Dockerfile by @jeankhawand in #5044
- Set minimum height for deck options by @nikosavola in #5062
- Improve support of newlines in browser search by @jcznk in #5045
- Normalize whitespace in search query parser by @user1823 in #4853
- Update allowed origins for recent Chromium by @abdnh in #5080
- Move complexipy out of Ninja checks by @abdnh in #5082
- Add basic tests for sound module and mpv binary (closes #5016) by @roostwp07 in #5066
- Clean up bot noise when linked issue is added by @fernandolins in #5089
- Bump Rust dependencies for advisories by @fernandolins in #5090
- Strengthen test coverage for audio playback by @fernandolins in #5087
- Skip MpvManager test on Linux by @abdnh in #5094
- Follow Anki's language preference in webview and native form controls by @iDavi in #4935
- Cache FSRS config flags in CardQueues to avoid per-answer DB reads by @user1823 in #4755
- Increase mpv timeout in test by @abdnh in #5098
- Use fsrs config bool for set due date by @Luc-Mcgrady in #4792
- Fix race condition in media sync handling by @helmutcarter in #4635
- Fix empty card detection when template uses special field conditionals by @marcusl07 in #4807
- Use rust-lld on Windows by @user1823 in #4650
- Handle cross-repo refs and exempt org members from linked-issue check by @fernandolins in #5113
- Fix flaky e2e editor tests caused by premature webServer readiness by @fernandolins in #5116
- Fix desired retention incorrectly set in simulators by @Luc-Mcgrady in #5101
- Add core FTL strings for browse card-row status chips in AnkiMobile by @ianoff in #5111
- Fix invalid GHA permission in check-linked-issue.yml by @abdnh in #5118
- Make Check Database fixes incorrect last review time entries in cards by @user1823 in #4648
- Add new translation string for "No Updates available" by @abdnh in #5122
- Disallow Qt translation strings in Rust/TS code by @abdnh in #5127
- Fix advisory RUSTSEC-2026-0204 by @abdnh in #5129
- Fix Anki reporting that a full sync is required for new empty collections by @abdnh in #5112
- Omit empty "Error details:" line from network errors by @criticalAY in #5120
- Add browse chip search strings for AnkiMobile by @ianoff in #5137
- Do not modify collection if preferences haven't changed by @abdnh in #5135
- Update Briefcase by @abdnh in #5138
- Clean up FindDuplicatesDialog's webview on close to prevent theme-change crash by @LTimothy in #5143
- Fix Card Info not updating on repeat by @DespicableGoose in #5115
- Work around race issue with activeWindow() in web request handlers by @abdnh in #5136
New Contributors
- @konstantintutsch made their first contribution in #5021
- @RedPine404 made their first contribution in #5036
- @roostwp07 made their first contribution in #5023
- @krMaynard made their first contribution in #5030
- @nikosavola made their first contribution in #5062
- @iDavi made their first contribution in #4935
- @helmutcarter made their first contribution in #4635
- @marcusl07 made their first contribution in #4807
- @ianoff made their first contribution in #5111
- @criticalAY made their first contribution in #5120
- @LTimothy made their first contribution in #5143
- @DespicableGoose made their first contribution in #5115
Full Changelog: 26.05...26.08b1
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 #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 #4882
- Python API docs can now be viewed in dev-docs.ankiweb.net. By @andrewsanchez in #4579
FSRS/Scheduling Changes
- Rework the efficiency ratio graph in FSRS Help Me Decide by @Luc-Mcgrady in #4452
- Require three left-clicks to unlock FSRS parameter editing by @Luc-Mcgrady in #4372
- Speed up FSRS memory state updates by batching calculations by @DanielPechersky in #4335
- Improve performance of
reviews_for_fsrsfunction by @L-M-Sherlock in #4339 - Fix/first and latest review dates should only consider entries with a rating. by @L-M-Sherlock in #4360
- Fix/Ensure fuzz doesn't go backward during rescheduling by @user1823 in #4364
- Fix/Per deck retention not used when card is moved to filtered deck by @Luc-Mcgrady in #4413
- Restore retrievability SQL fix that was accidentally reverted by @Luc-Mcgrady in #4424
- Fix/rounded corners on FSRS Simulator modal by @Luc-Mcgrady in #4535
- Fix FSRS short-term schedule being ignored when using default parameters by @L-M-Sherlock in #4412
- Use quantiles for FSRS retrievability stat ranges by @Luc-Mcgrady in #4425
- Make descending retrievability a pure R sort by @user1823 in #4400
- Don't reschedule suspended cards by @L-M-Sherlock in #4453
- Apply deck-specific load balancer settings to filtered deck study by @MoamenAbdelsattar in #4574
- Prioritize previously-attempted cards in the intraday learning queue by @user1823 in #4393
- Improve sibling dispersal in the load balancer, including across presets by @jakeprobst in #4640
- Fix desired retention not refreshing when switching deck option presets by @barisayyildiz in #4610
- Improve FSRS invalid parameters error message with FAQ link by @AmandaSternberg-creator in #4342
- Clarify ambiguous "this value" wording in desired retention tooltip by @Expertium in #4647
- Expose
setParameterUnlockClickTimeoutMsfor FSRS parameter unlock timeout by @Luc-Mcgrady in #4810 - Export last_interval to Python by @user1823 in #4365
- Expose card decay and desired retention to the custom scheduler by @user1823 in #4880
- Remove broken retention rate help link in stats by @Hannanilsenn in #4329
Other Notable Changes
- Show saved custom colours in the image-occlusion fill tool colour picker on mobile by @iamllama in #4348
- Add support for
tag:nc:...(case-insensitive) tag searches by @iamllama in #4344 - Treat newlines as term breaks in search queries by @eliasjlara in #4336
- Add syntax for multi-card cloze deletions by @tfpgh in #4333
- Remember image-occlusion translucency toggle between sessions by @dspilleb in #4366
- Fix "Restore to Default" picking the wrong template for basic notetype variants by @arold0 in #4382
- Let the "Limit to" spin box grow with its content in the filtered deck dialog by @jcznk in #4398
- Fix unescaped HTML in correct type-in answers by @Eltaurus-Lt in #4407
- Always show text boxes on image-occlusion cards during review by @jariji in #4387
- Fix FindDuplicates dialog size exceeding screen bounds by @Nechaiter in #4426
- Fall back to Apple Samantha for TTS on macOS when no requested voice matches by @leedoughty in #4420
- Allow variable field counts per row when CSV import uses a notetype column by @iamllama in #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 #4446
- Start decoding images immediately by @SelfishPig in #4471
- Revert ForceDarkMode change that interfered with Anki's native dark theme by @GithubAnon0000 in #4483
- Apply the nightMode class to the editor in dark mode so custom HTML styles correctly by @leedoughty in #4473
- Auto-select the relevant note type in the Manage Note Types dialog after add/rename by @Arthur-Milchior in #4479
- Fix field rename by matching on the old name rather than field position by @Arthur-Milchior in #4488
- Allow horizontal scrolling on the deck options screen so AnkiDroid handles large font sizes by @defkorean in #4501
- Fix
{{#Tags}}conditional not triggering card generation by @Yuukidiv in #4533 - Silence console spam from image decoding errors during preload by @SelfishPig in #4534
- Add note type and GUID column headers to deleted.txt for easier reimport by @hnvy in #4454
- Apply Ctrl/Cmd+W window-closing shortcut globally to all dialogs by @beyondcompute in #4475
- Fix overlapping date ranges in graphs when "all history" is selected by @JMannervik in #4430
- Add a preference to disable the startup add-on update check by @SecretX33 in #4478
- Add
dir="auto"to cards so text direction no longer depends on the UI language by @MoamenAbdelsattar in #4428 - Accept images with capitalized extensions in the Browse "Attach" dialog by @miggazElquez in #4474
- Re-enable WindowsRT TTS player on Windows 11 by @abdnh in #4512
- Fix HTML editor collapsing after toggling sticky fields and adding a note by @Yuukidiv in #4566
- Fix image occlusion editor layout for right-to-left languages by @MoamenAbdelsattar in #4594
- Speed up tag autocomplete by using the Rust backend's complete_tag() by @user1823 in #4626
- Detect cloze fields nested inside conditionals during card generation by @maskady in #4651
- Prompt to save unsaved changes when closing or switching debug console scripts by @Arthur-Milchior in #4625
- Roll back the sidebar tag name when the backend rejects a rename by @chrislongros in #4718
- Improve word wrapping on the Deck Options screen for narrow viewports by @defkorean in #4558
- Update to mpv 0.41.0 by @abdnh in #4913
- Bundle Fcitx plugin on Linux by @abdnh in #4886
- Install required Linux system dependencies in install.sh by @abdnh in #4895
- Render sync server messages as rich text by @timarnoldev in #4560
Other Improvements
26.05b2
Pre-release
Note: If you're on 26.05b1, you can also get the update using Tools > Check for Updates
What's Changed
Notable Changes
- Update to mpv 0.41.0 and fix audio playback/recording on Windows ARM by @abdnh in #4913
- feat: expose setParameterUnlockClickTimeoutMs by @Luc-Mcgrady in #4810
- fix: add fallback value for startMemorized by @Luc-Mcgrady in #4796
- fix: MSI installer fails if older installation is in Program Files by @abdnh in #4819
- fix: optimize Briefcase bundle size by @abdnh in #4822
- fix: regex error fix by @chiragjagga in #4837
- fix(export): preserve browser focus after note export by @Tfc538 in #4845
- feat: Distribute compiled sources in Briefcase bundle by @abdnh in #4856
- fix(import): avoid case-folding already existing media filenames by @iamllama in #4851
- fix(import): force lowercasing before adding hash suffix as well by @iamllama in #4860
- fix: Avoid loading unused cacert.pem by @abdnh in #4858
- fix: border color of browser cells in macOS by @abdnh in #4872
- feat: Bundle Fcitx plugin by @abdnh in #4886
- fix(check-media): case-sensitivity in unused/missing check by @iamllama in #4861
- feat(check-media): case-insensitively dedupe media filenames by @iamllama in #4852
- feat: Install required system dependencies in install.sh by @abdnh in #4895
- fix: app unresponsive after clicking on Help button in modal dialogs by @abdnh in #4897
- fix: Limit taskbar pinning fix to launcher builds by @abdnh in #4849
- refactor: import some modules lazily by @abdnh in #4831
- fix: Strip HTML from note type names in Empty Cards by @abdnh in #4902
- feat: render sync server messages as rich text by @timarnoldev in #4560
- fix: Parameterize inputs of prop:cd* queries by @abdnh in #4905
- fix: Validate add-on's zip entries by @abdnh in #4901
- feat: Allow MSI installer downgrades by @abdnh in #4909
Developer Improvements
- Update security.md. by @andrewsanchez in #4790
- Add missing PyPI metadata to anki package by @fernandolins in #4817
- fix: beta/rc suffix handling in int_version() by @abdnh in #4828
- fix: Prevent Windows elevation errors when running ninja_gen's update binaries by @abdnh in #4848
- fix:
atomic_renamenow works with single component relative paths by @jfly in #4773 - feat: add Python test coverage by @fernandolins in #4841
- feat: add Rust test coverage by @fernandolins in #4842
- feat: add TS test coverage by @fernandolins in #4843
- feat: add test coverage docs by @fernandolins in #4844
- test: Add tests for build_installer.py by @abdnh in #4868
- chore(e2e): add Playwright end-to-end test infrastructure by @fernandolins in #4864
- chore(CI): cache coverage baseline from main for regression checks by @fernandolins in #4875
- Replace print() logging in pylib with Python logging by @davidsauerwein in #4666
- fix: Avoid broad warnings filter by @abdnh in #4900
- ci: enforce linked issue requirement on PRs by @fernandolins in #4910
- ci(coverage): fail PR if line coverage regresses by @fernandolins in #4876
New Contributors
- @chiragjagga made their first contribution in #4837
- @Tfc538 made their first contribution in #4845
- @davidsauerwein made their first contribution in #4666
- @timarnoldev made their first contribution in #4560
Full Changelog: 26.05b1...26.05b2
26.05b1
Pre-release
What's Changed
New Installer
This release replaces the UV-based launcher introduced in 25.07 with a more standard installation process using Briefcase for packaging:
- Anki no longer shows a terminal on install/update.
- Installation no longer requires network access.
- You can install updates using Tools>Check For Updates.
- The macOS builds require macOS 13 or later.
- A standard MSI installer is provided for Windows.
- A native Windows ARM64 build is now available. Audio playback/recording doesn't work, but this will be fixed in the next release.
- The minimum supported Python version is now 3.10 (The official builds still ship Python 3.13).
- Anki now ships with Qt 6.11
- The Linux x86_64 build should work on glibc 2.35 or later.
FSRS/Scheduling changes
- Remove broken retention rate help link in stats by @Hannanilsenn in #4329
- Improve performance of
reviews_for_fsrsfunction by @L-M-Sherlock in #4339 - Export last_interval to Python by @user1823 in #4365
- Fix/first and latest review dates should only consider entries with a rating. by @L-M-Sherlock in #4360
- Fix/Ensure fuzz doesn't go backward during rescheduling by @user1823 in #4364
- Improve FSRS invalid parameters error message with FAQ link by @AmandaSternberg-creator in #4342
- Fix/Per deck retention not used when card is moved to filtered deck by @Luc-Mcgrady in #4413
- Restore retrievability SQL fix that was accidentally reverted by @Luc-Mcgrady in #4424
- Fix/rounded corners on FSRS Simulator modal by @Luc-Mcgrady in #4535
- Require three left-clicks to unlock FSRS parameter editing by @Luc-Mcgrady in #4372
- Fix FSRS short-term schedule being ignored when using default parameters by @L-M-Sherlock in #4412
- Use quantiles for FSRS retrievability stat ranges by @Luc-Mcgrady in #4425
- Make descending retrievability a pure R sort by @user1823 in #4400
- Don't reschedule suspended cards by @L-M-Sherlock in #4453
- Speed up FSRS memory state updates by batching calculations by @DanielPechersky in #4335
- Apply deck-specific load balancer settings to filtered deck study by @MoamenAbdelsattar in #4574
- Prioritize previously-attempted cards in the intraday learning queue by @user1823 in #4393
- Improve sibling dispersal in the load balancer, including across presets by @jakeprobst in #4640
- Rework the efficiency ratio graph in FSRS Help Me Decide by @Luc-Mcgrady in #4452
- Fix desired retention not refreshing when switching deck option presets by @barisayyildiz in #4610
- Clarify ambiguous "this value" wording in desired retention tooltip by @Expertium in #4647
- Drop QDialog argument from grade_now() to make it add-on friendly by @abdnh in #4459
Other Notable Changes
- Briefcase Installer by @andrewsanchez in #4629
- Show saved custom colours in the image-occlusion fill tool colour picker on mobile by @iamllama in #4348
- Add support for
tag:nc:...(case-insensitive) tag searches by @iamllama in #4344 - Treat newlines as term breaks in search queries by @eliasjlara in #4336
- Add syntax for multi-card cloze deletions by @tfpgh in #4333
- Remember image-occlusion translucency toggle between sessions by @dspilleb in #4366
- Fix "Restore to Default" picking the wrong template for basic notetype variants by @arold0 in #4382
- Let the "Limit to" spin box grow with its content in the filtered deck dialog by @jcznk in #4398
- Fix unescaped HTML in correct type-in answers by @Eltaurus-Lt in #4407
- Always show text boxes on image-occlusion cards during review by @jariji in #4387
- Fix FindDuplicates dialog size exceeding screen bounds by @Nechaiter in #4426
- Fall back to Apple Samantha for TTS on macOS when no requested voice matches by @leedoughty in #4420
- Allow variable field counts per row when CSV import uses a notetype column by @iamllama in #4421
- Case-fold media filenames when checking uniqueness by @iamllama in #4435
- Keep non-breaking spaces outside cloze deletions when wrapping text by @leedoughty in #4446
- Start decoding images immediately by @SelfishPig in #4471
- Revert ForceDarkMode change that interfered with Anki's native dark theme by @GithubAnon0000 in #4483
- Apply the nightMode class to the editor in dark mode so custom HTML styles correctly by @leedoughty in #4473
- Auto-select the relevant note type in the Manage Note Types dialog after add/rename by @Arthur-Milchior in #4479
- Fix field rename by matching on the old name rather than field position by @Arthur-Milchior in #4488
- Allow horizontal scrolling on the deck options screen so AnkiDroid handles large font sizes by @defkorean in #4501
- Fix
{{#Tags}}conditional not triggering card generation by @Yuukidiv in #4533 - Silence console spam from image decoding errors during preload by @SelfishPig in #4534
- Add note type and GUID column headers to deleted.txt for easier reimport by @hnvy in #4454
- Apply Ctrl/Cmd+W window-closing shortcut globally to all dialogs by @beyondcompute in #4475
- Fix overlapping date ranges in graphs when "all history" is selected by @JMannervik in #4430
- Add a preference to disable the startup add-on update check by @SecretX33 in #4478
- Add
dir="auto"to cards so text direction no longer depends on the UI language by @MoamenAbdelsattar in #4428 - Accept images with capitalized extensions in the Browse "Attach" dialog by @miggazElquez in #4474
- Re-enable WindowsRT TTS file player on Windows 11 by @abdnh in #4512
- Fix HTML editor collapsing after toggling sticky fields and adding a note by @Yuukidiv in #4566
- Fix image occlusion editor layout for right-to-left languages by @MoamenAbdelsattar in #4594
- Speed up tag autocomplete by using the Rust backend's complete_tag() by @user1823 in #4626
- Detect cloze fields nested inside conditionals during card generation by @maskady in #4651
- Prompt to save unsaved changes when closing or switching debug console scripts by @Arthur-Milchior in #4625
- Roll back the sidebar tag name when the backend rejects a rename by @chrislongros in #4718
- Improve word wrapping on the Deck Options screen for narrow viewports by @defkorean in #4558
Developer Improvements
- The release build process is now fully automated using GitHub Actions.
- Migrate CI from BuildKite to GitHub Actions. by @andrewsanchez in #4593
- Build and publish dev docs by @andrewsanchez in #4579
- Update to Rust 1.92 by @abdnh in #4461
- Add Dependabot config with monthly grouped updates by @fernandolins in #4726
- Update PyCharm docs by @abdnh in #4389
- Update VS Code config by @abdnh in #4397
- Treat proto/i18n's implicit outputs as inputs by @iamllama in #4439
- Respect .python-version when generating pyenv by @iamllama in #4436
- Add more required packages to Linux build guide by @user1823 in #4432
- Only run cargo-deny if there are dependency changes by @abdnh in #4644
- Remove old GPG public key by @dae in #4707
- Raise dependabot open-pull-requests-limit to 3 by @fernandolins in #4746
- Add release-age controls for uv and Yarn dependencies by @fernandolins in #4761
- docs: add contributing guidelines for add-ons, linked issues, and AI-assisted PRs by @fernandolins in https://gi...
25.09.4
What's Changed
This is a security release. Please upgrade as soon as possible using Tools > Upgrade/Downgrade.
Importing untrusted decks (.apkg files) had the ability to read local files. This has now been fixed.
Other fixes and new features will follow in the next beta release.
Many thanks to @Bankde for the excellent report and to @abdnh, @dae, and @fernandolins for the fix! 🙏🏻
Installing
- If you're a new user, please grab the latest launcher from https://apps.ankiweb.net
- If you already have the 25.09 launcher, you can use
Tools>Upgrade/Downgradeinside Anki. - If you have an older launcher/Anki, please grab the latest launcher first, as the older one may or may not work.
25.09.3
What's Changed
This is a security release. Please upgrade as soon as possible using Tools > Upgrade/Downgrade.
Anki's local media server did not sufficiently validate requests, which could allow a malicious website to read local files while Anki was running. This had the potential to affect mostly Firefox and Safari users. Chrome already restricts local network access. Thanks to the great Tavis Ormandy (@taviso) for the report.
All other fixes and new features since 25.09.2 will follow in a separate beta release.
Installing
- If you're a new user, please grab the latest launcher from https://apps.ankiweb.net
- If you already have the 25.09 launcher, you can use Tools>Upgrade/Downgrade inside Anki.
- If you have an older launcher/Anki, please grab the latest launcher first, as the older one may or may not work.
25.09.2
Installing
- If you're a new user, please grab the latest launcher from https://apps.ankiweb.net
- If you already have the 25.09 launcher, you can use Tools>Upgrade/Downgrade inside Anki.
- If you have an older launcher/Anki, please grab the latest launcher first, as the older one may or may not work.
What's Changed
- Fix custom colors not saving by @iamllama in #4326
- Decode images asynchronously during review. Please let us know if images in the review screen load faster or slower for you. By @abdnh in #4320
- Prevent clipping for QPushButton:default:hover by @jcznk in #4323
- Updated Dockerfile to use Ninja build system by @e-hamrin in #4321
- Fix/Add lower review limit to health check. by @Luc-Mcgrady in #4334
- Make timebox message translatable with flexible variable order by @snowtimeglass in #4338
- (UI polish) Improved margins in Card Browser's "Previewer" by @jcznk in #4337
New Contributors
Full Changelog: 25.09...25.09.2