Releases: ankitects/anki
26.05b1
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.
- 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 aarch64 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
- fix(Import): 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 #4782...
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
25.09.1
25.09
Installing
- Install the latest launcher from below
- Run Anki. If you already had it installed, use Tools>Upgrade/Downgrade
What's Changed
New Features
- Per-deck desired retention by @L-M-Sherlock in #4194
- Desired retention info graphs by @Luc-Mcgrady in #4199
- Use cached workload values by @Luc-Mcgrady in #4208
- Expected_workload_with_existing_cards implementation by @Luc-Mcgrady in #4243
- Show health check and already optimal at the same time by @Luc-Mcgrady in #4238
- Card stats update review time by @Luc-Mcgrady in #4236
- Neaten dr graph x-axis by @Luc-Mcgrady in #4251
- Enable nc: to only search in a specific field (#4276) by @maxr777 in #4312
- Show the number of cards added when adding by @iamllama in #4310
- Expose control over AppNap for AnkiConnect
Launcher Updates
Windows
- You can now tell the launcher to store files in a custom location. Updated flash drive instructions here: https://github.com/ankitects/anki-manual/pull/444/files
- Fix 'applink' startup errors on some systems
- Fix launcher display on Upgrade/Downgrade on Windows 10
macOS
- New users will no longer see pop-ups prompting you to install developer tools, or warnings about install_name_tool.
- Fix install failures on systems with the wrong Xcode arch installed.
- Fix the launcher sometimes respawning terminals repeatedly.
Linux
- Added an experimental new mode to use your system's Qt version, for things like Fcitx: https://github.com/ankitects/anki-manual/pull/445/files
- Possible fix for launcher failing to appear to some Linux systems
All platforms
- The launcher now has a download mirror option for users in China, and no longer auto-downloads on first run. The version check should now also work with SOCKS proxies.
- Fix mirror configuration not working during launcher download by @aldlss in #4280
- Fix install problems on some systems with UV_* env vars defined.
Other Improvements
- A small clarification in deck-config.ftl by @Expertium in #4264
- Add desired_retention field to NormalDeckSchema11 by @L-M-Sherlock in #4292
- Chore/Remove CMRR from fsrs help modal by @Luc-Mcgrady in #4290
- Fix #4253 by @Luc-Mcgrady in #4259
- Fix crash when disabling FSRS
- FIX gap above bury by @GithubAnon0000 in #4298
- Fix importing of Mnemosyne collections with missing cards
- Fix LRT database check for cards with no usable reviews by @user1823 in #4284
- Fix Mnemosyne fact ID in error messages by @abdnh in #4266
- Fix ninja BuildAction name sanitization by @memchr in #4291
- Fix recording errors on some system
- Fix sync errors not being reported in some cases by @abdnh in #4281
- Fix theme/checkboxes when path contains an apostrophe
- Fix/Invalid memory states in simulator after parameters changed by @Luc-Mcgrady in #4317
- Fix/Learn count not included in workload graph by @Luc-Mcgrady in #4274
- Fix/recompute memory state when deck-specific DR is changed by @L-M-Sherlock in #4293
- Fix/Simulator intervals decending overflows by @Luc-Mcgrady in #4275
- Fix/System locale for simulator percentages by @Luc-Mcgrady in #4260
- Fix/Workload simulator config deck_size unset by @Luc-Mcgrady in #4283
- Hi res microhpone icon for the recording dialog by @Madoshakalaka in #4262
- Improve elapsed seconds calculation for learning cards in browser table by @user1823 in #4255
- Increase randomness in random sorting of new cards by @user1823 in #4286
- Make simulator fill missing values of DR and decay too by @user1823 in #4269
- Replace activeWindow() with activeModalWidget() by @abdnh in #4267
- Replace deprecated $app/stores with $app/state in SvelteKit frontend by @leedoughty in #4282
- Revert "Fix/Retention help button bounds" by @dae in #4258
- Update record dialog microphone icon to respect dark mode by @leedoughty in #4297
- Use existing translation instead of adding new one (#4310) by @iamllama in #4316
- Update stale comment by @user1823 in #4235
- "Workload" variable typo by @Luc-Mcgrady in #4239
- Fix/use real step count to simulate by @L-M-Sherlock in #4240
- Statistics "Reviews" graph, make the color of "New" and "Learning" cards consistent with the color of card count by @thomasrixen in #4245
- Fix simulator graph not visible when viewport height < 400px by @iamllama in #4248
- Fix show_exception's messagebox always formatting as plaintext by @iamllama in #4246
- Limit time studied today to minutes by @user1823 in #4242
- Fix Cards with Missing Last Review Time During Database Check by @L-M-Sherlock in #4237
- Use space-around for tabbed values by @Luc-Mcgrady in #4252
- Fix/Retention help button bounds by @Luc-Mcgrady in #4253
- Fix/Exclude new cards from is_due_in_days by @user1823 in #4249
- Refactor IO fill tool target check logic by @iamllama in #4222
- Fix/use current_retrievability_seconds in SQL to keep consistent with card info by @L-M-Sherlock in #4231
- Update deck-config.ftl by @sommerluk in #4319
New Contributors
- @thomasrixen made their first contribution in #4245
- @Madoshakalaka made their first contribution in #4262
- @leedoughty made their first contribution in #4282
- @memchr made their first contribution in #4291
- @aldlss made their first contribution in #4280
- @maxr777 made their first contribution in #4312
Full Changelog: 25.07.5...25.09
25.07.5
What's Changed
In 25.07
There have been major changes to the way Anki is packaged, and to FSRS. Please see the previous release announcement for more info:
https://github.com/ankitects/anki/releases/tag/25.07
In 25.07.5
- Fix launcher failing to work after installing older Anki version.
- Various other minor launcher fixes.
- Fix a link in the deck options to the manual.
25.07.4
What's Changed
In 25.07
There have been major changes to the way Anki is packaged, and to FSRS. Please see the previous release announcement for more info:
https://github.com/ankitects/anki/releases/tag/25.07
In 25.07.4
- Installation should no longer fail when anaconda is installed.
- Increase default network timeout in launcher.
- Provide better output when downloading versions fails.
- Fix errors recording voice (thanks to @abdnh)
- Prioritise prefix matches in tag autocomplete results by @iamllama in #4212
- Add last_review_time to _to_backend_card by @user1823 in #4218
- Add IO mask rotation snapping by @iamllama in #4214
- Bump form-data from 4.0.1 to 4.0.4 by @dependabot[bot] in #4219
- Set min size for card info dialog by @iamllama in #4221
Full Changelog: 25.07.3...25.07.4
25.07.3
What's Changed
In 25.07
There have been major changes to the way Anki is packaged, and to FSRS. Please see the previous release announcement for more info:
https://github.com/ankitects/anki/releases/tag/25.07
In 25.07.3
- Update to Qt 6.9, which should address crashes on macOS.
- Fixed 'same cloze' shortcut on macOS.
- Show Chromium version in about screen
- Allow creating deck via
#deck:...if non-existent when importing by @iamllama in #4154 - Add
last_review_timeto card data for performance and accuracy by @L-M-Sherlock in #4124 - Use system font for webviews instead of bootstrap font stack and add exception for note editor by @GithubAnon0000 in #4163
- Debounce mathjax rendering via cooldown instead by @iamllama in #4173
- Re-order terminals, again, for better UX. by @Grinkers in #4186
- Skip unnecessary computations when the load balancer is disabled by @L-M-Sherlock in #4184
- Fix/FSRS simulator fallback to memory_state_from_sm2 when converting cards by @L-M-Sherlock in #4189
- set UV_PYTHON_DOWNLOADS=auto when doing
uv syncby @Grinkers in #4191 - FIX Graph Tooltip uses wrong font by @GithubAnon0000 in #4193
- Add margin to QPushButton to prevent clipping by @jcznk in #4201
- fix: set cursor to pointer when on range by @bradleyszoke in #4197
- Minor string change by @brishtibheja in #4196
- Fix default-coloured IO masks not following css var by @iamllama in #4202
- Minor tweak in simulator string by @user1823 in #4204
- Add translator to about.py by @Danika-Dakika in #4211
- Fix wrong tab order in preferences by @abdnh in #4210
New Contributors
- @jcznk made their first contribution in #4201
- @bradleyszoke made their first contribution in #4197
Full Changelog: 25.07.2...25.07.3
25.07.2
What's Changed
- The first run of the launcher now installs the latest version automatically.
- When choosing a specific version, recent versions are shown.
- Feat/Confirmation box for save options to preset by @Luc-Mcgrady in #4172
- Respect env var UV_BINARY with OFFLINE_BUILD being set by @AlexBocken in #4170
- [A11Y] FIX: revert button is visible for screenreaders by @GithubAnon0000 in #4174
- Try unix terminals in roughly most specific to least specific. by @Grinkers in #4177
- Feat/Replace easy day table with display:grid by @Luc-Mcgrady in #4179
- Fix/Help modal appears behind simulator modal by @Luc-Mcgrady in #4171
- Aqt wheel: fix unintended inclusion of qt/aqt/data by @pHlt7 in #4180
Full Changelog: 25.07.1...25.07.2