net.ankiweb.Anki anki Anki Powerful, intelligent flash cards Damien Elmes

Anki is a program which makes remembering things easy. Because it's a lot more efficient than traditional study methods, you can either greatly decrease your time spent studying, or greatly increase the amount you learn.

Anyone who needs to remember things in their daily life can benefit from Anki. Since it is content-agnostic and supports images, audio, videos and scientific markup (via LaTeX), the possibilities are endless.

Optional LaTeX support is provided by the TeX Live Flatpak extension org.freedesktop.Sdk.Extension.texlive.

ModernToolkit UserDocs AGPL-3.0+ CC0-1.0 https://apps.ankiweb.net/ https://forums.ankiweb.net/ https://docs.ankiweb.net/ https://translating.ankiweb.net/ https://raw.githubusercontent.com/flathub/net.ankiweb.Anki/refs/heads/master/img.png Flashcard and answer #9dc3db #5d90b2

What's Changed

New Installer

This release replaces the terminal-based launcher introduced in 25.07 with a more standard installation process:

  • Anki no longer shows a terminal on installation/update.
  • Installation no longer requires network access.
  • Updates can be installed using _Tools>Check For Updates_.
  • A standard MSI installer is provided for Windows.
  • A Windows ARM64 build is available.
  • The macOS builds require macOS 13 or later.
  • The Linux x86_64 build requires glibc 2.35+.
  • The Linux aarch64 build requires glibc 2.39+.
  • The minimum supported Python version is now 3.10 (The official builds still ship Python 3.13).
  • Qt has been updated to 6.11

_Note_: The _Tools>Upgrade/Downgrade_ option in 25.07+ cannot be used to upgrade to this version due to packaging changes.

_By @abdnh @andrewsanchez @fernandolins @Luc-Mcgrady @iamllama in https://github.com/ankitects/anki/pull/4629_

Documentation Improvements

  • All user/developer documentation is now unified under a single website deployed from the main repo. The different docs repos will be archived and existing issues moved soon. By @andrewsanchez @Luc-Mcgrady @abdnh in https://github.com/ankitects/anki/pull/4882
  • Python API docs can now be viewed in dev-docs.ankiweb.net. By @andrewsanchez in https://github.com/ankitects/anki/pull/4579

FSRS/Scheduling Changes

  • Rework the efficiency ratio graph in FSRS Help Me Decide by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4452
  • Require three left-clicks to unlock FSRS parameter editing by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4372
  • Speed up FSRS memory state updates by batching calculations by @DanielPechersky in https://github.com/ankitects/anki/pull/4335
  • Improve performance of reviews_for_fsrs function by @L-M-Sherlock in https://github.com/ankitects/anki/pull/4339
  • Fix/first and latest review dates should only consider entries with a rating. by @L-M-Sherlock in https://github.com/ankitects/anki/pull/4360
  • Fix/Ensure fuzz doesn't go backward during rescheduling by @user1823 in https://github.com/ankitects/anki/pull/4364
  • Fix/Per deck retention not used when card is moved to filtered deck by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4413
  • Restore retrievability SQL fix that was accidentally reverted by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4424
  • Fix/rounded corners on FSRS Simulator modal by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4535
  • Fix FSRS short-term schedule being ignored when using default parameters by @L-M-Sherlock in https://github.com/ankitects/anki/pull/4412
  • Use quantiles for FSRS retrievability stat ranges by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4425
  • Make descending retrievability a pure R sort by @user1823 in https://github.com/ankitects/anki/pull/4400
  • Don't reschedule suspended cards by @L-M-Sherlock in https://github.com/ankitects/anki/pull/4453
  • Apply deck-specific load balancer settings to filtered deck study by @MoamenAbdelsattar in https://github.com/ankitects/anki/pull/4574
  • Prioritize previously-attempted cards in the intraday learning queue by @user1823 in https://github.com/ankitects/anki/pull/4393
  • Improve sibling dispersal in the load balancer, including across presets by @jakeprobst in https://github.com/ankitects/anki/pull/4640
  • Fix desired retention not refreshing when switching deck option presets by @barisayyildiz in https://github.com/ankitects/anki/pull/4610
  • Improve FSRS invalid parameters error message with FAQ link by @AmandaSternberg-creator in https://github.com/ankitects/anki/pull/4342
  • Clarify ambiguous "this value" wording in desired retention tooltip by @Expertium in https://github.com/ankitects/anki/pull/4647
  • Expose setParameterUnlockClickTimeoutMs for FSRS parameter unlock timeout by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4810
  • Export last_interval to Python by @user1823 in https://github.com/ankitects/anki/pull/4365
  • Expose card decay and desired retention to the custom scheduler by @user1823 in https://github.com/ankitects/anki/pull/4880
  • Remove broken retention rate help link in stats by @Hannanilsenn in https://github.com/ankitects/anki/pull/4329

Other Notable Changes

  • Show saved custom colours in the image-occlusion fill tool colour picker on mobile by @iamllama in https://github.com/ankitects/anki/pull/4348
  • Add support for tag:nc:... (case-insensitive) tag searches by @iamllama in https://github.com/ankitects/anki/pull/4344
  • Treat newlines as term breaks in search queries by @eliasjlara in https://github.com/ankitects/anki/pull/4336
  • Add syntax for multi-card cloze deletions by @tfpgh in https://github.com/ankitects/anki/pull/4333
  • Remember image-occlusion translucency toggle between sessions by @dspilleb in https://github.com/ankitects/anki/pull/4366
  • Fix "Restore to Default" picking the wrong template for basic notetype variants by @arold0 in https://github.com/ankitects/anki/pull/4382
  • Let the "Limit to" spin box grow with its content in the filtered deck dialog by @jcznk in https://github.com/ankitects/anki/pull/4398
  • Fix unescaped HTML in correct type-in answers by @Eltaurus-Lt in https://github.com/ankitects/anki/pull/4407
  • Always show text boxes on image-occlusion cards during review by @jariji in https://github.com/ankitects/anki/pull/4387
  • Fix FindDuplicates dialog size exceeding screen bounds by @Nechaiter in https://github.com/ankitects/anki/pull/4426
  • Fall back to Apple Samantha for TTS on macOS when no requested voice matches by @leedoughty in https://github.com/ankitects/anki/pull/4420
  • Allow variable field counts per row when CSV import uses a notetype column by @iamllama in https://github.com/ankitects/anki/pull/4421
  • Improve handling of media files differing only in letter case by @iamllama in #4355 #4851 #4860 #4861 #4852
  • Keep non-breaking spaces outside cloze deletions when wrapping text by @leedoughty in https://github.com/ankitects/anki/pull/4446
  • Start decoding images immediately by @SelfishPig in https://github.com/ankitects/anki/pull/4471
  • Revert ForceDarkMode change that interfered with Anki's native dark theme by @GithubAnon0000 in https://github.com/ankitects/anki/pull/4483
  • Apply the nightMode class to the editor in dark mode so custom HTML styles correctly by @leedoughty in https://github.com/ankitects/anki/pull/4473
  • Auto-select the relevant note type in the Manage Note Types dialog after add/rename by @Arthur-Milchior in https://github.com/ankitects/anki/pull/4479
  • Fix field rename by matching on the old name rather than field position by @Arthur-Milchior in https://github.com/ankitects/anki/pull/4488
  • Allow horizontal scrolling on the deck options screen so AnkiDroid handles large font sizes by @defkorean in https://github.com/ankitects/anki/pull/4501
  • Fix {{#Tags}} conditional not triggering card generation by @Yuukidiv in https://github.com/ankitects/anki/pull/4533
  • Silence console spam from image decoding errors during preload by @SelfishPig in https://github.com/ankitects/anki/pull/4534
  • Add note type and GUID column headers to deleted.txt for easier reimport by @hnvy in https://github.com/ankitects/anki/pull/4454
  • Apply Ctrl/Cmd+W window-closing shortcut globally to all dialogs by @beyondcompute in https://github.com/ankitects/anki/pull/4475
  • Fix overlapping date ranges in graphs when "all history" is selected by @JMannervik in https://github.com/ankitects/anki/pull/4430
  • Add a preference to disable the startup add-on update check by @SecretX33 in https://github.com/ankitects/anki/pull/4478
  • Add dir="auto" to cards so text direction no longer depends on the UI language by @MoamenAbdelsattar in https://github.com/ankitects/anki/pull/4428
  • Accept images with capitalized extensions in the Browse "Attach" dialog by @miggazElquez in https://github.com/ankitects/anki/pull/4474
  • Re-enable WindowsRT TTS player on Windows 11 by @abdnh in https://github.com/ankitects/anki/pull/4512
  • Fix HTML editor collapsing after toggling sticky fields and adding a note by @Yuukidiv in https://github.com/ankitects/anki/pull/4566
  • Fix image occlusion editor layout for right-to-left languages by @MoamenAbdelsattar in https://github.com/ankitects/anki/pull/4594
  • Speed up tag autocomplete by using the Rust backend's complete_tag() by @user1823 in https://github.com/ankitects/anki/pull/4626
  • Detect cloze fields nested inside conditionals during card generation by @maskady in https://github.com/ankitects/anki/pull/4651
  • Prompt to save unsaved changes when closing or switching debug console scripts by @Arthur-Milchior in https://github.com/ankitects/anki/pull/4625
  • Roll back the sidebar tag name when the backend rejects a rename by @chrislongros in https://github.com/ankitects/anki/pull/4718
  • Improve word wrapping on the Deck Options screen for narrow viewports by @defkorean in https://github.com/ankitects/anki/pull/4558
  • Update to mpv 0.41.0 by @abdnh in https://github.com/ankitects/anki/pull/4913
  • Bundle Fcitx plugin on Linux by @abdnh in https://github.com/ankitects/anki/pull/4886
  • Install required Linux system dependencies in install.sh by @abdnh in https://github.com/ankitects/anki/pull/4895
  • Render sync server messages as rich text by @timarnoldev in https://github.com/ankitects/anki/pull/4560

Other Improvements

  • Fix progress bar overflow crash when one-way uploads exceed 2 GB by @matbe766 in https://github.com/ankitects/anki/pull/4354
  • Fix fatal error from rapidly double-clicking the Add button by @arold0 in https://github.com/ankitects/anki/pull/4377
  • Use the native crypto.randomUUID() instead of a custom UUID implementation by @leedoughty in https://github.com/ankitects/anki/pull/4384
  • Credit Arabic translation contributor in the About window by @hnvy in https://github.com/ankitects/anki/pull/4720
  • Tighten Collection.add_notes type annotation so single-pass iterables aren't accepted by @jfly in https://github.com/ankitects/anki/pull/4758
  • Set a friendly process job name for mpv on Windows by @abdnh in https://github.com/ankitects/anki/pull/4438
  • Add Rust unit tests for the card-generation logic by @Yuukidiv in https://github.com/ankitects/anki/pull/4551
  • Add punctuation, convert raw URLs to markdown links in READMEs by @oliolioli in https://github.com/ankitects/anki/pull/4570
  • Reorder and comment .ftl files in UI order to help translators by @RolfMaster in https://github.com/ankitects/anki/pull/4514
  • Show tooltips for truncated sidebar items in the Browse window by @nav1s in https://github.com/ankitects/anki/pull/4385
  • Stop showing an error toast when saving an image-occlusion note twice on mobile by @iamllama in https://github.com/ankitects/anki/pull/4458
  • Render `

` as a line break in card template error messages instead of literal text by @leedoughty in https://github.com/ankitects/anki/pull/4451

  • Use a true minus sign instead of a hyphen in the deck browser by @GithubAnon0000 in https://github.com/ankitects/anki/pull/4437
  • Fix sync login dialog ignoring a freshly-set custom sync server URL by @ranjitodedra in https://github.com/ankitects/anki/pull/4396
  • Add plural forms to unit labels next to spin boxes in the Custom Study dialog by @RolfMaster in https://github.com/ankitects/anki/pull/4520
  • Don't expose collection.media.db2 over the API by @dae in https://github.com/ankitects/anki/pull/4653
  • Update media sync progress dialog correctly after an error occurs in https://github.com/ankitects/anki/pull/4486
  • Disable the Custom Study OK button when the selected deck is empty by @tunamayo04 in https://github.com/ankitects/anki/pull/4463
  • Warn the user when renaming a profile would exceed the OS path length limit in https://github.com/ankitects/anki/pull/4552
  • Fix regex error by @chiragjagga in https://github.com/ankitects/anki/pull/4837
  • Preserve browser focus after note export by @Tfc538 in https://github.com/ankitects/anki/pull/4845
  • Avoid loading unused cacert.pem by @abdnh in https://github.com/ankitects/anki/pull/4858
  • Strip HTML from note type names in Empty Cards dialog by @abdnh in https://github.com/ankitects/anki/pull/4902
  • Parameterize inputs of prop:cd* queries by @abdnh in https://github.com/ankitects/anki/pull/4905
  • Validate add-on zip entries by @abdnh in https://github.com/ankitects/anki/pull/4901
  • Repaint UI after answer reveal to reduce glitches on cards with images by @abdnh in https://github.com/ankitects/anki/pull/4970

Developer Improvements

  • The release build process is now fully automated using GitHub Actions. By @andrewsanchez @abdnh @fernandolins in https://github.com/ankitects/anki/pull/4632
  • Migrate CI from BuildKite to GitHub Actions. By @andrewsanchez @abdnh @fernandolins in https://github.com/ankitects/anki/pull/4593
  • Update to Rust 1.92 by @abdnh in https://github.com/ankitects/anki/pull/4461
  • Add Dependabot config with monthly grouped updates by @fernandolins in https://github.com/ankitects/anki/pull/4726
  • Update PyCharm docs by @abdnh in https://github.com/ankitects/anki/pull/4389
  • Update VS Code config by @abdnh in https://github.com/ankitects/anki/pull/4397
  • Treat proto/i18n's implicit outputs as inputs by @iamllama in https://github.com/ankitects/anki/pull/4439
  • Respect .python-version when generating pyenv by @iamllama in https://github.com/ankitects/anki/pull/4436
  • Add more required packages to Linux build guide by @user1823 in https://github.com/ankitects/anki/pull/4432
  • Only run cargo-deny if there are dependency changes by @abdnh in https://github.com/ankitects/anki/pull/4644
  • Remove old GPG public key by @dae in https://github.com/ankitects/anki/pull/4707
  • Raise dependabot open-pull-requests-limit to 3 by @fernandolins in https://github.com/ankitects/anki/pull/4746
  • Add release-age controls for uv and Yarn dependencies by @fernandolins in https://github.com/ankitects/anki/pull/4761
  • docs: add contributing guidelines for add-ons, linked issues, and AI-assisted PRs by @fernandolins in https://github.com/ankitects/anki/pull/4782
  • Add pre-commit for automated pre-push checks by @fernandolins in https://github.com/ankitects/anki/pull/4660
  • Add a standardized pull request template by @fernandolins in https://github.com/ankitects/anki/pull/4655
  • Exclude BackendFrontendService from write_python_interface by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4410
  • Add regression test for #1909 (media check long filenames) by @bds124 in https://github.com/ankitects/anki/pull/4476
  • Update docker build command for syncserver by @CYPHER0041 in https://github.com/ankitects/anki/pull/4562
  • Exclude more folders from build actions by @abdnh in https://github.com/ankitects/anki/pull/4561
  • Add Windows quick start guide for new contributors by @DaniSilvaCodes in https://github.com/ankitects/anki/pull/4466
  • Update Windows developer docs by @user1823 in https://github.com/ankitects/anki/pull/4662
  • Ignore Fluent message errors in TypeScript by @abdnh in https://github.com/ankitects/anki/pull/4494
  • Drop QDialog argument from grade_now() to make it add-on friendly by @abdnh in https://github.com/ankitects/anki/pull/4459
  • Wrap previewer type field syntax replacement in separate method by @DaedalusIndigo in https://github.com/ankitects/anki/pull/4563
  • Document that add_deck requires refetching the deck to see its new ID by @jfly in https://github.com/ankitects/anki/pull/4760
  • Update security.md by @andrewsanchez in https://github.com/ankitects/anki/pull/4790
  • Add missing PyPI metadata to anki package by @fernandolins in https://github.com/ankitects/anki/pull/4817
  • Fix beta/rc suffix handling in int_version() by @abdnh in https://github.com/ankitects/anki/pull/4828
  • Prevent Windows elevation errors when running ninja_gen's update binaries by @abdnh in https://github.com/ankitects/anki/pull/4848
  • Fix atomic_rename to work with single-component relative paths by @jfly in https://github.com/ankitects/anki/pull/4773
  • Add Python test coverage by @fernandolins in https://github.com/ankitects/anki/pull/4841
  • Add Rust test coverage by @fernandolins in https://github.com/ankitects/anki/pull/4842
  • Add TypeScript test coverage by @fernandolins in https://github.com/ankitects/anki/pull/4843
  • Add test coverage docs by @fernandolins in https://github.com/ankitects/anki/pull/4844
  • Add tests for build_installer.py by @abdnh in https://github.com/ankitects/anki/pull/4868
  • Add Playwright end-to-end test infrastructure by @fernandolins in https://github.com/ankitects/anki/pull/4864
  • Cache coverage baseline from main for regression checks by @fernandolins in https://github.com/ankitects/anki/pull/4875
  • Replace print() logging in pylib with Python logging by @davidsauerwein in https://github.com/ankitects/anki/pull/4666
  • Avoid broad warnings filter by @abdnh in https://github.com/ankitects/anki/pull/4900
  • Enforce linked issue requirement on PRs by @fernandolins in https://github.com/ankitects/anki/pull/4910
  • Fail PR if line coverage regresses by @fernandolins in https://github.com/ankitects/anki/pull/4876
  • Import some modules lazily by @abdnh in https://github.com/ankitects/anki/pull/4831
  • Add hash script for GitHub Actions by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4991
  • Add unit tests for CSV export and import-export service layer by @fernandolins in https://github.com/ankitects/anki/pull/4976
  • Add tests for attribute and tag stripping in HTML filter by @leedoughty in https://github.com/ankitects/anki/pull/4965
  • Add unit tests for learning and relearning state transitions by @fernandolins in https://github.com/ankitects/anki/pull/4963
  • Replace deprecated global map-get/map-merge with sass:map namespace by @fernandolins in https://github.com/ankitects/anki/pull/4955
  • Remove unused Bootstrap imports from _button-mixins.scss by @fernandolins in https://github.com/ankitects/anki/pull/4953
  • Integrate Complexipy for Python complexity analysis by @abdnh in https://github.com/ankitects/anki/pull/4942 and https://github.com/ankitects/anki/pull/4987
  • Consolidated security dependency updates (Dependabot batch) by @fernandolins in https://github.com/ankitects/anki/pull/4934
  • Add just recipes for run, web-watch, rebuild-web, and clean, and add AGENTS.md by @fernandolins in https://github.com/ankitects/anki/pull/4943
  • Expand contributing guide with PR process and test requirements by @fernandolins in https://github.com/ankitects/anki/pull/4946
  • Prevent duplicate 'missing linked issue' comments on PR edits by @fernandolins in https://github.com/ankitects/anki/pull/4937
  • Use commit SHAs for GitHub Actions dependencies by @Luc-Mcgrady in https://github.com/ankitects/anki/pull/4916
  • Use PowerShell to run just commands on Windows by @abdnh in https://github.com/ankitects/anki/pull/4921
  • Exclude github-actions[bot] from contributor check by @abdnh in https://github.com/ankitects/anki/pull/4923

New Contributors

  • @Hannanilsenn made their first contribution in https://github.com/ankitects/anki/pull/4329
  • @eliasjlara made their first contribution in https://github.com/ankitects/anki/pull/4336
  • @tfpgh made their first contribution in https://github.com/ankitects/anki/pull/4333
  • @dspilleb made their first contribution in https://github.com/ankitects/anki/pull/4366
  • @matbe766 made their first contribution in https://github.com/ankitects/anki/pull/4354
  • @AmandaSternberg-creator made their first contribution in https://github.com/ankitects/anki/pull/4342
  • @arold0 made their first contribution in https://github.com/ankitects/anki/pull/4377
  • @nav1s made their first contribution in https://github.com/ankitects/anki/pull/4385
  • @ranjitodedra made their first contribution in https://github.com/ankitects/anki/pull/4396
  • @Eltaurus-Lt made their first contribution in https://github.com/ankitects/anki/pull/4407
  • @jariji made their first contribution in https://github.com/ankitects/anki/pull/4387
  • @Nechaiter made their first contribution in https://github.com/ankitects/anki/pull/4426
  • @SelfishPig made their first contribution in https://github.com/ankitects/anki/pull/4471
  • @bds124 made their first contribution in https://github.com/ankitects/anki/pull/4476
  • @tunamayo04 made their first contribution in https://github.com/ankitects/anki/pull/4463
  • @defkorean made their first contribution in https://github.com/ankitects/anki/pull/4501
  • @RolfMaster made their first contribution in https://github.com/ankitects/anki/pull/4514
  • @Yuukidiv made their first contribution in https://github.com/ankitects/anki/pull/4533
  • @JMannervik made their first contribution in https://github.com/ankitects/anki/pull/4430
  • @SecretX33 made their first contribution in https://github.com/ankitects/anki/pull/4478
  • @DanielPechersky made their first contribution in https://github.com/ankitects/anki/pull/4335
  • @MoamenAbdelsattar made their first contribution in https://github.com/ankitects/anki/pull/4428
  • @DaedalusIndigo made their first contribution in https://github.com/ankitects/anki/pull/4563
  • @miggazElquez made their first contribution in https://github.com/ankitects/anki/pull/4474
  • @oliolioli made their first contribution in https://github.com/ankitects/anki/pull/4570
  • @DaniSilvaCodes made their first contribution in https://github.com/ankitects/anki/pull/4466
  • @chrislongros made their first contribution in https://github.com/ankitects/anki/pull/4668
  • @CYPHER0041 made their first contribution in https://github.com/ankitects/anki/pull/4562
  • @maskady made their first contribution in https://github.com/ankitects/anki/pull/4651
  • @jfly made their first contribution in https://github.com/ankitects/anki/pull/4758
  • @barisayyildiz made their first contribution in https://github.com/ankitects/anki/pull/4610
  • @chiragjagga made their first contribution in https://github.com/ankitects/anki/pull/4837
  • @Tfc538 made their first contribution in https://github.com/ankitects/anki/pull/4845
  • @davidsauerwein made their first contribution in https://github.com/ankitects/anki/pull/4666
  • @timarnoldev made their first contribution in https://github.com/ankitects/anki/pull/4560

Full Changelog: https://github.com/ankitects/anki/compare/25.09.4...26.05

net.ankiweb.Anki.desktop anki.desktop dan_at_reactivated.net