Version 25.08b5 (d4862e99)
Python 3.13.5 Qt 6.9.1 Chromium 122
Where did the hints from Deck Options go?
Version 25.08b5 (d4862e99)
Python 3.13.5 Qt 6.9.1 Chromium 122
Where did the hints from Deck Options go?
This will be fixed in the next release.
It is still difficult to update in China
Although I chose China image, the success rate of accessing GitHub when downloading Python components is very low.
Are help tips not working for anyone else?
When you click on settings like “Desired retention” (or anything else in deck options), for example
EDIT: I downgraded to 25.07.5, help tips work there. Upgraded back to 25.08b5, they don’t work
my bad
I strongly suggest disabling the cache by default in the launcher. The app takes the double of the size with it enabled on a single install. 578mb x 2 on Windows (was the app that big before? 578mb is a lot)
And I honestly believe that most people don’t care about its small benefits in the speed of downgrading the app.
Regarding cache:
The previous version (25.02) was 507 MB.
25.08 takes 686 MB on my Windows computer (AnkiProgramFiles = 634 MB and launcher + uv = 52 MB). So, there is definitely a significant increase in the app size.
Speaking of the app size, quite a large fraction of the total size is occupied by the qt-webengine. So, the following suggestion will help:
[Sometimes, I am just astonished as to how AnkiDroid is able to pack most of Anki’s functionality in such a small app. AnkiDroid’s installer (APK) is just 38 MB.]
Switching between SM2 and FSRS in the beta version of Anki seems to cause Anki to crash. (Win11, Anki 25.08b5) This problem does not occur in Anki 25.07.5.
Reproduce steps
Anki 25.08b5 (d4862e99) (ao)
Python 3.13.5 Qt 6.9.1 PyQt 6.9.1
Platform: Windows-11-10.0.26100-SP0
Traceback (most recent call last):
File "C:\Users\shigg\AppData\Local\AnkiProgramFiles\.venv\Lib\site-packages\aqt\progress.py", line 121, in handler
func()
~~~~^^
File "C:\Users\shigg\AppData\Local\AnkiProgramFiles\.venv\Lib\site-packages\aqt\taskman.py", line 135, in <lambda>
100, lambda: on_done(fut), requires_collection=False
~~~~~~~^^^^^
File "C:\Users\shigg\AppData\Local\AnkiProgramFiles\.venv\Lib\site-packages\aqt\operations\__init__.py", line 123, in wrapped_done
future.result()
~~~~~~~~~~~~~^^
File "C:\Users\shigg\AppData\Roaming\uv\python\cpython-3.13.5-windows-x86_64-none\Lib\concurrent\futures\_base.py", line 449, in result
return self.__get_result()
~~~~~~~~~~~~~~~~~^^
File "C:\Users\shigg\AppData\Roaming\uv\python\cpython-3.13.5-windows-x86_64-none\Lib\concurrent\futures\_base.py", line 401, in __get_result
raise self._exception
File "C:\Users\shigg\AppData\Roaming\uv\python\cpython-3.13.5-windows-x86_64-none\Lib\concurrent\futures\thread.py", line 59, in run
result = self.fn(*self.args, **self.kwargs)
File "C:\Users\shigg\AppData\Local\AnkiProgramFiles\.venv\Lib\site-packages\aqt\operations\__init__.py", line 108, in wrapped_op
return self._op(mw.col)
~~~~~~~~^^^^^^^^
File "C:\Users\shigg\AppData\Local\AnkiProgramFiles\.venv\Lib\site-packages\aqt\operations\deck.py", line 99, in <lambda>
return CollectionOp(parent, lambda col: col.decks.update_deck_configs(input))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "C:\Users\shigg\AppData\Local\AnkiProgramFiles\.venv\Lib\site-packages\anki\decks.py", line 298, in update_deck_configs
op_bytes = self.col._backend.update_deck_configs_raw(input.SerializeToString())
File "C:\Users\shigg\AppData\Local\AnkiProgramFiles\.venv\Lib\site-packages\anki\_backend_generated.py", line 751, in update_deck_configs_raw
return self._run_command(11, 7, message)
~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
File "C:\Users\shigg\AppData\Local\AnkiProgramFiles\.venv\Lib\site-packages\anki\_backend.py", line 160, in _run_command
return self._backend.command(service, method, input)
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
pyo3_runtime.PanicException: called `Option::unwrap()` on a `None` value
I am sad to see Beta 5 reverted the colors in Statistics Review graph. I understand the desire for consistent coloring though. Perhaps something can be adjusted or compromised in the future. New and relearning cards are hard to differentiate again. (original comment about this The color-coding in the stats is hard to see ). I noticed someone is working on a colorblind mode, maybe that will help. Just sharing my thoughts. Thank you.
Recently TB storage has become easily available and there are several popular decks in Anki that are over 1 GB, so I think general Anki users may not be too concerned about storage.
And there is probably a difference of 10 to 100 times in UV speed between having cache and not having cache, if users are using low spec environments I think communication may be more costly. (e.g., communication costs are high, speed is slow, or unstable and disconnects)
Anki is gradually moving from PyQt to Svelte so it is possible that PyQt will eventually be completely discontinued and replaced by Svelte. (I don’t know when that will happen.)
Fatal error when changing desired retention (25.08b5)
Anki 25.08b5 (d4862e99)
Python 3.12.3 Qt 6.9.1 PyQt 6.9.1
Platform: Linux-6.14.0-27-generic-x86_64-with-glibc2.39
Traceback (most recent call last):
File "/home/eivind/.local/share/uv/tools/aqt/lib/python3.12/site-packages/aqt/progress.py", line 121, in handler
func()
File "/home/eivind/.local/share/uv/tools/aqt/lib/python3.12/site-packages/aqt/taskman.py", line 135, in <lambda>
100, lambda: on_done(fut), requires_collection=False
^^^^^^^^^^^^
File "/home/eivind/.local/share/uv/tools/aqt/lib/python3.12/site-packages/aqt/operations/__init__.py", line 123, in wrapped_done
future.result()
File "/usr/lib/python3.12/concurrent/futures/_base.py", line 449, in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/concurrent/futures/_base.py", line 401, in __get_result
raise self._exception
File "/usr/lib/python3.12/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/eivind/.local/share/uv/tools/aqt/lib/python3.12/site-packages/aqt/operations/__init__.py", line 108, in wrapped_op
return self._op(mw.col)
^^^^^^^^^^^^^^^^
File "/home/eivind/.local/share/uv/tools/aqt/lib/python3.12/site-packages/aqt/operations/deck.py", line 99, in <lambda>
return CollectionOp(parent, lambda col: col.decks.update_deck_configs(input))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/eivind/.local/share/uv/tools/aqt/lib/python3.12/site-packages/anki/decks.py", line 298, in update_deck_configs
op_bytes = self.col._backend.update_deck_configs_raw(input.SerializeToString())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/eivind/.local/share/uv/tools/aqt/lib/python3.12/site-packages/anki/_backend_generated.py", line 751, in update_deck_configs_raw
return self._run_command(11, 7, message)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/eivind/.local/share/uv/tools/aqt/lib/python3.12/site-packages/anki/_backend.py", line 160, in _run_command
return self._backend.command(service, method, input)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pyo3_runtime.PanicException: called `Result::unwrap()` on an `Err` value: PoisonError { .. }
I installed the 25.08b5 launcher, and installed the beta, then close Anki. Then I tried the following ten times:
Each time, the launcher appeared correctly. There’s no other step you’re taking that I’m missing? Could you record a short video for me?
You might keep getting it if you’re using an older client, or you don’t do a one way sync to your other clients after the fix.
Can you provide some screenshots/extra info on where it’s failing/what it’s saying?
Because the browser engine is already installed on the device, as are the GUI libraries. The desktop Anki is shipping those all separately as part of Qt.
Thanks, fix coming.
I can’t reproduce this, and suspect the fix above also addressed this.
If you mean 37f7872, then no, it doesn’t.
I can reproduce this reliably on my end. Is there a way to get you a proper rust stacktrace? The run script still only shows the Python stack, but at least it has some more info:
thread '<unnamed>' panicked at rslib/src/backend/mod.rs:122:18:
called `Result::unwrap()` on an `Err` value: PoisonError { .. }
2025-08-19 20:56:29,092:ERROR:waitress: Exception when servicing <waitress.channel.HTTPChannel connected 127.0.0.1:36556 at 0x76a3681596a0>
Traceback (most recent call last):
File "/home/eivind/source/anki/out/pyenv/lib/python3.12/site-packages/waitress/task.py", line 83, in handler_thread
task.service()
File "/home/eivind/source/anki/out/pyenv/lib/python3.12/site-packages/waitress/channel.py", line 430, in service
task.service()
File "/home/eivind/source/anki/out/pyenv/lib/python3.12/site-packages/waitress/task.py", line 167, in service
self.execute()
File "/home/eivind/source/anki/out/pyenv/lib/python3.12/site-packages/waitress/task.py", line 435, in execute
app_iter = self.channel.server.application(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/eivind/source/anki/out/pyenv/lib/python3.12/site-packages/waitress/proxy_headers.py", line 64, in translate_proxy_headers
return app(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/eivind/.local/share/Anki2/addons21/111623432/external/sentry_sdk/integrations/flask.py", line 112, in sentry_patched_wsgi_app
return middleware(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/eivind/.local/share/Anki2/addons21/111623432/external/sentry_sdk/integrations/wsgi.py", line 138, in __call__
reraise(*_capture_exception())
File "/home/eivind/.local/share/Anki2/addons21/111623432/external/sentry_sdk/utils.py", line 1746, in reraise
raise value
File "/home/eivind/.local/share/Anki2/addons21/111623432/external/sentry_sdk/integrations/wsgi.py", line 131, in __call__
response = self.app(
^^^^^^^^^
File "/home/eivind/.local/share/Anki2/addons21/111623432/external/sentry_sdk/integrations/flask.py", line 104, in <lambda>
lambda *a, **kw: old_app(self, *a, **kw),
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/eivind/source/anki/out/pyenv/lib/python3.12/site-packages/flask/app.py", line 1536, in __call__
return self.wsgi_app(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/eivind/source/anki/out/pyenv/lib/python3.12/site-packages/flask/app.py", line 1511, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/eivind/source/anki/out/pyenv/lib/python3.12/site-packages/flask/app.py", line 917, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/eivind/source/anki/out/pyenv/lib/python3.12/site-packages/flask/app.py", line 902, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/eivind/source/anki/qt/aqt/mediasrv.py", line 316, in handle_request
return _handle_dynamic_request(req)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/eivind/source/anki/qt/aqt/mediasrv.py", line 740, in _handle_dynamic_request
return req()
^^^^^
File "/home/eivind/source/anki/qt/aqt/mediasrv.py", line 689, in wrapped
if data := handler():
^^^^^^^^^
File "/home/eivind/source/anki/qt/aqt/mediasrv.py", line 670, in <lambda>
return lambda: getattr(aqt.mw.col._backend, f"{endpoint}_raw")(request.data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/eivind/source/anki/out/pylib/anki/_backend_generated.py", line 771, in get_retention_workload_raw
return self._run_command(11, 9, message)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/eivind/source/anki/pylib/anki/_backend.py", line 160, in _run_command
return self._backend.command(service, method, input)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pyo3_runtime.PanicException: attempt to subtract with overflow
Traceback (most recent call last):
File "/home/eivind/source/anki/qt/aqt/progress.py", line 121, in handler
func()
File "/home/eivind/source/anki/qt/aqt/taskman.py", line 135, in <lambda>
100, lambda: on_done(fut), requires_collection=False
^^^^^^^^^^^^
File "/home/eivind/source/anki/qt/aqt/operations/__init__.py", line 123, in wrapped_done
future.result()
File "/usr/lib/python3.12/concurrent/futures/_base.py", line 449, in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/concurrent/futures/_base.py", line 401, in __get_result
raise self._exception
File "/usr/lib/python3.12/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/eivind/source/anki/qt/aqt/operations/__init__.py", line 108, in wrapped_op
return self._op(mw.col)
^^^^^^^^^^^^^^^^
File "/home/eivind/source/anki/qt/aqt/operations/deck.py", line 99, in <lambda>
return CollectionOp(parent, lambda col: col.decks.update_deck_configs(input))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/eivind/source/anki/pylib/anki/decks.py", line 298, in update_deck_configs
op_bytes = self.col._backend.update_deck_configs_raw(input.SerializeToString())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/eivind/source/anki/out/pylib/anki/_backend_generated.py", line 751, in update_deck_configs_raw
return self._run_command(11, 7, message)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/eivind/source/anki/pylib/anki/_backend.py", line 160, in _run_command
return self._backend.command(service, method, input)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pyo3_runtime.PanicException: called `Result::unwrap()` on an `Err` value: PoisonError { .. }
Or maybe you’d like a reproducible collection file?
Ok, some more info. I was able to bisect the first bad commit to 4020089.
Now, the subtract with overflow happens in FSRS:
thread '<unnamed>' panicked at /home/eivind/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/fsrs-5.1.0/src/simulation.rs:577:32:
attempt to subtract with overflow
Which is here.
So obviously I have a situation where config.deck_size < cards.len(). I have reported to FSRS.
I get the message Added last review time to <U+2068>633<U+2069> cards every time I do a database check, even if I perform multiple consecutive checks with no sync in between.
After some debugging, I found 636 cards that have no FSRS memory state (e.g., they have 250% ease), are not new, and have 0 repetitions. I’m not sure why they are not new yet still have 0 reviews, maybe due to a past database error, or something caused by an add-on.
Deleting these cards seems to fix the issue. If I instead reset or rate them, I’m left with 1 lingering affected card (most likely a sibling).
I also have 4 other cards that are not new with 0 repetitions, but they do have FSRS’s DSR, and are not affected.
Could you check that this fixes it?
Yes it does. Thanks.
The code in Fix Cards with Missing Last Review Time During Database Check by L-M-Sherlock · Pull Request #4237 · ankitects/anki · GitHub starts by fetching the revlogs. If these cards don’t have any revlogs, they shouldn’t be processed further. So, something looks wrong. Can you share an export of the affected cards?