# 25.09
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

  * 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

# 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-1

  * 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

# 25.07.3-1

  * 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_time to 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 sync by @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

# 25.07.2-1
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

PKGBUILD:

  * removed fix-offline-uv-build.patch as merged into upstream with #4170

# 25.07.1-1
What's Changed

If the existing launcher is working well for you, you don't need to download a new version - just use
Tools>Upgrade/Downgrade inside Anki to update.

  * Fixed regression in editor font by @dae in #4159
  * Fixed launcher failing to run on some Linux distros by @Grinkers in #4162
  * Add a contributor to about.py by @GithubAnon0000 in #4161
  * Rename: true retention > retention rate by @brishtibheja in #4164

PKGBUILD:

  * updated packaging to allow offline building with the new bundler, uv.
  * added man page and default xdg-mime types to the package.

# 25.07
What's Changed

New Launcher

The way Anki is packaged and distributed has changed:

  * You can use the launchers below to download the latest Anki version, and update to newer versions/downgrade to
  old ones.
  * You'll find a Tools>Upgrade/Downgrade menu item inside Anki to return the launcher.
  * The oldest supported Anki version to install is 2.1.50.
  * The Mac and Linux launchers support both AMD64 (Intel) and ARM64 (Apple Silicon) machines. The Windows
  installer is AMD64-only, but will run in emulation mode on ARM Windows.
  * On Linux, glibc 2.36 or later is now required.
  * Anki now ships with Python 3.13 (but has not yet bumped the minimum Python from 3.9).
  * The new launcher still has room for improvement.

Notable FSRS/Scheduling changes

  * FSRS-6 brings further algorithm improvements by @L-M-Sherlock in #3929
  * Add "grade now" action by @L-M-Sherlock in #3840 and @iamllama in #4055
  * Support load balance and easy days when rescheduling by @L-M-Sherlock in #3815
  * Support load balance and easy days in FSRS simulator by @L-M-Sherlock in #3829
  * Add a 'max interval too low' warning. by @Luc-Mcgrady in #3847
  * The optimizer uses a better approach for evaluating optimizations by @L-M-Sherlock in #3962
    The Evaluate button has been replaced with an optional health check that runs during optimization by
    @Luc-Mcgrady in
    #4068 and #4047. If you wish to keep using the old evaluate, you can show the button with a debug
    console command: #4149.
  * Calculate accurate retrievability in card info by elapsed seconds by @L-M-Sherlock in #4034
  * Desired retention warning improvements by @Luc-Mcgrady in #3995
  * Set Due Date: Set interval to actual elapsed days when FSRS is enabled by @L-M-Sherlock in #4035
  * Feat/Card ID special field by @Luc-Mcgrady in #4046
  * Limit study time to hours in reviews graph by @user1823 in #4086
  * Add search keyword to strip clozes beforehand by @iamllama in #4145

Other Notable Changes

  * Add IO mask colour fill tool by @iamllama in #4048
  * Allow rotating IO masks by @iamllama in #3987
  * Add an option to disable middle click to paste on Linux by @derivativeoflog7 in #3904
  * Allow drag-dropping into plaintext editor by @iamllama in #3902
  * Cache rendered mathjax to avoid stalling when editing plaintext by @iamllama in #3828
  * Consider leeches in FSRS simulator by @Luc-Mcgrady in #3837
  * Copy card debug info by @Luc-Mcgrady in #3801
  * Improve handling of 'ignore cards before' by @Luc-Mcgrady in #3910
  * Improve performance of nested clozes and increase limit to 10 levels by @iamllama in #3886
  * Replace some means in Stats with medians by @user1823 in #3900

Other Improvements

  * Add a warning when there is a cloze in "back extra" and "text" is empty by @rreemmii-dev in #3912
  * Add Cmd+W close shortcut (on Mac) to more dialogs by @beyondcompute in #3905
  * Add help modal to TR table by @GithubAnon0000 in #3874
  * Add hook for day rollover by @jakeprobst in #3817
  * Add hooks for comparing answers by @chel-ou in #3855
  * Add min-height to fields by @GithubAnon0000 in #3922
  * Add title for some dialogs and avoid hardcoding the text of the discard changes dialog by @BrayanDSO in
  #3846
  * Add-ons Dialog: disable View Config/Page/Files buttons when clicking them would not lead to useful result by
  @beyondcompute in #3869
  * Added translation contributor by @Danika-Dakika in #3820
  * Center align rows in FSRS simulator by @GithubAnon0000 in #3882
  * Chore/Simulator modal i18n by @Luc-Mcgrady in #3927
  * Cleanup old TODO by @GithubAnon0000 in #3903
  * Cloze button get disabled outside of cloze field by @Arthur-Milchior in #3879
  * Comment for translators for "Daily load" by @sommerluk in #3887
  * Comment for translators for statistics-total by @sommerluk in #3880
  * Comments for translators about sort order by @sommerluk in #3831
  * Debounce mathjax rendering to avoid stalling by @iamllama in #3827
  * Don't recalculate remaining steps, conditionally by @graves in #3849
  * feat: add title to some of the sync dialogs by @BrayanDSO in #3838
  * Feat/simplified relearning steps logic with updated FSRS training API by @L-M-Sherlock in #3867
  * Fine-tune load balancer by @Expertium in #3864
  * Fix autoplay not being stopped on editor close if it interrupted another by @iamllama in #3915
  * Fix broken window decorations on unpackaged GNOME instances by @krischerven in #3858
  * Fix card layout editor crash when editing while reviewing by @iamllama in #3814
  * Fix cargo ignoring lockfile when building syncserver image by @iamllama in #3856
  * Fix deck day limits incorrectly being carried over when importing by @iamllama in #3878
  * Fix drag/drop breaking when editor is zoomed by @iamllama in #3916
  * Fix error when middle clicking in editor on systems w/o global mouse selection by @iamllama in #3923
  * Fix fields with \n being ignored when searching all fields w/o regex by @iamllama in #3943
  * Fix flashing when opening the stats, empty cards or find dupes dialogs by @iamllama in #3928
  * Fix panic when clearing today limits on the day collection was made by @iamllama in #3877
  * Fix superfluous message when a deck is dragged to its parent by @krischerven in #3859
  * Fix: Cloze cards missing "copy card info" button by @Luc-Mcgrady in #3811
  * Fix: correct typo and adjust indentation in docstring by @babofitos in #3920
  * fix: Task manager exception handling by @RisingOrange in #3839
  * Fix/Calculate missing memory states on simulate by @Luc-Mcgrady in #3940
  * Fix/incorrect initialization of SchedTimingToday in graphs/retrievability.rs by @L-M-Sherlock in #3857
  * Fix/index out of bounds exception in Card Stats Data by @L-M-Sherlock in #3872
  * Hide AverageForDaysStudied when studiedPercent = 100 by @user1823 in #3888
  * Improve natural unit conversion for a time b/w 360 to 365 days by @user1823 in #3901
  * Improve performance of stats revlog entries with memory state by @L-M-Sherlock in #3866
  * Increase font size in mathjax preview for accessibility by @GithubAnon0000 in #3832
  * Loosen csv metadata parsing by @iamllama in #3862
  * Modify card rendering output to specify if rendered card is empty by @iamllama in #3890
  * Move TR table upwards by @GithubAnon0000 in #3873
  * NF: explaining the bridge between languages by @Arthur-Milchior in #3572
  * NF: sligthly optimize cards.py by @Arthur-Milchior in #3870
  * Persist tags when refetching csv metadata while importing by @iamllama in #3938
  * Prevent accidental dragging of audio playback buttons and hint links by @beyondcompute in #3844
  * Refactor: Make Load Balancer Optional Throughout Codebase by @YukiNagat0 in #3860
  * Remove use of createClassComponent in mathjax-element.ts by @iamllama in #3919
  * Return a copy of note type in ModelManager.get() by @abdnh in #3865
  * Show "and others" at the end of the contributor list in the About dialog by @krischerven in #3863
  * Some documentation and reduce copy/paste by @Arthur-Milchior in #3917
   * Style: add shadow to graph tooltip by @ikkz in #3891
  * Style: use consistent input styles in deck options by @ikkz in #3894
  * Update FsrsOptions.svelte to add margin / gap between simulator buttons by @GithubAnon0000 in #3822
  * Update my name in Anki's credits by @vtenfys in #3852
  * Update NoteEditor.svelte to swap sticky pin and html view. by @GithubAnon0000 in #3821
  * Update uninstall.sh to give feedback to the user by @GithubAnon0000 in #3834
  * Use default flag name when flag is renamed to empty string by @mumtazrifai in #3826
  * Use tilted (filled and unfilled) sticky icons in the cards editor by @GithubAnon0000 in #3825
  * Update to FSRS-rs v3.0.0 (fix historic memory state) by @L-M-Sherlock in #3946
  * Fix/FSRS-6 doesn't give <1d intervals & use log loss instead of RMSE(bins) by @L-M-Sherlock in #3948
  * Update sorting by R for FSRS 6 by @user1823 in #3949
  * Fix/No memory state cards have revlogs in reverse order on card stats screen. by @Luc-Mcgrady in
  #3951
  * Fix/incorrect fallback of decay by @L-M-Sherlock in #3954
  * Fix/missing-simulator-decay-for-FSRS-5 by @L-M-Sherlock in #3956
  * Feat/CMRR uses simulate config by @Luc-Mcgrady in #3947
  * Add a way to pass information from browser_will_search to browser_did_search without having it going to the
  backend by @JSchoreels in #3945
  * Fix docs of note_fields_check to match changes made in PR #3912 by @rreemmii-dev[34] in #3944
  * add toggle for browser sidebar by @JL710 in #3953
  * Close only “child” window (e.g. Preview) inside Browser on Cmd+W by @beyondcompute in #3913
  * Add ellipsis to Grade Now by @L-M-Sherlock in #3970
  * Add left margin to browser when sidebar is closed by @iamllama in #4040
  * Add myself to about.py by @GithubAnon0000 in #4026
  * Bump vite from 5.4.18 to 5.4.19 by @dependabot in #4018
  * Change collection size too large error to add MB values and info about compressed vs. uncompressed. by
  @GithubAnon0000 in #3981
  * Check if self.card.reps>0 before substracing 1 by @JSchoreels in #3966
  * Clarify field separator being a guess when importing csv by @iamllama in #3996
  * Clear notetypes cache on import by @abdnh in #3969
  * Docs: correct reference for linux dockerfile by @thedroiddiv in #3982
  * Don't use intraday relearning step as starting memory state by @mbrubeck in #3959
  * Expose decay of Card object in Python by @L-M-Sherlock in #3985
  * Fix "Open Image" being broken for filenames with certain reserved characters by @iamllama in #3986
  * Fix broken support link by @GithubAnon0000 in #4019
  * FIX diacritics being cutoff in input card templates by @GithubAnon0000 in #4049
  * Fix DR not being in percent in the forgetting curve by @GithubAnon0000 in #4024
  * Fix existing IO mask borders getting scaled by @iamllama in #3991
  * Fix invalid rust-analyzer option by @abdnh in #3972
  * Fix IO masks not saving when scaled by @iamllama in #4021
  * Fix IO undo logic error by @iamllama in #4027
  * Fix mathjax images erroneously appearing enlarged by @iamllama in #3957
  * Fix mpv cleanup by @dae in #4042
  * Fix new card sort order not reacting to changes in gather order by @abdnh in #4039
  * Fix polygons closing when clicking existing masks while editing IO by @iamllama in #3990
  * Fix pressing Ctrl+Shift+N in browser editor potentially discarding field changes by @iamllama in #4001
  * Fix searching for non-blank adjacent wildcard fields by @iamllama in #4009
  * Fix syncserver docker image build by bumping Dockerfile rust version by @KolbyML in #3993
  * Fix unescaped deck names missing from tooltips when deleted by @iamllama in #3960
  * Fix URL schemes translation by @sommerluk in #4004
  * Fix/CMRR button style by @Luc-Mcgrady in #4043
  * Fix/Invalid parameter counts saveable by @Luc-Mcgrady in #4052
    * Fix/Layout shift on Card Counts button hover by @Luc-Mcgrady in #3971
  * Fix/Leech suspended tooltip by @Luc-Mcgrady in #3992
  * Fix/Prevent manual resize of params input by @Luc-Mcgrady in #4008
  * Fix/remove incorrect invalid input check by @L-M-Sherlock in #3963
  * Fix/SQL retrievability underflow by @Luc-Mcgrady in #3980
  * Fix/stability doesn't increase after pressing good by @L-M-Sherlock in #3975
  * Improve an Error Message by @brishtibheja in #3964
  * improve the accuracy of the expected workload calculation by @L-M-Sherlock in #4056
  * Include reset entries in dataset exported for research by @user1823 in #3998
  * Make IO polygon markers centred and transparent by @iamllama in #3989
  * Offload mpv callback registration to background thread to avoid UI bl… by @marvinkopf in #4038
  * Optimize All -> Optimize All Presets by @Expertium in #4050
  * Properly align label and radio input in the stats window by @GithubAnon0000 in #3977
  * Remove dead code in reviews_for_fsrs by @mbrubeck in #3958
  * Remove incorrect "double-click to expand" overlay label on small images in editor by @iamllama in
  #4030
  * Remove percentages of x-axis in the answer buttons graph by @GithubAnon0000 in #3952
  * Resize fsrs params input to fit content by @iamllama in #3999
  * Resolve Python regex library warnings by @emmanuel-ferdman in #4012
  * Restore richtext editor focus on mathjax overlay close event by @iamllama in #4016
  * Style the fsrs params input by @iamllama in #3997
  * Update backup restore message by @brishtibheja in #4005
  * Update sync.ftl by @sommerluk in #4003
  * Upgrade esbuild versions by @spiritualfather in #4011
  * Use correct debug scripts folder by @abdnh in #3973
  * Use non breaking spaces for names on about page by @Luc-Mcgrady in #4025
  * Update default styles by @brishtibheja in #4060
  * Fix/remove the lower limit of interval when set due date by @L-M-Sherlock in #4063
  * Delay retention workload info display after FSRS optimization alerts by @Sunrongguo2008 in #4066
  * style hr element by @brishtibheja in #4067
  * Feat/Message at 100% progress for optimize by @Luc-Mcgrady in #4069
  * Use abbreviations for days of week by @brishtibheja in #4077
  * Fix/Missing CardID special field by @Luc-Mcgrady in #4078
  * update to fsrs-rs 4.1.1 by @L-M-Sherlock in #4080
  * Fix IO text labels' fill attr being saved even if default colour by @iamllama in #4083
  * Comments for translators by @sommerluk in #4075
  * Fix unescaped deck names potentially missing from overview by @iamllama in #4084
  * Clear desired retention and decay when changing decks by @user1823 in #4095
  * Update the default value of FSRS-6 decay in forgetting curve by @user1823 in #4096
  * The remaining Qt5 compatibility code has been removed.
  * include decay in ComputeMemoryStateResponse by @L-M-Sherlock in #4102
  * Upgrade to nom 8.0.0 by @iamllama in #4105
  * Fix/set due date on intraday learning card by @L-M-Sherlock in #4101
  * Save dr and decay in card even if item is None by @user1823 in #4106
  * Fix repeated ticks in reviews graph by @user1823 in #4108
  * Fix arrow keys not working in tag editor on qt 6.8 by @iamllama in #4114
  * Fix tag editor's focus outline appearing cut off by @iamllama in #4115
  * Adjust top toolbar height on body class update by @iamllama in #4120
  * Refactor FSRS data clearing into Card::clear_fsrs_data by @L-M-Sherlock in #4123
  * Fix/Optimize button alignment by @Luc-Mcgrady in #4117
  * Fix/unapplied scss by @Luc-Mcgrady in #4103
  * Make PYTHONPYCACHEPREFIX point to an absolute path by @abdnh in #4111
  * Fix/Add check_output_timestamps to PythonEnvironment by @Luc-Mcgrady in #4113
  * Remove newline: 'Restore to default confirmation' by @david-allison in #4128
  * Fix/update card.decay in card_state_updater by @L-M-Sherlock in #4127
  * Fix deck options page being scrollable while simulator modal is open by @iamllama in #4133
  * CHANGE right-click in the editor to show option to open folder in linux by @GithubAnon0000 in #4125
  * FIX: Margin between icon was selectable but shouldn't be by @GithubAnon0000 in #4122
  * Switch to Ruff by @abdnh in #4119
  * Revert "Fix/unapplied scss" by @dae in #4136
  * Add disclaimer to workload tooltip by @Luc-Mcgrady in #4131
  * Followup to #4122 (make text selectable) by @GithubAnon0000 in #4132
  * Only run "empty_filtered_deck" on filtered decks by @mbrubeck in #4139
  * Add "Copy Debug Info" to show_exception's dialog by @iamllama in #4146
  * Comments for translators by @sommerluk in #4137
  * Use system font for webviews instead of bootstrap font stack by @GithubAnon0000 in #4147
  * Feat/Add globe to help tooltip by @Luc-Mcgrady in #4148
  * Fix unique blank decks being created per row with empty deck column when importing csv by @iamllama in
  #4150

# 25.02.7-1

  * Fix some add-ons broken by the security update a few days ago (thanks to @tatsumoto-ren)
  * Fix 'record own voice' and TTS breakages (thanks to @abdnh)
  * Silence an "unknown error" message that appears on some devices.

# 25.02.6-1
Another security update. Windows users are strongly recommended to update.

  * Specially-crafted sound file references could cause files to be written to arbitrary locations on Windows. Thanks again to Michael Lappas for his investigation.
  * References to audio files outside of the media folder are no longer allowed.
  * Ensure mpv is tidied up even on a crash, which should fix the mpv errors some people got when updating.

# 25.02.5-1
More security fixes, thanks to some reports by Michael Lappas:

  * Plug a hole that could allow a malicious shared deck on Windows to execute arbitrary commands when playing audio.
  * Links to other apps (eg obsidian://...) will now request permission to open. Thanks to @soleuniverse101 for the UI improvements here.

Also, building of the Docker image for this release should be fixed, thanks to @KolbyML.

# 25.02.4-1
Fixes regressions in the 25.02.1 security update:

  * Use an alternative approach for securing the editor, which should be less disruptive.
  * Improve add-on compatibility (thanks in part to @glutanimate[1] and @iamllama[2]).
  * Don't check collection size when syncing with a custom sync server.

The following add-ons have been reported as currently incompatible:

  * Syntax Highlighting
  * Anki IPA

If you run into issues with other add-ons, please let us know on the forums.

# 25.02.1-1
This is a security-focused update. If you use any shared decks, updating is strongly recommended.

  * The review screen had protections in place to prevent shared decks from accessing other data on your computer, but these proved to be insufficient. A big thank you to Michael Lappas for the report.
  * JavaScript references such as onclick handlers are now stripped from field content when editing it. Most users are unlikely to see a change here, but it may result in breakages if you're using a shared deck that placed such content into individual fields against our recommendations.

One non-security change was also slipped in:

  * If your collection size is over the AnkiWeb limit, you'll now receive a message at the start of the sync, instead of the sync failing later.

# 25.02-1
What's Changed

Platform Support

  * Qt 5 builds are no longer provided.
  * Intel Mac builds now require macOS 1.
  * Linux builds now require glibc 2.3.

Features

  * Add "Show image in folder" and "Open image" context menu actions for IO by @iamllama in #3779
  * Add drag/drop support when adding IO images by @iamllama in #3776
  * Add future projection to forgetting curve by @L-M-Sherlock in #3732
  * Add support for copied image files when adding IO notes by @iamllama in #3733
  * FSRS updates by @L-M-Sherlock in #3737
  * Recognise and check for media referenced in tags by @iamllama in #3763
  * Tweaks the Dockerfile by @omarkohl in #3714, #3716, etc
  * When 'add' reveals the card window, it now resets deck/notetype like close+open. By @iamllama in #3756
  * Add "Copy template as markdown" button. by @Luc-Mcgrady in #3719

Fixes

  * Add "No reviews to optimize" message by @Luc-Mcgrady in #3610
  * Add contributor to about.py by @gregorylearns in #3738
  * Add margin to the bottom of forgetting curve by @L-M-Sherlock in #3805
  * Add memorized option to FSRS simulation graph by @Luc-Mcgrady in #3655
  * Add percentage to FSRS spinner by @Arthur-Milchior in #3679
  * Add some unit tests by @user1823 in #3678
  * Add support for html comments to template syntax by @iamllama in #3662
  * Add translation strings for True Retention table by @rbrownwsws in #3745
  * Added "preset" to "Optimize all" and "Optimize current" by @Expertium in #3778
  * Added colour to simulator tooltip by @Luc-Mcgrady in #3692
  * Added: SpinnerBox percentage symbol. by @Luc-Mcgrady in #3777
  * Allow choosing filtered decks in stats by @iamllama in #3687
  * Allow object to move to right edge and bottom edge and allow scroll of note fields when not using IO by @krmanik in #3630
  * Apply gradient effect to forgetting curve by @OuOu2021 in #3604
  * Avoid warning by setting SYNC_PORT as ARG in Dockerfile by @omarkohl in #3675
  * Cap preview cols to prevent stall when csv is parsed with the wrong delimiter by @iamllama in #3786
  * Change font of debug console to Consolas by @user1823 in #3606
  * Cleanup av_player on profile close by @kelciour in #3754
  * Clear memory states during bulk action if item is None by @user1823 in #3717
  * Comments for translators by @sommerluk in #3729
  * Deck options without bridge by @Arthur-Milchior in #3571
  * Delete y-axis titles for graphs by @Luc-Mcgrady in #3789
  * Don't Exclude Suspended Cards from Retreivability Graph by @brishtibheja in #3665
  * Don't treat manually scheduled cards with no reps as new cards by @user1823 in #3727
  * Easy days: revisited by @jakeprobst in #3661
  * Ensure data is stored in a volume in anki-sync-server Docker image by @omarkohl in #3674
  * Fall back to SM2 relative order when memory state missing by @dae in #3771
  * Feat/support new cards ignore review limit in simulator by @L-M-Sherlock in #3707
  * Fix "Create copy" for IO notes by @iamllama in #3730
  * Fix "discard changes" appearing even after resetting IO note by @iamllama in #3794
  * Fix "discard changes" appearing on deck options by @iamllama in #3689
  * Fix "Note Types" dialog moving down each time it is opened by @rbrownwsws in #3718
  * Fix "Show in folder" on windows when path has spaces by @iamllama in #3641
  * Fix ∷ in tags not being converted to :: when cut by @iamllama in #3791
  * Fix a build error on Yarn 4 by @mikehardy in #3752
  * Fix card info failing to load with qt5 by @iamllama in #3681
  * Fix CardInfoPlaceholder not showing when card id is invalid by @iamllama in #3631
  * Fix changes to tags not being reflected when editing in IO mode by @iamllama in #3768
  * Fix content scrolling off screen when easy days labels too long
  * Fix copying pasted images when adding IO being broken if filename has reserved chars by @iamllama in #3775
  * Fix csv columns potentially being numbered wrongly in the header when exporting by @iamllama in #3690
  * Fix deck button not clickable in stats screen for smaller screens by @Sawansunar56 in #3602
  * Fix deck options button twitching on hover by @BlueGreenMagick in #3623
  * Fix discard changes randomly being a noop on certain linux systems by @iamllama in #3781
  * Fix easy days causing load balancer to disproportionately schedule graduates to the furthest day by @jakeprobst in #3643
  * Fix EasyDays not applying defaults correctly in deck options by @iamllama in #3691
  * Fix error when right-clicking empty space in update addons dialog by @iamllama in #3780
  * Fix flaky tests by @abdnh in #3724
  * Fix Fsrs simulator input problems by @Luc-Mcgrady in #3642
  * Fix image field not being saved if a mask is created too quickly by @iamllama in #3706
  * Fix IO editor always starting in "hide all, guess one" mode by @iamllama in #3709
  * Fix issue in regex for underscored CSS imports by @abdnh in #3728
  * Fix lang selection resetting to en_US for some langs by @GithubAnon0000 in #3744
  * Fix menubar in fullscreen by @YukiNagat0 in #3710
  * Fix missing buttons on bottom bar when window is narrow by @iamllama in #3653
  * Fix mpv loadfile syntax change 2 by @kelciour in #3711
  * Fix newer notes incorrectly being skipped when importing successive exports by @iamllama in #3693
  * Fix numeric deck and notetype names being treated as ids when importing csv by @iamllama in #3748
  * Fix reuse internal clipboard for primary selection pasting by @bpnguyen107 in #3613
  * Fix segfault when closing Anki on Linux with "QT_DEBUG_PLUGINS=1" by @rbrownwsws in #3620
  * Fix SpinBox and ParamsInput's rounding causing "discard changes" to appear in deck options by @iamllama in #3686
  * Fix True Retention table clipping on overflow by @rbrownwsws in #3735
  * Fix: Simulator Ignores New Cards Already Introduced by @Luc-Mcgrady in #3760
  * Fix/dataPoint index is off by one day in simulator & remove moving average by @L-M-Sherlock in #3645
  * Fix/disable FSRS short-term scheduler if w[17] or w[18] is zero by @L-M-Sherlock in #3788
  * Fix/fallback to non-manual entry when first_of_last_learn_entries non found by @L-M-Sherlock in #3639
  * Fix/forget to update memory state during relearning by @L-M-Sherlock in #3648
  * Fix/FSRS Simulator Failure: min > max by @L-M-Sherlock in #3644
  * Fix/last date of existing card should not be positive in simulation by @L-M-Sherlock in #3667
  * Fix/re-optimize FSRS if short-term param is weird by @L-M-Sherlock in #3742
  * Hide forgetting curve radio buttons when theres only one option by @Luc-Mcgrady in #3804
  * Hide progress when CMRR is done by @bpnguyen107 in #3609
  * Increase font size in debug console by @user1823 in #3743
  * IO: Prevent text masks from flipping by @bpnguyen107 in #3672
  * Issue 2563 - remove mhchem by @Delizald in #3705
  * Make the "True Retention" table pretty by @rbrownwsws in #3640
  * More accurate sorting by R by @user1823 in #3747
  * Only update notetype/deck when reopening add window if no changes to discard by @iamllama in #3798
  * Prevent simulate button spam by @Luc-Mcgrady in #3670
  * Prevent stale frames from being drawn / always ensure up-to-date contents in webview by @Lolle2000la in #3668
  * Reduce use of type casting by @wackbyte in #3723
  * Refactor/Small refactoring on fullscreen and comments for clarification by @YukiNagat0 in #3721
  * Remove broken editor image menu when on qt5 by @iamllama in #3685
  * Remove hardcoded note/card colours from switch.py by @iamllama in #3629
  * Remove infinite spinning icon for reset parameters dropdown and add a question mark by @bpnguyen107 in #3603
  * Remove unfinished polygon when undoing and redoing in IO mode by @iamllama in #3759
  * Remove use of window.location.href in CardInfoDialog by @iamllama in #3621
  * replace localhost with 127.0.0.1 in syncserver Dockerfile by @omarkohl in #3673
  * Replace use of window.postMessage in card info by @iamllama in #3646
  * Revert Editor.set_note's signature change with an alternative approach for #3730 by @iamllama in #3736
  * Set ForceDarkMode attribute in AnkiWebView for Qt 6.7 by @louwers in #3622
  * Simulator legend tooltip by @Luc-Mcgrady in #3676
  * Slider easy day gui by @Luc-Mcgrady in #3605
  * Snap: keep LD_LIBRARY_PATH when in snap environment by @boukendesho in #3618
  * Sort FSRSItems by RevlogId for training by @L-M-Sherlock in #3660
  * Stop audio playback on editor close by @iamllama in #3666
  * Translation comments for actiony-all-selected and actiony-any-selected by @sommerluk in #3658
  * TTS: Fix text starting with "<" being treated as XML by @bpnguyen107 in #3651
  * Tweak how the True Retention stats table displays numbers by @rbrownwsws in #3677
  * typeanswer: [type:nc] - use nfkd again by @twwn in #3627
  * Unpin svelte and update sveltekit-svg by @wackbyte in #3722
  * Update Deck Options strings to clarify Timers by @Danika-Dakika in #3792
  * update docker deps and docker docs by @niclasheinz in #3671
  * update error message by @brishtibheja in #3612
  * Update reviewer.py to prevent custom scheduler js from commenting out py code by @GithubAnon0000 in #3795
  * Update to FSRS-rs v2.0.3 (fix simulator) by @L-M-Sherlock in #3784
  * Update to Yarn 4 by @dae in #3772
  * Use platform-native button layout in dialogs and messageboxes by @iamllama in #3725

PKGBUILD:
  * remove any corepack references to allow build against normal yarn

# 24.11-2

PKGBUILD:
  * Force rebuild against Python 3.13

# 24.11-1

What's Changed:

Compatibility
The Linux package now requires glibc 2.2 (2019 Ubuntu/Fedora, and 2021 Debian).

New Features
FSRS

FSRS has received significant changes in this release, and should be even more
efficient. It is recommended that you optimize your presets after updating.

To avoid errors on older clients, updated parameters will only be visible to
Anki releases from 24.11 on. Older clients will continue to work, but may
give you different scheduling results when reviews are done on them.

By @L-M-Sherlock in #3298.

Other new features:

  * Add FSRS simulator to deck options by @L-M-Sherlock in #3257
  * Add forgetting curve to card info by @L-M-Sherlock in #3437
  * Let FSRS control short term schedule when no (re)learning steps are set. This is experimental. By @L-M-Sherlock in #3375 and #3505 and #3367
Scheduling
  * Load balancing: within your fuzz range, Anki will now try to pick days that have fewer reviews waiting. By @jakeprobst in #3230.
  * Easy days: you can now tell Anki to try avoid certain days of the week. By @L-M-Sherlock in #3442
  * Decks can now be sorted by descending retrievability. Simulations have shown this is a better choice
  * when you have a backlog, and this sort order is likely to become the default in the future.

Stats/Graphs

  * Add true retention stats by @L-M-Sherlock in #3425
  * Estimated total knowledge by note, and daily load by @L-M-Sherlock in #3507

Other Features

  * Add "open image" option to editor by @user1823 in #3431
  * Add an option to show image from editor in folder by @user1823 in #3412
  * Add card position column and always show position in card info by @taylorobyen in #3471
  * Add option for toggling update checks by @voczi in #3346
  * Add revert to backup option to file menu by @taylorobyen in #3434
  * Empty Cards can now be undone by @Arthur-Milchior in #3386
  * If deck options are modified, ask before closing by @Arthur-Milchior in #3410
  * Integrate AnkiHub Sign-in into the preferences screen by @abdnh in #3232.
  * Support {{type:nc:...}} to ignore combining characters by @twwn in #3422

Other Changes

  This is not a comprehensive list; a big thank you also to people who have contributed
  things like behind-the-scenes improvements, and fixes to regressions that occurred during
  development.

  * Allow maximizing the notetypes screen by @cdonat2 in #3328
  * Apply fuzz to SM2 lapse interval and respect max ivl by @user1823 in #3275
  * Do not show warning if Browser Appearance has no field references by @abdnh in #3566
  * Do not strip quotation marks from deck/tag names by @abdnh in #3407
  * Don't exclude suspended cards when updating all FSRS params.
  * Don't hide text when hiding I/O masks by @escribapetrus in #3277
  * Don't ignore buried cards in future due graph by @jakeprobst in #3368
  * Ensure profile name is treated in a case-insensitive manner by @abdnh in #3372
  * Escape special search characters in preset name by @abdnh in #3554
  * Exclude new cards from Future Due stats by @user1823 in #3576
  * Fix .DS_Store file shown as an unused media file by @bpnguyen107 in #3380
  * Fix 'NoneType object is not subscriptable' error by @davidculley in #3286
  * Fix bug with “A 100 day interval will become X days.” by @bpnguyen107 in #3432
  * Fix editor loses focus when toggling list if list item empty by @cy7sh in #3483
  * Fix editor losing focus when toggling list and copy selects wrong target deck for filtered decks by @singurty in #3465
  * Fix error when exporting from empty cards screen
  * Fix field focus lost when pressing alt in the editor by @abdnh in #3378
  * Fix FSRS progress sometime shows 0 reviews by @L-M-Sherlock in #3591
  * Fix FSRS progress update issues by @abdnh in #3420
  * Fix graph averages by @abdnh in #3406
  * Fix imports of decks with file paths using special URL characters by @themis-d in #3377
  * Fix inconsistent retrievability calculations between normal/filtered decks and display/sorting by @L-M-Sherlock in #3582
  * Fix incorrect canvas bounds calculations in image occlusion by @taylorobyen in #3457
  * Fix invalid preset search matching cards in filtered decks
  * Fix minimum interval warning shown when FSRS is enabled by @abdnh in #3409
  * Fix Mnemosyne importer choking on due dates >= 2038 by @bpnguyen107 in #3459
  * Fix reschedule not working on cards in filtered deck by @L-M-Sherlock in #3441
  * Fix setting tags column to first unmapped column in CSV importer by @RumovZ in #3568
  * Fix UI hanging when update check stalls
  * Fix unused parent tags getting cleared by @abdnh in #3299
  * Hide right click copy option in deck list by @bpnguyen107 in #3363
  * Improve the accessibility of the Preferences dialog by @RastislavKish in #3255
  * Include backlog cards in today in future due graph by @jakeprobst in #3379
  * More closely match performance of Python FSRS optimizer by @L-M-Sherlock in #3540
  * Remove legacy import option by @abdnh in #3536
  * Stop automatically adding Image Occlusion type in Add screen by @abdnh in #3408
  * Truncate in the middle of a deck name in the browse screen, not the end by @bpnguyen107 in #3387

PKGBUILD:
  * remove forced update of "time" crate to 0.3.36 as upstream uses newer version now

# 24.06.3-2

PKGBUILD:
  * fix build with rust 1.80 (force "time" crate to use version 0.3.36)

# 24.06.3-1

What's Changed:

  * Fix deck options failing to appear in Qt5 build
  * Fix deck config input's background color in Qt5 by @abdnh in #3243
  * Fix relearning cards' Intervals don't update after changing Desired Retention by @L-M-Sherlock in #3236
  * Fix renaming note fields not updating custom browser appearance by @jamesnelmore in #3245
  * Fix image occlusion flicker caused by setupI18n() by @abdnh in #3253
  * Restore $deckOptions by @abdnh in #3265
  * Fix FSRS easy interval being same as good interval in relearning cards by @user1823 in #3256
  * Remove threshold of compute minimum recommended retention by @L-M-Sherlock in #3246
  * Shuffle identical values in filtered deck sort by @abdnh in #3259
  * Make SvelteCheck and ViteTest respect YARN_BINARY by @antecrescent in #3231

# 24.06.2-1

  * Fix image occlusion errors in previewer and card template editor by @glutanimate in #3228

# 24.06.1-1
What's Changed:

  * Fix image occlusion not working during review
  * Fix for building with custom yarn by @AlexBocken in #3226

PKGBUILD

  * bump required nodejs to >=20 (lts-iron or greater)
  * Remove patch for yarn binary as PR has been merged upstream

# 24.06-1
This release includes some security fixes for the handling of shared decks. If you make use of shared decks from untrusted authors, updating to the latest version is recommended. A big thank you to Autumn and Jay for the reports.
Image occlusion during review has been reported as broken in this release. An update is expected to follow in a day or so.

Changes in FSRS:

  * Update to latest FSRS by @L-M-Sherlock in #3106 and #3200
  * Return current weights if fsrs items is zero & handle error in evaluation and optimal retention by @L-M-Sherlock in #3141
  * Update optimal retention and parameters tooltip by @L-M-Sherlock in #3148
  * Show review count with FSRS evaluation results by @abdnh in #3165
  * Show review count for Evaluate/Optimize button by @abdnh in #3170
  * Use median in calculating cost and remove outliers by @L-M-Sherlock in #3181
  * Fix/exclude suspended cards when optimize all presets by @L-M-Sherlock in #3198
  * Fix/ignore revlogs when there is not learn entry after the last forget entry by @L-M-Sherlock in #3199
  * Tweaks to the 'optimize all presets' progress

Other improvements:

  * Highlight the current I/O shape during review by @krmanik in #3098
  * Auto-answer can now show reminder instead of answer (#3064) by @Loudwig in #3119
  * Switch to SvelteKit by @dae in #3077
  * Optimum → Minimum retention by @user1823 in #3133
  * Add Margins on the Buttons on the About Page by @Ianwu0812 in #3137
  * Improve typing of custom fabric.Object properties by @abdnh in #3134
  * Fix IO text size in review screen by @abdnh in #2986
  * Ignore errors in do_window_cleanup to fix shutdown issue by @abdnh in #3142
  * Fix spacebar causing stutter when editing cards by @abdnh in #3150
  * Fix auto sync not working on Windows shutdown by @abdnh in #3153
  * Add minimalist mode tooltip by @hnvy in #3155
  * Fix dark mode icons by @RumovZ in #3135
  * Add number truncation before back-end translation by @lucasscharenbroch in #3162
  * Add keyboard shortcuts for empty cards and toggle mask on image occlusion by @escribapetrus in #3136
  * Use key instead of code in type-in field by @abdnh in #3166
  * Improve and unify web dialog styling by @RumovZ in #3167
  * fix polygon tool draw by @krmanik in #3184
  * Clean up #3167 by @RumovZ in #3186
  * Do not clear unused parent tags by @abdnh in #3174
  * Fix '366 of 365 days studied' by @abdnh in #3182
  * Fix IO event handlers being run on normal notes by @abdnh in #3195
  * Fix finished preview learning cards being repeated by @abdnh in #3196
  * Use SplashScreen flag for all aqt tooltips by @voczi in #3194
  * Do not show media auto sync errors by @abdnh in #3197
  * HMR on Windows by @RumovZ in #3144
  * Mnemosyne importer now handles float values for due date and interval
  * Fix Mnemosyne importer clobbering source file
  * Ensure DB check tooltip appears in main window
  * Call profile_did_open hook at the end of loadProfile by @abdnh in #3202
  * Fix future due search missing cards on last day by @abdnh in #3206
  * Do not recreate io page when toggle button used by @krmanik in #3208
  * Reschedule → Reposition by @user1823 in #3209
  * Add support for custom certificates by @voczi in #3203
  * Another try at fixing IO events issue by @abdnh in #3210
  * Fixes shift click selection after programmatic selection in most cases, Issue #2469 by @RRomeroJr in #3213
  * Reword sync conflict explanation by @abdnh in #3221
  * Add a preference to toggle LaTeX generation by @abdnh in #3218
  * Pass -- to mpv/mplayer before filename by @abdnh in #3219
  * Add starting window class by @upsuper in #3216
  * Remove empty cards shortcut key, as it conflicts.
  * Honor night mode when switching between cards in card info.
  * Probable fix for crash when syncing from preferences screen.
  * Avoid askUser() in sync dialogs by @abdnh in #3222
  * Work around RuntimeError in _update_button_label() by @abdnh in #3224
  * Mention missing field's name in CardTypeError by @abdnh in #3225
  * Fix missing i18n module in IO review screen by @abdnh in #3223

PKGBUILD:
  * With the switch from Svelte to SvelteKit the build process is not entirely clean yet. SvelteKit does not respect YARN_BINRAY env var. The PKGBUILD includes a patch to fix this. A discussion has been started with remote to integrate this into upstream.

# 24.04.1-1
  * Fix crashing on first sync.
  * Image occlusion fixes, thanks to @krmanik and @abdnh.
  * Fix dark mode not being detected on Intel Macs.
  * Another attempt at fixing a rounding issue with optimal retention.
  * Rename optimal retention and clarify wording, thanks to @AntoineQ1.
  * Fix an error that can occur when using Linux distro packages, thanks to @escape0707.

PKGBUILD:
  * remove python-pip-system-certs and patch anki accordingly
  * remove disable-git-checks.patch as it is no longer needed

# 24.04-2
PKGBUILD:
  * add forgotten update to disable git checks
# 24.04-1
  * Update Qt to 6.6.2. On macOS, this should fix issues with Japanese input.
  * Update FSRS & export benchmark API by @L-M-Sherlock in #3056
  * Keep previous FSRS parameters if they get worse when optimizing by @abdnh in #2996
  * The I/O editor better preserves images quality when zooming in, and supports two-finger pinch/drag on mobile platforms. By @krmanik in #3052
  * Improved pan/zoom in image occlusions: middle mouse button, space, or ctrl/shift/alt with two fingers by @krmanik in #3080 and #3066
  * Improvements/simplifications to FSRS optimal retention feature by @L-M-Sherlock in #3065 and #3072
  * When updating all FSRS parameters at once, exclude suspended cards.
  * Move most FSRS options into their own section of the deck options.
  * Don't hide FSRS optimization section.
  * Show a warning in the optimization section if all presets haven't been optimized for 30 days or longer.
  * Show preset and original deck in card info by @abdnh in #3055
  * Use system certificate store by @abdnh in #3050
  * Ignore some extra chars in no-combining search by @abdnh in #2929
  * Add "select all" shapes tool by @krmanik in #2981
  * Maintain original IO cloze order in editing mode by @abdnh in #2987
  * Fix occasional 'failed to fetch' message popping up.
  * Fix pasted images failing to download from some sites.
  * Add by creation date review sort order by @abdnh in #2957
  * Add log-in button to preferences screen by @lucasscharenbroch in #2994
  * Add support for offline builds by @knobix in #2963
  * Add support for python logging by @cav71 in #2969
  * Add View Files button to Check Media screen by @abdnh in #3006
  * Allow > inside HTML attributes by @vaxr in #2918
  * Americanize "synchronisation" by @hnvy in #2935
  * Change default font in code editors by @abdnh in #2985
  * Check required review count for FSRS after filtering by @abdnh in #3019
  * clamp interval before fuzz_bounds by @L-M-Sherlock in #3024
  * Clear out old FSRS progress as new operation starts
  * Default to 'Bury Card' action consistently by @abdnh in #2950
  * Do not reset original_due when card stays in filtered deck by @abdnh in #2988
  * Don't urllib.unquote when using requests by @vaxr in #2943
  * Fix 'ignore this update' not working.
  * Fix processEvents() reentrancy bug in progress manager window handling by @kieranlblack in #3030
  * Fix a 'protocol wrong type' message sometimes popping up.
  * Fix circular import in legacy importer by @abdnh in #3007
  * Fix code completion in Qt forms by @abdnh in #2993
  * Fix corner rounding of alignment buttons in editor by @lucasscharenbroch in #2989
  * Fix crash in Reviewer by @mjuhanne in #2945
  * Fix deck names differing in case being duplicated in CSV import by @abdnh in #3008
  * Fix error after notetype merge + downgrade.
  * Fix flicker when hovering over deck list by @abdnh in #2958
  * Fix Image field not hidden until user selects an image by @abdnh in #2960
  * Fix importing of Mnemosyne due dates by @dae in #2936
  * Fix inconsistent count in optimize/evaluate.
  * Fix MathJax editor not opening when navigating into blocks by @abdnh in #2953
  * Fix maybe_coalesce_note_undo_entry() by @abdnh in #2992
  * Fix misaligned image occlusions in RTL languages by @abdnh in #3018
  * Fix note id mix-up when resolving notetype conflicts by @RumovZ in #2940
  * Fix notetype conflict resolution by @RumovZ in #2967
  * Fix preset: search ignoring cards in filtered decks by @abdnh in #2997
  * Fix progress manager window race condition by @kieranlblack in #3029
  * Fix regex skipping over all src except the last by @vaxr in #3021
  * Fix text input custom style wiping out base user style by @kieranlblack in #3031
  * Fix title of Auto Advance section by @abdnh in #2949
  * Fix toolbar button shifting on hover by @BlueGreenMagick in #2928
  * Fix undo handling of group and some other IO tools by @abdnh in #2931
  * Fix visual behavior of modal buttons in editor by @lucasscharenbroch in #3009
  * Fix windows build issue by @qxo in #2947
  * Fix/ignore revlogs before Forget entry by @L-M-Sherlock in #3002
  * Flip indent/outdent buttons for RTL by @abdnh in #2930
  * FSRS - Ignore revlogs before date while optimizing by @Luc-Mcgrady in #2922
  * Honor NINJA_STATUS if already set by @knobix in #2984
  * Improve appearance of resize handles in I/O by @krmanik in #2919
  * Improve typing deck_due_tree() by @nix6839 in #3003
  * Include details on what's missing when a NotFound error is triggered.
  * Increase parent limits in custom study when 'limits start from top' is enabled by @RumovZ in #2971
  * Initialize Browser.aspect_ratio earlier to fix AttributeError by @abdnh in #2924
  * Make a deep copy in addcards/set_note by @lucasscharenbroch in #3013
  * Make image occlusion's option buttons tabbable by @PLameiras in #2966
  * Make sure editor note is saved before triggering buttons by @abdnh in #2995
  * Make tags and tag suggestions able to be styled by add-ons by @glutanimate in #2941
  * More precise percent of days studied by @user1823 in #2889
  * Refactor text attribute button components by @lucasscharenbroch in #3012
  * Shift the default network timeout back to 60 seconds.
  * Show message if current FSRS parameters are optimal by @abdnh in #3014
  * Show total review count when optimizing FSRS parameters by @abdnh in #3027
  * Tweak type-in-answer filter hack by @lucasscharenbroch in #3010
  * update FSRS to v0.2.0 by @L-M-Sherlock in #2977
  * Use card.reps - 1 when calculating fuzz by @dae in #2933
  * Use our translation of 'Discard' by @abdnh in #2920
  * Containerize anki-sync-server by @jeankhawand in #3036
  * Fix alert not appearing when FSRS parameters input is focused by @abdnh in #3053
  * Adjust HTML editor / add-on config editor font by @abdnh in #3054
  * Fix/set pretrain_only by fsrs_items by @L-M-Sherlock in #3051
  * Use Card %d for IO template names by @BrayanDSO in #3049
  * alert when the resp.weights is empty by @L-M-Sherlock in #3061
  * When cards become due on the congrats screen, switch to overview, not back into study.
  * Adding a note to the import options to indicate that leech and marked tags will be removed if disabled by @arbyste in #3067
  * Fix full sync dialog failing to appear.
  * Fix consolas not being used in editor.
  * qt/aqt/init.py: Skip GL library workaround for FreeBSD by @knobix in #3071
  * fix: cloze_numbers_in_string treating {{c0::}} as valid by @BrayanDSO in #3059
  * Display deck names when deleting by @escribapetrus in #3058
  * Rename "Forget" to "Reset" (#3078) by @vasll in #3088
  * Reset original id when cloning notetypes by @RumovZ in #3089
  * Use rmse in comparing parameters by @L-M-Sherlock in #3087
  * Fix summary string for notes that failed to be imported by @RumovZ in #3092
  * Disable ligatures in type-in highlighting by @abdnh in #3093
  * Sync-server: add option to store hashed passwords by @laalsaas in #3083
  * Refactor offline build process and add offline generation of Sphinx docs by @antecrescent in #3082
  * Replace deprecated method chrono::NaiveDateTime::timestamp_millis by @ijqq in #3097
  * Update optimal retention tooltip, and add a few extra translations.
  * Possible workaround for sporadic toolbar height warning.
  * "Full sync" -> "One-way sync".
  * rename sm2 retention to historical retention by @L-M-Sherlock in #3101
  * Use "importing-added" string in importing detail table by @snowtimeglass in #3104
  * Fix mpv loadfile syntax change by @kelciour in #3105
  * Improve timer interval display (#3096) by @AntoineQ1 in #3100
  * Fix incorrect search results after preset used.
# 23.12.1-3
PKGBUILD:
  * reintroduce mold as linker, appears to be more memory efficient on some machines. Otherwise does not compile on memory constrained machines (<= 8GB)
# 23.12.1-2
PKGBUILD:
  * attempt to move away from mold as linker

# 23.12-1
FSRS:

  * Minor improvements to the algorithm (FSRS 4.5). While not essential, we recommend you re-optimize your FSRS parameters
  after updating. By @L-M-Sherlock and @asukaminato0721 in open-spaced-repetition/fsrs-rs#111 and
  open-spaced-repetition/fsrs-rs#119 and #2901.
  * The deck options Save dropdown now lets you optimize all presets at once.
  * Rewrite the optimal retention code. The new code will give different results. By @L-M-Sherlock and @asukaminato0721
  in open-spaced-repetition/fsrs-rs#122 and open-spaced-repetition/fsrs-rs#124
  * The search used for optimizing presets is now remembered. By @abdnh in #2827
  * Exclude suspended cards from optimization by default.
  * When using 'deck:*' in the search, reviews from deleted cards are included.
  * The reschedule-on-parameters-change option is now shared between all presets, and will default to off each time.
  * When cards are rescheduled multiple times without reviews, extra entries will not be added to the review log.
  * Fix some bugs in sorting by FSRS retrievability.
  * Clarify learning steps recommendation by @user1823 in #2832
  * Ignore filtered revlog in time of last review by @L-M-Sherlock in #2845
  * Fix FSRS scheduling when add-ons manually convert cards to learning by @L-M-Sherlock in #2849
  * Better approximate average retention/ease/difficulty.
  * Don't use SM2 memory state when cards are manually introduced.
  * Fix incorrect search being used when evaluating parameters.
  * Recompute FSRS memory state when cards moved into different deck.
  * Correct the description of FSRS Difficulty in Stats by @user1823 in #2888
  * FSRS ignores revlog entries with time = 0 when calculating time taken. By @L-M-Sherlock in #2870
  * Keep two decimals for stability by @L-M-Sherlock in #2873
  * Improve calculated difficulty for cards that skipped initial learning.
  * Catch NaNs in FSRS parameters.

Deck options screen:

  * Added a new v3 option to limit child decks by their parent, when clicking on the child. By @RumovZ in #2824
  * Added an auto-advance feature. Activate from More menu; configure via deck options. By @abdnh in #2765
  * The deck options screen now opens faster.
  * Change link to manual in help screen from icon to text by @Gustaf-C in #2886
  * Make help button more obvious, and remove hover animations.
  * Add a globe icon to global settings in the deck options.
  * Fix some RTL issues in help modals by @abdnh in #2857
  * Do not close web pages when Esc is pressed and a modal is open by @abdnh in #2894

Other scheduling/review-related changes:

  * When rescheduling is disabled in a filtered deck, you can now choose different delays for again, hard and good. Set to 0 to
  have that button immediately remove the card.
  * The 'preview new cards' option in custom study now uses note-added order.
  * Don't restrict answer key shortcuts to alphanumeric characters and a few symbols.
  * Include elapsed_secs in learning card state by @Gustaf-C in #2862
  * Fix cards showing up due in the past in a filtered deck.
  * Fix filtered deck ordering of intraday learning cards and reviews by @abdnh in #2828
  * Support all MathJax modules in review screen by @abdnh in #2836
  * Add hint for zero minutes in filtered deck by @Gustaf-C in #2887
  * Fix relative overdueness order error in filtered deck.
Image occlusion:

  * Add keyboard shortcuts to Image Occlusion, and fix a number of issues. By @krmanik in #2809
    and #2847
  * Fix image occlusion not showing up in Qt5 by @hikaru-y in #2829
  * Don't show an error when opening add screen when the existing I/O notetype is invalid.
  * Fix overlapping I/O icons in some languages
  * Fix changes to groups of I/O masks not saving by @abdnh in #2878
  * Fix switching of add & history buttons when selecting IO notetype by @akashreddy03 in #2833
  * Fix IO card count by @abdnh in #2884

Import/export:

  * Allow importing/exporting with/without deck configs by @RumovZ in #2804
  * Fix CSV importer dropdowns not updating after changes by @RumovZ in #2885
  * Fix inability to search for existing notes in CSV import screen by @RumovZ in #2898
  * Fix broken HTML in CSV import screen.

Editor:

  * Fix image overlay not closing when clicking outside on Qt6.6 by @hikaru-y in #2861
  * Clear editor's internal copied text on cut/copy by @abdnh in #2866
  * Fix Mathjax can only be pasted once by @akashreddy03 in #2869
  * Improve confirmation message in Add screen by @abdnh in #2903
  * Fix macOS clipboard issues by @msisovic in #2900
  * Improve visibility of clicked buttons in editor by @Gustaf-C in #2841

Card info:

  * Show due date of buried/suspended cards in card info by @abdnh in #2820
  * Hide "position" in card info when card not new.
  * Show actual due date of learning cards in Card Info screen by @abdnh in #2865
  * Bring card info window to top if card info action used again by @akashreddy03 in #2896

Browser:

  * Ensure cloze numbers sort in order when sorting by card template.
  * Fix sorting by due column in notes mode.
  * When sorting by due, intraday and interday intervals are no longer separated. By @abdnh in #2840
  * Calculate elapsed days for intraday learning cards in browse screen and relative overdueness sorting.

Platform changes:

  * Update to PyQt 6.6.1 on all platforms.
  * Platform CSS has been reimplemented. Standard selectors like .win and .mobile should continue to work; more obscure ones
  that weren't documented will not. By @abdnh in #2854
  * Automatically disable sandbox on Qt5 PyPi/packaged builds on Linux, as is required on modern glibc versions.
  * The Qt6 Apple Silicon build now correctly declares it requires macOS 1 to run, instead of crashing on startup.
  * Update licensing info of a few third-party modules by @antecrescent in #2850
  * Mention environment variable YARN_BINARY in documentation by @antecrescent in #2851

Other:

  * Improve keyboard handling and accessibility of dropdown boxes by @grepgrok in #2811
  * Resolve some accessibility issues for tag options buttons by @grepgrok in #2787
  * Ensure deck browser fetches collection data in the background.
  * Fix sync status check blocking collection access when network offline.
  * Ensure correct endpoint is used when syncing from Rust. By @sartak in #2864
  * Ignore rescheduled cards in old stats page by @user1823 in #2863
  * Do not add a fallback field reference if front side contains conditionals by @abdnh in #2859
  * Ensure progress windows get cleaned up.
  * Fix mpv idle notification not using main thread.
  * Fix mpv not working out of the box in win32 source build.
  * Handle invalid install timestamps in add-ons.
  * Offer to save changes when card layout screen is closed by @abdnh in #2899
  * Make the error dialog shown when an error occurs more friendly.
  * Refresh model list when legacy addon adds notetype by @kieranlblack in #2825

# 23.10.1-1
General:
  * Update all platforms to Qt 6.6. This change fixes Japanese input on macOS.
  * Fix Anki failing to run on older macOS versions.
  * The Linux Qt6 build requires a newer glibc, so older distros like Debian 11 won't work with it.
  * Fix syncserver failing to run in macOS packaged build.
  * Fix some potential security issues.
  * Fix 'creating backup' showing for longer than necessary.
  * Add tooltip to mask editor button.
  * Allow creation of empty filtered decks by @Gustaf-C in #2788
  * Add confirmation for upload when AnkiWeb collection determined empty.
  * Fix add-ons screen showing 'requires Anki >= 2.1.231000'.
  * Fix overflowing filenames displacing import button by @RumovZ in #2806
  * Fix Anki closing before 'your clock is wrong' message appears.
  * Hide "toggle masks" in "Hide One, Guess One" mode by @abdnh in #2817
  * Change tooltip strings for image occlusion center alignments by @snowtimeglass in #2815
  * Check video tags in media check.

FSRS:
  * Prompt user to save preset changes before they compute FSRS weights.
  * Fix panic when enabling FSRS with add-on-rescheduled cards.
  * Add an info box so the non-linear nature of desired retention can be seen
  * Improve presentation of log loss and RMSE by @user1823 in #2805
  * Rename FSRS weights to parameters
  * Handle stability < 0.5 in stability graph

# 23.10-1
Notable changes:
   * Anki's version numbering scheme has changed to year.month(.patch).
   * Quite a few add-ons will need updates to support the Qt 6 version of this release. Some porting notes are available.
   * Support for FSRS (which improves upon the scheduling provided by SM-2) is now integrated into Anki. You can compute the model weights directly inside Anki, and no longer need to use custom scheduling. If you have previously used FSRS, please delete the text in the custom scheduling section before enabling FSRS, and ensure the helper add-on has been updated to the 23.10 version if you are using it. By @L-M-Sherlock with help from @dae and @asukaminato0721 in #2633, #2654 and https://github.com/open-spaced-repetition/fsrs-rs.
   * Anki now has built-in support for creating image occlusions. Select the automatically-added "Image Occlusion" notetype in the add screen to use it. Glutanimate intends to update his add-on soon to work with the new system. By @krmanik, with help from @glutanimate, @hikaru-y, @abdnh and @dae in #2367, #2485, #2600, #2602, #2649, #2689, #2705 and more.
   * .apkg imports are able to merge changed notetypes, and can exclude scheduling data. By @RumovZ in #2612
   * Performance improvements to things like browser loading in the official builds.
   * You can now customize the video driver in Qt6 in the preferences, which can help to work around graphical issues. @abdnh in #2643
   * Add an option to stop the timer on answer by @abdnh in #2673
   * Allow searching for missing custom data properties by @abdnh in #2626
   * Support searching for custom data strings by @abdnh in #2634
   * Support for the v2 scheduler has been dropped.
   * .apkg exports now default to the new format.
   * New cards can now be gathered by deck then random note.

 Smaller tweaks/fixes:
   * Add a backend method to add notes in bulk by @abdnh in #2659
   * Add ability to tab to DuplicateLink by @SteelColossus in #2646
   * Add profile name in profile deletion confirmation message by @chandraiyengar in #2722
   * Add Sphinx documentation generation functionality by @gsingh93 in #2720
   * added Translator by @platynowy in #2653
   * Allow full screen mode on new Qt6 drivers by @abdnh in #2660
   * Allow saving window position when window fullscreen on Qt 6
   * Better error messages when csv file is in the wrong format
   * Change “Delete Note” shortcut to cmd+backspace by @montyevans in #2614
   * Check DB now fixes invalid UTF-8 in tags.
   * Close import log page on error by @abdnh in #2639
   * Display a more friendly message when one or more add-ons fail at startup
   * Do not show [object Object] in import log by @abdnh in #2636
   * Don't rely on the presence of revlogs to decide whether deck configs should be imported.
   * Fix a11y issues with Badge component by @adeleke5140 in #2721
   * Fix an error when repositioning tags (thanks to @abdnh)
   * Fix an issue caused by adding a colon to the start or end of a deck name by @swektr in #2748
   * Fix answer button tooltips not reflecting configured shortcuts by @abdnh in #2657
   * Fix error when closing Find Duplicates screen early by @abdnh in #2669
   * Fix intermittent browser error triggered by an early resize event by @abdnh in #2671
   * Fix misleading warning when changing notetype from/to cloze by @abdnh in #2744
   * Fix ModuleNotFoundError: No module named 'distutils' by @virinci in #2723
   * Fix pasting from external programs not working after copying text inside the editor.
   * Fix reversed float left/right icons
   * Fix some issues with undo/redo in mask editor by @hikaru-y in #2649
   * Fix typo: notetypeId → noteId by @glutanimate in #2615
   * Fix unable to save field dialog if certain fields are deleted by @swektr in #2663
   * Fix unescaped HTML in type-in-the-answer by @abdnh in #2658
   * Implemented support to audio_did_seek_relative by @evandrocoan in #2632
   * Reduce shaking of bottom bar by @abdnh in #2734
   * Rework media syncing to make it a little faster, and avoid duplicate errors when your password has changed. #2647
   * Skip template checks in Fields screen by @abdnh in #2670
   * Support AVIF by @nihil-admirari in #2630
   * Support Qt.TextFormat.MarkdownText in aqt.utils by @abdnh in #2675
   * The "edit current card" window is now a main window, which fixes some shortcut keys on macOS. By @abdnh in #2732
   * Tooltips for CSV import and import page refactoring by @RumovZ in #2655
   * Tweak browser column labels to card type, note type by @Gustaf-C in #2751
   * Change export notes' parent window in card browser by @kelciour in #2761
   * Fix Linux install script CWD check by @virinci in #2775
   * Make it possible to silent uninstall with WinGet by @kelciour in #2757
   * Refresh reviewer as the day rolls over by @abdnh in #2756
   * Update to Qt 6.5.3 on Windows/Mac
   * Fix error on 'Previous Card Info' when deleting a note by @abdnh in #2790
   * Fix HTML editor not displaying properly when expanding field by @hikaru-y in #2792

# 2.1.66-2
PKGBUILD:
   * pin nodejs>=18
   * use RELEASE=2 env var for better optimization. This significantly increase compile time, especially at the 'runner run' step
# 2.1.66-1
   * Windows and Mac builds have been updated to the latest toolkit version, which will hopefully fix some crashes/bugs.
   * The v3 scheduler is now the default for new users.
   * When imports complete, a summary window is now shown (thanks to Abdo).
   * Use a different approach for detecting copy+paste from Anki fields, which may fix some crashes.
   * The minimalist/reduce motion toggles should no longer affect card content.
   * Media check now automatically extracts images that have been embedded in fields.
   * Handle importing of legacy AnkiDroid backups.
   * The built-in sync server can now be built without Python if you prefer.
   * Add keyboard shortcut for legacy stats (thanks to Luc).
   * Accessibility improvements (thanks to Derek and Kenny).
   * Fix addon update dialog showing twice (thanks to Rumo).
   * Fix bold toggle not working in certain circumstances (thanks to mmjang).
   * Align code blocks to left (thanks to shunlog).
   * Make weekday font smaller for Chinese locale (thanks to mmjang).
   * Improve performance of invalid ID fix in DB check.
   * Fix main window geometry/state not being restored in some cases (thanks to Abdo).
   * Handle invalid float mtimes in DB check.
   * Fix total note count not being logged in apkg import.
   * Report actual error when DbError occurs.
   * Fix two issues with MathJax editor (thanks to Hikaru).
   * Don't fail silently when an empty csv is imported.
   * Fix two issues that can cause editor fields to behave incorrectly (thanks to Hikaru).
   * When cards are in intraday learning queue, don't use original due.
   * Fix "Add-ons possibly involved" message never appearing on Windows (thanks to Abdo).
   * Add partial support for Hangul keyboard shortcuts during review (thanks to Christopher).
   * Disable add-on buttons when no field is focused by default (thanks to Abdo).
   * Fix toggleable editor button styles (thanks to Abdo).
   * Fixed a sporadic error in the review screen (thanks to mjuhanne).
   * Fixed an error that could occur when syncing between newer and older clients.
   * Fixed tab order in find&replace screen (thanks to Gabriel).
   * Various other minor fixes and behind-the-scenes changes.

Dev related:

   * Fix incorrect handling of locals in debug console (thanks to Rumo).
   * Add did-add-field-hook analogous to did-delete-field (thanks to 3ter).
   * Fix run-qt5.15.bat (thanks to Hikaru).
   * Support more mime types for add_extension_based_on_mime (thanks to BenYip).
   * Make set_config_help_action work with submodules (thanks to Abdo).
   * Exclude Fabric's large canvas dependency (thanks to Kavel).

PKGBUILD:
   * fix patch for changed file
   * yarn run postinstall now runs in prepare()

# 2.1.65-1
  * Default to current deck in csv import if settings allow it.
  * Disable Toggle Bury when nothing is selected (thanks to Abdo).
  * Fix broken window styling when installation path includes certain Latin1 chars on Windows.
  * Fix illegible tooltips when system in dark mode on some Linux installs.
  * Fix incorrect font sizes on X11 when fractional scaling in use.
  * If the old Anki uninstaller fails, allow installation to proceed.
  * Improve phrasing in dialog that asks which deck's options should be shown (thanks to
  chrissy0).
  * Fix some add-on installation errors not being reported (thanks to Abdo)
  * Add add-on installation hooks (thanks to Abdo).

PKGBUILD:
  * When using rustup as the system cargo provider, force an update before compilation to use most recent stable branch. This way, builds using rust or rustup should be more easily recreatable

# 2.1.64-1
Functional changes:

  * The Windows installer no longer requires admin access (thanks to Martin). The first time you update, you'll need to run the installer again after uninstall completes.
  * Allow the user to configure answer keys in the preferences, fixing conflicts (thanks to Ren).
  * Preload embedded fonts to prevent flicker, and tweak wait time for image preloading (thanks to Hikaru).
  * Add the ability to search for FSRS scheduling properties, eg. prop:cdn:d>0.5 to search for the difficulty > 0.5.
  * Window positions, state and browser headers are now reset each time the Qt version changes, which should fix a number of crashes that users were reporting.
  * Add-on shortcuts will now override Anki defaults (thanks to Ren).

Fixes:

  * Fix media files being imported incorrectly when importing an .apkg file exported without support for older Anki versions.
  * Increase the number of supported fields in the editor (thanks to Hikaru).
  * Attempt to work around intermittent color setting failures in Qt6.5 on macOS.
  * Fix ugly text rendering on Wayland when using fractional scaling.
  * Fix inability to import csv when path contains single quote.
  * Show an error pop-up when csv import screen fails to load.
  * Don't disable animations on card templates when reduce motion is on.
  * Fix an error in the console when resizing windows (thanks to Austin)
  * Fix a panic when user sets a huge learning step.
  * Fix page scrolling when input box loses focus (thanks to Hikaru).
  * Fix failure to start on Windows when path contains non-Latin text.
  * Fix due/ivl prop queries not working in filtered decks.
  * Make some collection methods public in the Rust API (thanks to Joel).

PKGBUILD changes:
  * major overhaul. All fetching is now done in prepare() the latest. build() can be run offline
  * moved back to tarballs, patching .git folder manually
  * all typecheck/formatting dependencies are stripped out as this is only required for development
  * pip-sync is masked during build as we provide dependencies ourselves
  * we use the most recent stable rust toolchain in the build
  * yarn and cargo store their cache in $srcdir, a `yay/paru -Sc` will now more reliably reset the build environment
  * added this changelog
